暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

微服务的利与弊

IT小皇子 2022-06-26
435

  1. 高度模块化,边界清晰

    • 模块化是我们在做软件设计时很重要的方式。模块化带来高内聚、低耦合,提升重用能力。例如我们在代码中使用类来实现模块化。

    • 随着系统的演化,我们会产生各种类库、组件来实现模块化,并且能在跨团队之间实现重用。

    • 微服务则是以服务的形式,在更高的层面实现模块化,各个团队各自独立开发与维护自己的服务,并提供给其他团队使用。有着清晰的边界。

  2. 可独立部署。

    • 微服务可以由单个团队进行独立开发、独立部署,不需要很多其他的团队来协助。

  3. 兼容不同的技术栈

    • 微服务是分散式治理,不存在集中式管理的问题。各个团队可以按照自己擅长的技术栈来提供微服务,对于微服务的使用方来讲,根本不需要关注提供方的技术栈。

    • 尽管微服务可以兼容不同的技术栈,但在公司内或者一个大部门内还是建议尽量统一技术栈,可以在一定程度上减少成本。

  1. 分布式带来的高度复杂性

    • 几十、几百甚至数千个分布式系统来实现业务功能时,系统会非常复杂。相对于单体应用中开发人员会十分清晰各个模块如何运作,微服务带来的分布式会导致开发人员可能并不完整地知道整个大系统、大业务是如何运作的。

  2. 最终一致性问题

    • 微服务中各个团队的数据是分散式治理的,不同团队是允许有对同一概念的数据有不同的拷贝的。例如电商系统中的订单数据,A团队可以有自己的拷贝,B团队可以有自己的拷贝,C团队也可以有自己的拷贝。当A团队对订单数据进行了修改时,就需要将相关被修改的数据同步到B与C团队。这里就涉及数据一致性的问题,需要有对应的数据一致性方案,否则就会造成业务上出现不能接受的结果。

  3. 运维复杂

    • 分布式系统有着数量庞大的各种服务,各种服务自己需要相互协同。在可靠性、稳定性、监控、容量规划方面都有很高的要求。

  4. 测试复杂性

    • 以往的单体应用中,单个测试团队可以完整地覆盖整个应用的各个场景。但到了分布式系统中,各个微服务是分散到各个不同的系统中,而不同的系统又由不同的团队来负责。那么测试的时候就需要联合多个团队进行测试,测试的复杂性就变得非常高。


在拥抱微服务时,我们需要先清楚他的利与弊,希望本文能给你带来一些帮助。

文章转载自IT小皇子,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论