微服务的两处伤痛

前言

当你打开窗户时,清新的空气会进入房间,伴随空气的可能还有蚊子。微服务也一样,有好处,也有坏处。我这里不讲微服务带来了哪些好处,这些都非常容易找到。微服务带来了复杂性,这点大家都有共识。复杂性衍生出了如下2个痛点:

  • 痛点A部署一套环境很麻烦且耗资源

    现实中,可能有测试环境、性能测试环境、预发环境、生产环境等。有的环境需要常驻,有的环境是临时的,用完即可清理,如特性开发环境、特性测试环境。

    跟微服务相伴的一般都有敏捷,甚至是敏捷的增强版——DevOps。微服务是敏捷发展的架构阶段。微服务、敏捷、DevOps之间的关系可以参看下图,也可以参考文章(https://www.infoworld.com/article/3075880/microservice-architecture-is-agile-software-architecture.html)。

而实施敏捷就有多特性的并行开发,每个特性都需要有一套环境进行调试和测试。想象一下,一个有30个以上服务的应用,部署一套这样的环境多么麻烦。

  • 痛点B: 随着研发团队人员更迭,没人掌握整个系统的架构,服务之间的依赖关系不清楚。从而,特性开发或者修改bug时如履薄冰,不敢动手。

如何解决痛点A?

对于这个痛点,笔者看到过一些解决方案,做得比较深入的是阿里,请参看文章(高能预警:文章很长,如果没兴趣看完也没关系,丝毫不影响本文的阅读)。

在阿里,我们如何管理测试环境

阿里的解决方式总结起来就是:发布平台+本地服务+公共服务。

 但这种解决方式有如下2个缺点:

  • 多特性环境依赖于公共的基础服务,有时会有冲突;
  • 公共的基础服务,如果需要回调,不知道回调那哪个特性环境。

现在,我们来思考一下,这个问题是否有更好的解决办法?回到本痛点问题:

  1. 部署麻烦,耗时耗力;
  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,当前可以免费使用,有任何问题可以给我们反馈,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值