一、课程调查
进入大三下学期的后半段,大学阶段的理论课程应该已经修得八九不离十了,在这个时间点迎来系统综合实践这门课,作为培养计划的一门新课程,我们非常希望了解你们对于课程的希望,请写下你对这门课的认识和你理想中的这门课程是怎么样的。
一开始以为是比较注重硬件操作的实验,现在看起来似乎更重注软件操作。
二、了解微服务
微服务是什么
所谓的微服务是SOA架构下的最终产物,该架构的设计目标是为了肢解业务,使得服务能够独立运行。简单举例:看军事新闻的同学应该都知道,一艘航空母舰作战能力虽然很强,但是弱点太明显,就是防御能力太差,单艘的航空母舰很少单独行动,通常航空母舰战斗群才是主要军事力量,你可以把单艘航母理解为的单体应用(防御差,机动性不好),把航母战斗群(调度复杂,维护费用高)理解为微服务。
微服务的特点
1、按照业务来划分服务,单个服务代码量小,业务单一,易于维护。
2、每个微服务都有自己独立的基本组件,例如数据库、缓存等,且运行在独立的进程中。
3、微服务之间的通信是通过HTTP协议或者消息组件,且具有容错能力。
4、微服务有一套服务治理的解决方案,服务之间不耦合,可以随时加入和剔除服务。
5、单个微服务能够集群化部署,并且有负载均衡的能力
6、整个微服务系统应该有一个完整的安全机制,包括用户验证、权限验证、资源保护等。
7、整个微服务系统有链路追踪的能力。
8、有一套完整的实时日志系统。
相较于传统的软件架构,它有什么优缺点
优点:每个服务足够内聚,足够小,代码容易理解、开发效率提高;服务之间可以独立部署,微服务架构让持续部署成为可能;每个服务可以各自进行负载均衡扩展和数据库扩展,而且,每个服务可以根据自己的需要部署到合适的硬件服务器上;容易扩大开发团队,可以针对每个服务组件开发团队;提高容错性,一个服务的内存泄露并不会让整个系统瘫痪;系统不会被长期限制在某个技术栈上。
缺点:开发人员要处理分布式系统的复杂性;开发人员要设计服务之间的通信机制,对于需要多个后端服务的user case,要在没有分布式事务的情况下实现代码非常困难;涉及多个服务直接的自动化测试也具备相当的挑战性;服务管理的复杂性,在生产环境中要管理多个不同的服务的实例,这意味着开发团队需要全局统筹(PS:现在docker的出现适合解决这个问题);应用微服务架构的时机如何把握?对于业务还没有理清楚、业务数据和处理能力还没有开始爆发式增长之前的创业公司,不需要考虑微服务架构模式,这时候最重要的是快速开发、快速部署、快速试错。
如何部署
前期阶段,要做好如下事情:
1.和多方充分沟通,确保能符合客户和组织的需求,并且得到认同
2.和团队沟通,让队友(开发/测试/运维)理解,并且积极投入
3.和业务部门沟通,指定版本计划和上线时间
设计阶段,单微服务必须要满足以下的条件,才符合微服务的基本要求:
1.标准的 REST 风格接口(基于 HTTP 和 JSON 格式)
2.独立部署,避免共享数据库(避免因为数据库而影响整个分布式系统)
3.业务上的高内聚,减少依赖(从设计上要避免服务过大或者太小)
庞大的分布式系统,需要强大基础设施来支撑,微服务要涉及的基础设施:
1.CI/CD和自动化(分布式系统几乎不可能通过人工手动发布)
2.虚拟化技术(要保证微服务运行环境隔离,目前行业主流的是使用 Docker 容器)
3.日志聚合,全链路监控(高度可观察和分析诊断问题)
三、学习docker技术
设置仓库
更新 apt 包索引。
$ sudo apt-get update
安装 apt 依赖包,用于通过HTTPS来获取仓库:
$ sudo apt-get install \
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
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete Digest: sha256:c3b4ada4687bbaa170745b3e4dd8ac3f194ca95b2d0518b417fb47e5879d9b5f
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
……
容器运用
开启容器
sudo docker pull httpd
退出容器
exit
查看容器
sudo docker ps -a
重启容器
sudo docker restart <容器ID>
进入后台运行的容器
sudo docker attach <容器ID>
删除容器
sudo docker rm -f <容器ID>
仓库管理
登录账号
sudo docker login
拉镜像到本地
sudo docker pull httpd
查看本地镜像
sudo docker images
Push镜像
sudo docker tag <镜像id> <要推入仓库的用户名>/<要推入的仓库名>:<新定义的tag>
docker push <要推入仓库的用户名>/<要推入的仓库名>:<镜像标签>