前言
当你打开窗户时,清新的空气会进入房间,伴随空气的可能还有蚊子。微服务也一样,有好处,也有坏处。我这里不讲微服务带来了哪些好处,这些都非常容易找到。微服务带来了复杂性,这点大家都有共识。复杂性衍生出了如下2个痛点:
-
痛点A: 部署一套环境很麻烦且耗资源。
现实中,可能有测试环境、性能测试环境、预发环境、生产环境等。有的环境需要常驻,有的环境是临时的,用完即可清理,如特性开发环境、特性测试环境。
跟微服务相伴的一般都有敏捷,甚至是敏捷的增强版——DevOps。微服务是敏捷发展的架构阶段。微服务、敏捷、DevOps之间的关系可以参看下图,也可以参考文章(https://www.infoworld.com/article/3075880/microservice-architecture-is-agile-software-architecture.html)。
而实施敏捷就有多特性的并行开发,每个特性都需要有一套环境进行调试和测试。想象一下,一个有30个以上服务的应用,部署一套这样的环境多么麻烦。
- 痛点B: 随着研发团队人员更迭,没人掌握整个系统的架构,服务之间的依赖关系不清楚。从而,特性开发或者修改bug时如履薄冰,不敢动手。
如何解决痛点A?
对于这个痛点,笔者看到过一些解决方案,做得比较深入的是阿里,请参看文章(高能预警:文章很长,如果没兴趣看完也没关系,丝毫不影响本文的阅读)。
阿里的解决方式总结起来就是:发布平台+本地服务+公共服务。
但这种解决方式有如下2个缺点:
- 多特性环境依赖于公共的基础服务,有时会有冲突;
- 公共的基础服务,如果需要回调,不知道回调那哪个特性环境。
现在,我们来思考一下,这个问题是否有更好的解决办法?回到本痛点问题:
- 部署麻烦,耗时耗力;
- 消耗资源大。
我们能不能像管理单体应用一样,管理微服务应用?答案是可以的!
1. 部署麻烦,耗时耗力。
对于这个问题,解决起来相对比较简单,写一个完整的应用部署脚本就行了,但也有一些额外的事情需要处理,比如:
- 部署参数不一样,需要调整;
- 统一配置中心上需要建不同的命名空间;
- 公共的中间件新部署一套时,如何将数据复制到新的中间件实例。比如:数据库的数据、消息队列中的数据;
- 如果应用使用了公共存储,新部署时需要特殊处理。
但是,如果有一个部署平台来解决这个问题,提供环境的一键克隆功能,自动解决所有这些细节问题,岂不美哉?
2. 消耗资源大。
这个问题,传统方式解决起来可能比较棘手。但使用脚本和程序也是可以解决的,如下是我的解决思路:
底层部署使用K8s。进程级别资源复用,压榨资源,资源利用率比虚拟机高50%以上。这一点比较容易,只是有一定的迁移K8s的成本。
按需创建,到期清理。每套环境需要定义环境存活时间,到期自动清理。
自动启停服务。监控每个微服务实例的流量访问情况,自动启停服务,释放CPU和内存资源。这一点结合K8s来实现,效果会更佳。
应用画像。用算法给每个应用、每个实例做画像,动态调整每个服务占用的CPU和内存大小。
底层硬件优化。
上面的后2点,据我了解,阿里云有团队已经实现了。一般的团队没有这个能力做这2点。
如何解决痛点B?
此问题传统的解决办法是依赖于人或者流程,包括如下几点:
- 尽量留住对整个系统非常了解的架构师,或者平时有一个架构师的backup,随时能够顶上来;
- 尽量在人员更替时,做好交接;
- 平时尽量维护好系统的设计文档,以便新来的人学习。
从可行性上来说,第1点比其他两点更靠谱。第2点和第3点都需要额外的人和流程来进行监督,收效甚微。
是否有更好的解决思路?有!!!思路主要包含如下几点:
架构图定义好系统架构,包括哪些微服务、中间件、服务间依赖关系等。
架构图可部署。架构图中的元素定义好部署参数,直接部署。
封装底层资源,不能让研发人员或运维人员直接在底层资源上部署应用,所有的应用部署必须以架构图部署。
这样,最新的应用,技术架构是怎么样,依赖关系怎么样,直接从对应的架构图就能看出。
总结
其实,如上2个痛点的解决方案,可以融合在一起,做一个应用管理平台,包括如下模块或功能即可。
应用架构图管理。包括架构图设计、部署参数定义,最好是可视化的架构图。
底层计算资源管理。包括容器集群接入和删除。
架构图一键部署。
应用按需创建,到期自动清理。
应用一键克隆。
服务的自动启停。
服务资源占用的自动调整。
底层硬件优化。
一图胜千言,使用一张图来表达包含这8点的解决方案,如下:
有的企业内部确实有在做类似的平台,笔者2011年在某大厂内部见过类似的平台,但是当时该平台是面向该大厂的特殊产品的,而不是面向微服务应用的,并且也只是实现了上述的部分功能。
坦诚地讲,这个平台我们已经做出来了:StarOS,但是上面罗列的5、6、7、8四点还没有实现,未来的规划中会一一实现。简单show一下它的架构图设计、一键部署。
可视化架构设计
可部署的架构图一键部署
最后,欢迎大家给我留言讨论,集思广益,让开发人员能够做到“以业务为中心”,将所有非业务的东西沉淀为基础设施。欢迎大家试用StarOS,当前可以免费使用,有任何问题可以给我们反馈,谢谢!