2020系统综合实践 第1次实践作业
(1)课程调查
进入大三下学期的后半段,大学阶段的理论课程应该已经修得八九不离十了,在这个时间点迎来系统综合实践这门课,作为培养计划的一门新课程,我们非常希望了解你们对于课程的希望,请写下你对这门课的认识和你理想中的这门课程是怎么样的。
开始以为是系统结构的实践课,在实验箱上面操作,通过实践学习计科基础的东西。后面了解了下,是偏软件开发相关技术的课程。在第一节课老师挂出博客园二维码,反复提到上学期软工实践,有点小慌,如果像软工实践那样再来一次,有点顶不住。这门课既然有2学分,希望能够循序渐进,既不会过分占用太多时间,又能从中开拓眼界、学到一些有意思的东西。
(2)了解微服务
第一次作业我们将接触一种新型的软件架构——微服务(也许部分同学已经有所了解)。大家要做的是学习并了解该技术,微服务是什么,有什么特点,相较于传统的软件架构,它有什么优缺点,它是怎样部署的。
-
微服务是什么
微服务是一个新兴的软件架构思想,就是把一个大型的单个应用程序和服务拆分为数十个支持微服务的服务/应用。 微服务是SOA架构(面向服务的架构)下的最终产物,该架构的设计目标是为了肢解业务,使得服务能够独立运行。
-
微服务的特点
微服务架构的主要特点是模块化、松耦合、自治、去中心化。
-
微服务的优点(相较于传统的软件架构)
每个服务足够内聚,足够小,代码容易理解、开发效率提高;服务之间可以独立部署,微服务架构让持续部署成为可能;每个服务可以各自进行x扩展和z扩展,而且,每个服务可以根据自己的需要部署到合适的硬件服务器上;容易扩大开发团队,可以针对每个服务(service)组件开发团队;提高容错性(fault isolation),一个服务的内存泄露并不会让整个系统瘫痪;系统不会被长期限制在某个技术栈上。
-
微服务的缺点(相较于传统的软件架构)
开发人员要处理分布式系统的复杂性; 开发人员要设计服务之间的通信机制,对于需要多个后端服务的user case,要在没有分布式事务的情况下实现代码非常困难; 涉及多个服务直接的自动化测试也具备相当的挑战性;; 通信,http请求速度慢,通常一个操作可能会涉及到多个微服务的相互调用,如果为了完成一个操作而多次从服务端调用不同的微服务,http请求的耗时可能会成为瓶颈。
-
部署方式
单主机多服务实例模式 单虚拟机单服务实例 单容器单服务实例
(3)学习docker技术
docker作为微服务的一种十分典型的代表技术,我们要做的是:
-
学习了解docker的相关概念(容器、镜像等),了解docker、docker compose、Dockerfile、docker machine、Swarm、k8s是什么,是做什么用的,心中有概念即可;
镜像:Docker镜像,就相当于是一个root文件系统。 容器:镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。 Docker:Docker是一个开源的应用容器引擎,基于Go语言,并遵从Apache2.0 协议开源,可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。 Docker Compose:是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。 Dockerfile:Dockerfile是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。 Docker Machine:是 Docker 官方提供的一个工具,它可以帮助我们在远程的机器上安装 Docker,或者在虚拟机 host 上直接安装虚拟机并在虚拟机中安装 Docker。我们还可以通过 docker-machine 命令来管理这些虚拟机和 Docker。 Swarm:Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。 k8s:是一个跨主机集群的开源的容器调度平台,它可以自动化应用容器的部署、扩展和操作 , 提供以容器为中心的基础架构。
-
搭建docker环境
添加 Docker 的官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
使用以下指令设置稳定版仓库
sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
安装最新版本的 Docker Engine-Community 和 containerd
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
通过运行 hello-world 映像来验证是否正确安装了Docker Engine-Community
sudo docker run hello-world
或者通过查看版本来检验
docker version
配置阿里云镜像加速器
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://v54081p6.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
pull ubuntu镜像
sudo docker pull ubuntu
查询所有的容器
sudo docker ps -a
使用 docker start 启动一个已停止的容器:
sudo docker start ……
停止容器
sudo docker stop ……
更新容器
sudo docker container update --help
删除容器
sudo docker rm -f ……
登录
sudo docker login sudo docker logout