观点:迁移微服务能提升系统性能和健壮性吗?
极客时间编辑部
讲述:丁婵大小:1.75M时长:03:50
微服务架构现在已经成为了企业应用架构的必聊话题,其中一个是迁移微服务能提升系统性能和健壮性,对此,《高可用可伸缩微服务架构》一书的联合作者梁桂钊结合自己多年工作的所见所闻和实战思考,谈了谈他的观点,以下为具体内容。
业界有一个话题是“迁移微服务能提升系统健壮性吗?”这里有一个主流的观点:一个单体系统是一个大而全的功能集合,如果某个服务出现故障,会对整个业务系统产生影响,然而使用微服务可以实现如果某个服务部署或者宕机,只会影响到当前服务,而不会影响到整个业务系统。
事实上,这个观点看起来非常正确,但是在真实的业务场景下,并不是推动我们改造的关键原因。首先,一个单体为了避免单点故障,肯定需要集群和负载均衡,注意的是,集群和负载均衡与微服务(服务垂直拆分)不是互斥关系,而是在高并发和分布式中的共存关系。此外,为了解决服务部署,我们可以考虑通过滚动发布来实现服务的无中断。
所以,单体系统不一定就是不健壮的。同时,引入了微服务之后,从整体来看,这种方式带来了大量的服务,而服务之间的相互调用也会增多,从而导致整个系统架构变得更加复杂,某个链路上的某个节点出现故障的几率就大大的增加了,更多的依赖也意味着发生更多问题的可能。此时,假设其中某条调用链路上某个微服务宕机而无法提供服务,那么对其强依赖的上游服务,如何保障其自身可用性?(我在这里特指强依赖调用,服务降级或者熔断机制可能会对业务有损,并不是解决的有效方案。)因此,很多场景下,某个服务宕机也可能会影响到整个业务系统。
因此,如果我们没有面向失败设计,并且构建一套服务治理的体系,反而会导致整体服务的不健壮性。
那么,什么才是迁移微服务的主要动因呢?我觉得最主要的利益动因是服务的可扩展性和提升性能方面的考量。一个服务因为宿主机器的限制可能达到了瓶颈,为了更加进一步的压榨机器的资源,拆分服务是一个好主意。同时,我们还可以进一步实现自动缩扩容来调整机器的使用。
但是,迁移微服务一定能提升系统的性能吗?我的观点是真不一定。服务化后,调用链路变长,原本的一次 RPC 通信可能变成几次,性能损耗有所增加。例如,异地多活主要挑战之一就是网络时延,跨城市一定会有延时的问题,假设跨地域网络延时可能在一百毫秒以内,一次 HTTP 请求涉及到一两百次跨城市 RPC 调用,那么整个响应时间会增加很多,所以延时带来的挑战非常大。那么,阿里为了解决数据延迟的问题,最早提出了单元化的解决思路,即将请求收敛到同一区域内完成,单元高内聚,不做跨区域访问,即“单元封闭”。此外,还存在跨服务调用的网络超时问题,通过重试也增加了同步阻塞的隐患性。
因此,服务化是牺牲了服务之间链路上的调用性能,来整体提高整个业务系统对于机器资源压榨来提升系统的性能。
以上就是今天的内容,希望对你有所帮助。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
请先领取课程
免费领取
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(1)
- 最新
- 精选
- 加菲猫单体系统迁移到微服务能提高系统的健壮性吗?需要分析迁移的动因,有些比较单一的、量少的业务,不需要迁移,如果要迁移,“单元封闭”也是一种比较好的选择
收起评论