微服务,DevOps,Docker的基佬情

Posted 质量管理的那些年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微服务,DevOps,Docker的基佬情相关的知识,希望对你有一定的参考价值。

微服务,DevOps,Docker的基佬情

行业的现状

随着传统业务被互联网业务冲击,市场成了第一战略地段,抢下了市场企业才能更好生存,快速迭代成了一个最基础要求,应用频繁升级,三天两头要更新。

而且流量增大了,原来是线下柜台开户,现在互联网线上开户了,流量扩大了N倍。

随之带来了很多问题,比如:

  • 应用无法根据业务功能伸缩,只能作为一个整体进行扩展,负载越来越大。

  • 每次功能或者缺陷的变更导致重新部署整个应用,这种部署方式影响大、风险高。

  • 经年累月的代码,人员变更通常通读一遍代码;每次修改代码心惊胆战,修改一个Bug极可能带来各种隐含的缺陷。

微服务

当一个系统复杂到一定程度,当维护一个系统的人数多到一定程度,解决问题的难度和沟通成本大大提高,因而需要拆成很多个工程,拆成很多个团队,分而治之。

一个字:拆!

拆开了,每个子模块独自变化,少相互影响。

拆开了,原来一个进程扛流量,现在多个进程一起扛。

所以称为微服务。

微服务和Docker

微服务场景下,进程多,更新快,于是出现100个进程,每天一个镜像。

容器乐了,每个容器镜像小,没啥问题,虚拟机哭了,因为虚拟机每个镜像太大了。

所以微服务场景下,可以开始考虑用容器了。

容器从技术角度,能够使得大部分的内部配置可以放在镜像里面之外,更重要的是从流程角度,将环境配置这件事情,往前推了,推到了开发这里,要求开发完毕之后,就需要考虑环境部署的问题,而不能当甩手掌柜。

这样做的好处就是,虽然进程多,配置变化多,更新频繁,但是对于某个模块的开发团队来讲,这个量是很小的,因为5-10个人专门维护这个模块的配置和更新,不容易出错。

如果这些工作量全交给少数的运维团队,不但信息传递会使得环境配置不一致,部署量会大非常多。

容器是一个非常好的工具,就是让每个开发仅仅多做5%的工作,就能够节约运维200%的工作,并且不容易出错。

然而本来原来运维该做的事情开发做了,开发的老大愿意么?开发的老大会投诉运维的老大么?

这就不是技术问题了,其实这就是DevOps,DevOps不是不区分开发和运维,而是公司从组织到流程,能够打通,看如何合作,边界如何划分,对系统的稳定性更有好处。

微服务和DevOps

拆成了微服务,然而当每个子团队将子问题解决了,整个系统的问题就解决了么?

你可以想象你将一辆整车拆成零件,然后再组装起来的过程,你就可以想象拆虽然不容易,合则更难,需要各种标准,各种流水线,才能将零件组装称为车。

  • 如何控制拆的风险

  • 如何保证代码质量

  • 如何保证功能不变,不引入新的Bug

当然就是集成,从一开始就集成,并且不断的集成,反复的将拆分的模块重新组合,看看是否能够顺利组合起来,并且保证功能的不变。

要是不没事儿就组合一下,天知道几个月以后还能不能合的起来。

别忘了程序是人写的,你和你媳妇长时间不沟通都对不上默契,别说两个程序员了。

持续集成就是不断的尝试在一起

  • 为什么需要一个统一的代码仓库Git来做代码管理呢?是为了代码集成在一起。

  • 为什么需要进行构建build呢?就是代码逻辑需要集成在一起,编译不出错

  • 为什么要单元测试呢?一个模块的功能集成在一起能够正确工作

  • 为什么需要联调测试Staging环境呢?需要将不同模块之间集成在一起,在一个类生产的环境中进行测试。

微服务和Docker和DevOps

所以微服务,DevOps,容器是相辅相成,不可分割的。

不是微服务,根本不需要容器,虚拟机就能搞定,不需要DevOps,一年部署一次,开发和运维沟通再慢都能搞定。

所以,容器的本质是基于镜像的跨环境迁移。

如图为将容器融入持续集成的过程中,形成DevOps的流程:

在流程方面,镜像是DevOps的良好工具。


以上是关于微服务,DevOps,Docker的基佬情的主要内容,如果未能解决你的问题,请参考以下文章

布道微服务_20微服务容器DevOps

DevOps系列 | 国外大厨用Docker和Jenkins演示微服务的持续交付

布道微服务_20微服务容器DevOps

从技术雷达看​DevOps的十年——容器技术和微服务

基于 Docker 的微服务架构实践

什么是微服务?如何实现DevOps?