系统综合实践第一次作业博客
课程认识
第一次接触这种课程,对这门课的第一认识觉得应该是一门通过实践来实现一个建议的操作系统的实践课。目前还不清楚这门课具体是干什么的,希望通过学习这门课程能给予我完备的专业知识,为以后的学习或工作打些基础吧。
了解微服务
1.什么是微服务
微服务是一种软件体系的架构,它是以专注于单一责任与功能的小型功能区块为基础,利用模块化的方式组合出复杂的大型应用程序,各功能区块使用与语言无关的API集相通信。
2.微服务的特点
单一职责
每个微服务都需要满足单一职责原则,微服务本身是内聚的,因此微服务通常比较小。
自治
一个微服务就是一个独立的实体,它可以独立部署、升级、服务与服务之间通过REST等形式的标准接口进行通信,并且一个微服务实例可以被替换成另一种实现,而对其他的微服务不产生影响。
3.优缺点
优点
逻辑清晰
一个仅负责一项很明确业务的微服务,在逻辑上肯定比一个复杂的系统更容易让人理解。
简化部署
在一个传统软件架构中,只要修改一行代码,就需要对整个系统进行重新的构建、测试,然后将整个系统进行部署。而微服务则可以对一个微服务进行部署。
可扩展
应对系统业务增长的方法通常采用横向或纵向的方向进行扩展。分布式系统中通常采用横向的方式进行扩展。因为不同的功能面对不同的负荷变化,因此采用微服务的系统相对传统软件架构具备有更好的扩展性。
灵活组合
在微服务架构中,可以通过组合已有的微服务以达到功能重用的目的。
技术异构
因为微服务间松耦合,不同的微服务可以选择不同的技术栈进行开发。
高可靠
微服务间独立部署,一个微服务的异常不会导致其他微服务同时异常,通过隔离、融断等技术可以避免,极大的提升微服务的可靠性。
缺点
复杂度高
微服务间通过REST、RPC等形式交互,相对于Monolithic模式下的API形式,需要考虑被调用方故障、过载、信息丢失等各种异常情况,代码逻辑更加复杂。
运维复杂
在采用微服务架构时,系统由多个独立运行的微服务构成,需要一个设计良好的监控系统对各个微服务的运行状态进行监控。运维人员需要对系统有细致的了解才能够更好地运维系统。
影响性能
相对于Monolithic架构,微服务之间通过REST、RPC等形式进行交互,通信的时延会受到较大的影响。
4.部署方式
基于主机(物理机或虚拟机)的多服务实例
在该模式下,软件开发人员可以提供单个或多个物理机或虚拟机,同时在每个主机上运行多个服务实例。
基于主机(物理机或虚拟机)的服务实例
此类微服务的部署方式能够在对应的主机上单独地运行每一个实例。
基于容器的服务实例
在这种部署方式下,每个服务实例都运行在其各自的容器中,因此也被称为操作系统级别的虚拟化机制。
DOCKER技术学习
docker主要有三大要素
- 镜像:提供只读的模板,相当于root文件系统
- 容器:相当于镜像的实例化
- 仓库:仓库可看着一个代码控制中心,用来保存镜像。
Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此可以使用较少的资源做更多的事。docker实现容器化部署,这与微服务的特点相契合。
实践内容
docker(社区版)安装命令(操作系统:ubuntu ubuntu中需在命令前加 'sudo' )
更新 apt 包索引: $ sudo apt-get update
添加官方GPG密钥:$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
安装docker: $ sudo apt-get install docker-ce docker-ce-cli containerd.io
docker查看已有镜像:$ sudo docker images
创建并启动容器:$ sudo docker run -(pram) [image] [command]
参数
- -t:终端
- -i: 交互式操作
- -d:指定容器运行方式
查看创建的容器:$ sudo docker ps -a
删除镜像:$ docker rmi hello-world
(这里发生了一个错误,查看报错原因是此刻还有一个容器依赖这个镜像运行)
*由于出现报错,我先将当前的容器进行了删除操作
删除所有命令:$ sudo docker container prune
删除镜像:$ sudo docker rmi [image]
提交容器副本:$ docker commit -m="with wget" -a="yuki820" 7320a97a80ae yuki/ubuntu:v
参数
- -m:提交的信息
- -a: 镜像作者
- 7320a97a80ae: 容器ID
- yuki/ubuntu:v: 指定要创建的目标容器名
将镜像上传到dockhub(要先登录):$ sudo docker push yuki/ubuntu:v
这里又发生了一个错误:目标容器名斜杠前必须是本人的用户名,我的dockerhub用户名是:yuki820,因此发生了上传镜像被拒绝的错误
更改创建的镜像文件名:$ sudo docker tag [oldname] [newname]
总结
docker现今应该是后端开发人员必备的知识了吧,之前我只是听说过,而到现在才真正初步使用docker。经过这次实践我初步了解到了docker的主要作用和基本操作,docker作为一个轻便的应用容器引擎,为应用的部署与测试提供了非常便利的集成环境,如今也是成为一大热门引擎被广泛开发人员使用。以后希望通过实践docker的实际应用来进一步加深对docker的理解。