第1次实践作业
(一) 课程调查
我对这门课的认识是,基于系统综合我觉得是偏向将之前所学的知识综合运用的偏向硬件的学科,而通过第一次实践了解了微服务与docker的相关知识后,我觉得这是一门相对需要时间与精力但能收获很多的课程。希望通过本学期的学习我能掌握相关知识技术,为以后做铺垫。
(二) 了解微服务
-
什么是微服务
微服务是一个新兴的软件架构,就是把一个大型的单个应用程序和服务拆分为数十个的支持微服务。一个微服务的策略可以让工作变得更为简便,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。
-
微服务有什么特点
1,单一职责:对于每个服务而言,在服务架构层面遵循单一职责原则。符合高内聚、低耦合,不同的服务通过“管道”的方式灵活组合,从而构建出庞大的系统。
2,轻量级通信:服务之间应通过轻量级的通信机制,实现彼此间的互通互联,相互协作。所谓轻量级通信机制,通常指语言无关、平台无关的交互方式。对于微服务而言,通过使用轻量级通信机制,使服务与服务之间的协作变得更加标准化,也就意味着在保持服务外部通信机制轻量级的情况下,团队可以选择更适合的语言、工具或者平台来开发服务本身。
3,独立性:在单块架构中,功能的开发、测试、构建以及部署耦合度较高,相互影响。而在微服务架构中,每个服务都是一个独立的业务单元,当对某个服务进行改变时,对其它服务不会产生影响。无论是从开发、测试还是部署这些阶段来看,服务与服务之间都是高度解耦的。
4,进程隔离:所有的功能都运行在同一个进程中,就意味着,当对应用进行部署时,必须停掉当前正在运行的应用,部署完成后,再重新启动进程,无法做到独立部署。但在微服务架构中,应用程序由多个服务组成,每个服务都是一个具有高度自治的独立业务实体。通常情况下,每个服务都能运行在一个独立的操作系统进程中,这就意味着,不同的服务能非常容易地被部署到不同的主机上。
-
相较于传统的软件架构的优点
1,它们往往比传统的应用程序更有效地利用计算资源。这是因为它们通过扩展组件来处理功能瓶颈问题。这样一来,开发人员只需要为额外的组件部署计算资源,而不需要部署一个完整的应用程序的全新迭代。最终的结果是有更多的资源可以提供给其它任务。
2,它们更快且更容易更新。当开发者对一个传统的单体应用程序进行变更时,他们必须做详细的QA测试,以确保变更不会影响其他特性或功能。但有了微服务,开发者可以更新应用程序的单个组件,而不会影响其他的部分。测试微服务应用程序仍然是必需的,但它更容易识别和隔离问题,从而加快开发速度并支持DevOps和持续应用程序开发。
3,微服务架构有助于新兴的云服务,如事件驱动计算。类似AWS Lambda这样的功能让开发人员能够编写代码处于休眠状态,直到应用程序事件触发。事件处理时才需要使用计算资源,而企业只需要为每次事件,而不是固定数目的计算实例支付。
-
相较于传统的软件架构的缺点
1,微服务架构带来过多的运维操作, 可能需要团队具备一定的 DevOps 技巧
2,多服务运维难度,随着服务的增加,运维的压力也在增大
3,分布式系统可能复杂难以管理。因为分布部署跟踪问题难。当服务数量增加,管理复杂性增加
4,数据一致性难以保证
5,数据一致性难以保证
-
相较于传统的软件架构的微服务的部署
1,把持续集成映射到微服务
2,构建流水线和持续交付
3,平台特定的构建物
4,操作系统构建物
5,定制化镜像
6,将镜像作为构建物
7,不可变服务器
(三) 学习docker技术
-
docker的相关概念
Docker:Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
镜像(Image):Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
容器(Container):容器(container)的定义和镜像(image)几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。 容器是由镜像实例化而来,这和我们学习的面向对象的概念十分相似,我们可以把镜像看作类,把容器看作类实例化后的对象。
仓库(Repository):仓库可看着一个代码控制中心,用来保存镜像。
-
搭建自己的docker环境
1,docker的安装
1.1卸载旧版本
$ sudo apt-get remove docker docker-engine docker.io containerd runc
1.2使用docker仓库进行安装
设置仓库
更新apt包索引:
$ sudo apt-get update
安装 apt 依赖包,用于通过HTTPS来获取仓库:
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
添加 Docker 的官方 GPG 密钥:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 通过搜索指纹的后8个字符,验证您现在是否拥有带有指纹的密钥:
$ sudo apt-key fingerprint 0EBFCD88
使用以下指令设置稳定版仓库:
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
安装 Docker Engine-Community
更新 apt 包索引。
$ sudo apt-get update
安装最新版本的 Docker Engine-Community 和 containerd
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
测试 Docker 是否安装成功,输入以下指令,打印出以下信息则安装成功:
$ sudo docker run hello-world
2,docker的使用
2.1 获取镜像
sudo docker pull ubuntu
2.2ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器和退出该容器
$ docker run -it ubuntu /bin/bash
查看版本信息
cat /proc/version
退出容器
2.3查看所有容器信息
$ docker ps -a
2.4创建一个后台容器并查看,进入
sudo docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hi; sleep 1; done"
sudo docker logs 6e89062fb2ec
2.5启动,停止容器
$ docker start 6e89062fb2ec
$ docker stop 6e89062fb2ec
2.6进入容器
在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:
docker attach
docker exec:推荐使用,因为此退出容器终端,不会导致容器的停止。
sudo docker attach 6e89062fb2ec
exec进入并退出,容器仍在运行。
sudo docker exec -it 6e89062fb2ec /bin/bash
2.7更新容器
docker container update --help
2.8删除容器
sudo docker rm -f 6e89062fb2ec
2.9列出镜像
sudo docker images
2.10搜索镜像,并拉取它
sudo docker search httpd
sudo docker pull httpd
2.11删除镜像
sudo docker rmi hello-world
(四)小结
经过本次实验,我大致了解了微服务的相关概念和docker的基本操作。
遇到的困难:
安装时的出现了锁,百度解决。
还有拉取镜像过慢,听同学的改了一个json文件,快了许多。