第1次实践作业
一、课程调查
刚看到这门课的名字以为是类似操作系统那样的实践课,通过第一节课的粗略了解,知道了这门课主要是去接触一种新型的软件架构——微服务。
二、了解微服务
1.什么是微服务
微服务是一种以业务功能为主的服务设计概念,每一个服务都具有自主运行的业务功能,对外开放不受语言限制的 API (最常用的是 HTTP),应用程式则是由一个或多个微服务组成。
2.微服务的特点
- 细粒度的服务分解
- 服务粒度要小,而每个服务是针对一个单一职责的业务能力的封装,专注做好一件事情。
- 独立部署运行和扩展
- 每个服务能够独立被部署并运行在一个进程内。这种运行和部署方式能够赋予系统灵活的代码组织方式和发布节奏,使得快速交付和应对变化成为可能。
- 独立开发和演化
- 技术选型灵活,不受遗留系统技术约束。合适的业务问题选择合适的技术可以独立演化。服务与服务之间采取与语言无关的API进行集成。相对单体架构,微服务架构是更面向业务创新的一种架构模式。
- 独立团队和自治
- 团队对服务的整个生命周期负责,工作在独立的上下文中,自己决策自己治理,而不需要统一的指挥中心。团队和团队之间通过松散的社区部落进行衔接。
3.微服务架构与传统架构的区别
-
传统架构优点
- 开发简单直接,集中式管理, 基本不会重复开发
- 功能都在本地,没有分布式的管理开销和调用开销。
-
传统架构缺点
- 开发效率低:所有的开发在一个项目改代码,递交代码相互等待,代码冲突不断
- 代码维护难:代码功能耦合在一起,新人不知道何从下手
- 部署不灵活:构建时间长,任何小修改必须重新构建整个项目,这个过程往往很长
- 稳定性不高:一个微不足道的小问题,可以导致整个应用挂掉
- 扩展性不够:无法满足高并发情况下的业务需求
-
微服务架构优点
- 微服务是松藕合的,无论是在开发阶段或部署阶段都是独立的。
- 能够快速响应, 局部修改容易, 一个服务出现问题不会影响整个应用。
- 易于和第三方应用系统集成, 支持使用不同的语言开发, 允许你利用融合最新技术。
- 每个微服务都很小,足够内聚,足够小,代码容易理解。团队能够更关注自己的工作成果, 聚焦指定的业务功能或业务需求。
- 开发简单、开发效率提高,一个服务可能就是专一的只干一件事, 能够被小团队单独开发,这个小团队可以是 2 到 5 人的开发人员组成。
-
传统架构缺点
- 微服务架构带来过多的运维操作, 可能需要团队具备一定的 DevOps 技巧.
- 分布式系统可能复杂难以管理。因为分布部署跟踪问题难。当服务数量增加,管理复杂性增加。
4.部署方式
-
基于主机(物理机或虚拟机)的多服务实例
- 在该模式下,软件开发人员可以提供单个或多个物理机或虚拟机,同时在每个主机上运行多个服务实例。
-
基于主机(物理机或虚拟机)的服务实例
- 此类微服务的部署方式能够在对应的主机上单独地运行每一个实例。
-
基于容器的服务实例
- 在这种部署方式下,每个服务实例都运行在其各自的容器中,因此也被称为操作系统级别的虚拟化机制。
三、学习docker技术
- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和对象一 样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
- docker compose:使用 Docker Compose 可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具
- Dockerfile :是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
- Docker Machine :是一种可以让您在虚拟主机上安装 Docker 的工具,并可以使用 docker-machine 命令来管理主机。
- Docker Swarm :是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。
- Kubernetes(k8s):是Google开源的容器集群管理系统(谷歌内部:Borg)。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。
环境搭建与docker的基本入门
在安装完docker后,首先配置一个镜像加速器
使用命令:docker -v
可查看docker版本
查看是否能正常运行:sudo docker run hello-world
查看当前镜像:sudo docker images
拉取镜像:sudo docker pull ubuntu
创建并启动、退出容器:sudo docker run -it ubuntu /bin/bash
查看当前所有容器:sudo docker ps -a
查看某容器信息:sudo docker inspect a5e936adb211
删除某容器后查询:sudo docker rm f598b94c1a05
, sudo docker ps -a
接下来是进行镜像上传,首先给容器打上标签(tag后的第二个参数一定是用户名):sudo docker tag aisinile 1310315342/test
接着登录docker:sudo docker login
最后镜像上传:sudo docker push 1310315342/test