第1次实践作业

(1)课程调查

进入大三下学期的后半段,大学阶段的理论课程应该已经修得八九不离十了,在这个时间点迎来系统综合实践这门课,作为培养计划的一门新课程,我们非常希望了解你们对于课程的希望,请写下你对这门课的认识和你理想中的这门课程是怎么样的。

一开始以为是关于计算机系统的综合实验,后来上学期期末听老师说系统原来不是那个系统。。
我理想的这门课应该是能够综合之前所学的理论来实践的吧,希望能够锻炼自己的实践上手能力。

(2)了解微服务

1.微服务是什么

微服务是系统架构上的一种设计风格,主旨是将一个原本独立的系统拆分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间通过基于HTTP/HTTPS协议的RESTful API进行通信协作,也可以通过RPC协议进行通信协作。被拆分成的每一个小型服务都围绕着系统中一些耦合度较高的业务功能进行构建,并且每个服务都维护着自身的数据存储,业务开发,自动化测试案例以及独立部署机制。由于有了轻量级的通信协作基础,所以这些微服务可以使用不同的语言来编写。

2.微服务的特点

相比较于单体应用架构和SOA架构,微服务架构的主要特点是组件化、松耦合、自治、去中心化,体现在以下几个方面:用 4个字描述就是小 独 轻 松
小:体现每个微服务粒度要小,而每个服务是针对一个单一职责的业务能力的封装,专注做好一件事情。
独:独立部署运行和扩展。每个服务能够独立被部署并运行在一个进程内。这种运行和部署方式能够赋予系统灵活的代码组织方式和发布节奏,使得快速交付和应对变化成为可能。
轻:系统相比较复杂单体应用更为简洁轻量化,每个微服务因为独立部署,可以使用不同跨语言编写,这样使得微服务架构更为灵活.
松:低耦合性,符合面向对象设计高内聚低耦合特性。不同模块间依赖低,相互关联小(因为每个微服务设计的初衷是每个服务专注一个模块开发)

3.相较于传统的软件架构,它有什么优缺点

优点
每个微服务都很小,足够内聚,足够小,代码容易理解。团队能够更关注自己的工作成果, 聚焦指定的业务功能或业务需求。
微服务是松藕合的,无论是在开发阶段或部署阶段都是独立的。
能够快速响应, 局部修改容易, 一个服务出现问题不会影响整个应用。
易于和第三方应用系统集成, 支持使用不同的语言开发, 允许你利用融合最新技术。
开发简单、开发效率提高,一个服务可能就是专一的只干一件事, 能够被小团队单独开发。
缺点
微服务架构带来过多的运维操作, 可能需要团队具备一定的 DevOps 技巧.
分布式系统可能复杂难以管理。因为分布部署跟踪问题难。当服务数量增加,管理复杂性增加。
开发效率低:所有的开发在一个项目改代码,递交代码相互等待,代码冲突不断
代码维护难:代码功能耦合在一起,新人不知道何从下手
部署不灵活:构建时间长,任何小修改必须重新构建整个项目,这个过程往往很长
稳定性不高:一个微不足道的小问题,可以导致整个应用挂掉
扩展性不够:无法满足高并发情况下的业务需求

4.微服务的部署

首先,微服务的部署有以下要求:

  • 有能力在不依赖其他服务的情况下部署/撤销;
  • 能在每个微服务的级别进行扩展(某个服务可能比其他服务有更多的流量);
  • 快速构建和部署微服务;
  • 一个微服务的失效不能影响其他服务
    例:
    Docker(一个开源引擎可以让开发者和系统管理员部署自包含的应用容器到Linux环境中)提供了一个满足上述需求的部署方案。里面涉及的核心步骤有:
    将微服务打包为Docker镜像;
    将每个服务实例部署为容器;
    通过改变容器的数量来实现服务的扩展;
    使用Docker容器时服务的构建,部署和启动都相当快(通常比虚拟机快的多)。

Kubernetes扩展了Docker的能力:可以像管理一个系统那样管理一个Linux容器的集群,跨主机运行和管理Docker容器, 提供容器的多地部署、服务发现和复制控制。正如你看到的,这些特性中的大多数在微服务场景下也是特别核心的。因此使用Kubernetes(基于Docker)来做微服务部署已成为一种相当强大的方法,特别对于大型的微服务部署而言。

(3)学习docker技术

docker的相关概念
docker:docker是开源的应用容器引擎,开发者可打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
镜像(Image):Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
容器(Container):容器(container)的定义和镜像(image)几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。 容器是由镜像实例化而来,这和我们学习的面向对象的概念十分相似,我们可以把镜像看作类,把容器看作类实例化后的对象。
仓库(Repository):仓库可看着一个代码控制中心,用来保存镜像。
docker compose:docker compose可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具。
Dockerfile:Dockerfile是一个Docker镜像的描述文件,其内部包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
docker machine:docker machine是一个工具,它允许你在虚拟宿主机上安装Docker,并使用docker-machine命令管理这个宿主机,可以使用Docker Machine在本地的MAC或者windows box、公司网络,数据中心或者AWS这样的云提供商上创建docker。
Swarm:Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源。Swarm和Kubernetes比较类似,但是更加轻,具有的功能也较kubernetes更少一些。
k8s:k8s是基于容器的集群管理平台,它的全称,是kubernetes。

(4) docker环境搭建记录

安装

1.更新apt源
sudo apt-get update

2.安装以下包使apt可以通过HTTPS使用存储库(repository)
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

3.添加Docker的官方GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

4.Verify
sudo apt-key fingerprint 0EBFCD88

5.设置stable存储库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

6.再次更新apt
sudo apt-get update

7.安装docker CE
sudo apt-get install -y docker-ce

8.查看docker服务是否启动
systemctl status docker

9.创建docker用户组
sudo groupadd docker #添加组
sudo gpasswd -a $USER docker #将当前用户加入到docker组
newgrp docker #更新docker组

docker的容器操作

1.使用阿里云容器镜像服务



2.获取镜像
docker pull ubuntu:16.04

3.启动容器
docker run -it ubuntu:16.04 /bin/bash
-i : 交互式操作
-t : 终端
ubuntu:16.04 :镜像名
/bin/bash :放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
exit退出容器

4.查看所有容器的状态
docker ps -a查看所有容器的状态

5.启动一个已经停止的容器
docker start a2dcf2f1121e

6.进入一个在后台运行的容器
docker attach <容器id> #一旦exit退出,容器就关闭

7.停止一个容器运行
docker stop a2dcf2f1121e
8.重启一个容器
docker restart a2dcf2f1121e

9.查询一个容器的状态
docker inspect a2dcf2f1121e

10.导出容器
docker export a2dcf2f1121e > ubuntu.tar

11.导入容器快照
docker import ubuntu.tar test

docker的镜像操作

1.查看镜像
docker images

2.拉取镜像
docker pull ubuntu:16.04
3.删除镜像
docker rmi test
test是镜像名

4.创建仓库


5.登陆
docker login --username=本大人不吃肉 registry.cn-hangzhou.aliyuncs.com

6.上传镜像
docker tag ubuntu:16.04 registry.cn-hangzhou.aliyuncs.com/mxmxmx/system:version0

docker push registry.cn-hangzhou.aliyuncs.com/mxmxmx/system:version0


7.拉取镜像(从自己的仓库)
docker pull registry.cn-hangzhou.aliyuncs.com/mxmxmx/system:version0

8.退出登录
docker logout registry.cn-hangzhou.aliyuncs.com

原文地址:https://www.cnblogs.com/hard-to-say/p/12722258.html