系统综合实践第1次作业
课程调查
之前我并没有在前辈那边打听过这门课,所以是完全主观的感受。
从课程题目上来看,我觉得这应该是会比较类似于软工实践那种,是比较综合的实践课,但是侧重点可能会有所不同。软件工程实践主要是是软件,而这门系统综合实践的重点应该是会放在系统上。但是“系统”这个词也有着各种不同的解释,比如代表操作系统,是一门研究计算机操作系统的综合实践课,或者系统是形容词,代表这是一门”系统性、综合“的实践课,帮助我们对大学三年来的所学进行一次比较全面的实践应用。
了解微服务
什么是微服务
微服务的概念最早是在 2014 年由 Martin Fowler 和 James Lewis 共同提出,他们定义了微服务是由单一应用程序构成的小服务,拥有自己的进程与轻量化处理,服务依业务功能设计,以全自动的方式部署,与其他服务使用 HTTP API 通讯。同时,服务会使用最小规模的集中管理 (例如 Docker)技术,服务可以用不同的编程语言与数据库等。
微服务的特点
- 可针对特定服务发布,影响小,风险小,成本低
- 可频繁发布版本,快速交付需求
- 低成本扩容,弹性伸缩,适应云环境
微服务的优缺点
- 微服务优点
- 微服务是松藕合的,无论是在开发阶段或部署阶段都是独立的。
- 能够快速响应, 局部修改容易, 一个服务出现问题不会影响整个应用。
- 易于和第三方应用系统集成, 支持使用不同的语言开发, 允许你利用融合最新技术。
- 每个微服务都很小,足够内聚,足够小,代码容易理解。团队能够更关注自己的工作成果, 聚焦指定的业务功能或业务需求。
- 开发简单、开发效率提高,一个服务可能就是专一的只干一件事, 能够被小团队单独开发,这个小团队可以是 2 到 5 人的开发人员组成。
- 微服务架构缺点
- 微服务架构带来过多的运维操作, 可能需要团队具备一定的 DevOps 技巧.
- 分布式系统可能复杂难以管理。因为分布部署跟踪问题难。当服务数量增加,管理复杂性增加。
微服务的部署方式
- 基于主机的多服务实例
- 在该模式下,软件开发人员可以提供单个或多个物理机或虚拟机,同时在每个主机上运行多个服务实例。
- 基于主机的服务实例
- 此类微服务的部署方式能够在对应的主机上单独地运行每一个实例。
- 基于容器的服务实例(Docker)
- 在这种部署方式下,每个服务实例都运行在其各自的容器中,因此也被称为操作系统级别的虚拟化机制。
学习Docker技术
Docker简介
- Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和对象一 样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
- Docker Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
- Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
- Docker Machine 是一种可以在虚拟主机上安装 Docker 的工具,并可以使用 docker-machine 命令来管理主机。
- Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 - Swarm 轻松地扩展到多个主机。
- Kubernetes(k8s)是Google开源的容器集群管理系统。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。
Docker环境的安装和简单使用
安装
推荐先将Ubuntu软件源更换为国内源,速度会比较快,且不容易发生网络错误。
更新软件源
sudo apt-get update
安装依赖
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
添加docker密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
设置stable存储库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
再次更新软件源
sudo apt-get update
安装docker
sudo apt-get install -y docker-ce
检测是否安装成功
sudo docker run hello-world
简单使用
查看当前镜像
sudo docker images
可以看到刚刚创建的hello-world镜像
拉取镜像
sudo docker pull ubuntu
拉取一个ubuntu镜像,并查看
创建并启动、退出容器
sudo docker run -it ubuntu /bin/bash
启功ubuntu容器,并在容器中输出”hello world“,然后退出容器
查看当前所有容器
sudo docker ps -a
可以看到,有ubuntu和hello-world两个容器
查看容器信息
sudo docker inspect <容器id>
这边我输入的是上一步查到的ubuntu容器的id
删除容器
sudo docker rm <容器id>
和上一步一样,需要输入要删除的容器的id。这边我输入了hollo-world容器的id,再次查看容器列表,只剩下ubuntu容器了,hello-world已经被删除
上传容器
一共需要三个步骤
#更换容器名字,将ubuntu容器改名为phd1999/test,即改为<docker ID>/<name>,的形式
sudo docker tag ubuntu phd1999/test
#登录docker账号
sudo docker login
#上传容器
sudo docker push phd1999/test
到docker hub上查看上传的容器信息