译者 | 李睿
审校 | 重楼
微服务架构作为小型、独立、松散耦合的服务套件,促进了应用程序的开发。由于其众多优点(例如可扩展性、可靠性、更快的开发周期、更容易维护单个服务等),在软件行业中获得了广泛的关注,很多组织正在按照微服务架构构建应用程序。然而,微服务也面临一些陷阱。
在工作中处理用例时,可以观察到微服务架构的另一面,即微服务的激增。本文将详细介绍与过度创建微服务(微服务激增)相关的陷阱,并提供有关其原因、影响和潜在缓解策略的见解。
什么是微服务激增?
微服务激增指应用程序框架/生态系统中微服务数量的不受控制、不受监管,以及在某种程度上不受欢迎的增长。这通常是由于缺乏架构计划和治理、架构监督、服务定义和边界不明确,以及组织边界等一些非技术原因造成的。微服务激增会导致架构复杂性增加、效率和性能下降、运营和维护挑战、功能重复以及服务调用迷宫,进而导致性能进一步下降和可能对客户产生负面影响。以下讨论其中的一些陷阱及其可能的解决方法。
常见的陷阱
1.架构复杂性增加
随着生态系统中微服务数量的增加,服务生态系统(及其架构)也会变得越来越复杂。这将给整个生态系统的设计、开发、部署、功能发布和维护方面带来进一步复杂性和挑战。
影响
(1)服务可能变得过于依赖其他服务或与其他服务过于耦合,从而在服务中人为地制造了不必要的架构分隔,这导致开发者难以真正理解系统架构并对其进行任何更改。
(2)随着系统中活动部件(架构中的服务)的增加,维护系统的操作负担也在增加。每个微服务都需要自己的基础设施、指标和警报的维护和管理,从而给值班人员和团队增加了运营负担。
潜在的缓解策略
(1)明确服务的清晰定义和边界。确保它们具有内聚性和功能限制。记住,不需要为每一个新的映射、每一个新配置或每一个系统将拥有的新实体构建一个新的服务。
(2)定期审查和审核架构,弃用不需要的服务。折叠或合并重复的服务以简化架构。
2.功能发布的复杂性增加
由于微服务激增增加了更多的活动部件(也称为服务),因此功能发布可能需要对相对较多的服务进行更改。这使功能发布过程变得复杂,因为功能需要在多个服务中进行部署。这增加了功能发布过程中失败的风险,因为在一个服务中部署失败可能会破坏整个功能发布过程,并可能导致其他影响(数据完整性、系统完整性等)。
影响
(1)增加了跨服务协调部署所需的复杂性和工作量,从而增加了操作开销。
(2)复杂的回滚过程,特别是在服务相互依赖的情况下,导致操作开销进一步增加。
(3)较长的发布计划和回滚计划可能导致系统处于过渡状态的时间更长,从而导致行为不一致,进而导致客户体验不一致。
潜在的缓解策略
(1)在所有服务管道中遵循CI/CD原则,以自动化部署过程,并在管道之间安全地部署更改,确保发布的一致性和可靠性。
(2)当一个功能发布涉及多个服务时,使用功能标志将功能的启动与部署解耦,并在其中涉及的服务中干净地控制新功能的启动。
3.性能下降
微服务激增可能会导致整个系统的性能下降,这主要是因为请求需要经过多个跃点,从而导致额外的网络延迟。
影响
(1)第一个影响是服务客户请求的延迟增加,主要是因为请求需要在多个系统之间进行交互。
(2)一个存在资源竞争或实现(或基础设施)未优化的服务可能会影响整个服务生态系统。
(3)最后,考虑到维护系统的成本,这可能意味着更多的基础设施成本和相对较少的性能收益。
潜在的缓解策略
(1)实现服务网格以优化服务之间的通信并减少延迟。然而,这给架构增加了另一个组件,并使其更加复杂。
(2)在必要时进行缓存,以减少网络调用带来的开销和延迟。
(3)定期对服务进行负载测试,优化服务瓶颈。
4.重复
随着新服务的创建,重复和冗余的特性和代码的风险也随之增加,从而导致资源的浪费。
影响
(1)重复的服务导致更高的维护成本,从而导致系统效率低下。
(2)服务的客户可能会对使用哪个服务感到困惑,从而导致系统进一步的低效率和错误。
潜在的缓解策略
(1)在组织内提倡重用文化。只要可能,鼓励团队重用或扩展现有服务,而不是创建新服务。
(2)维护一个服务目录,详细说明每个服务的清晰定义、责任和支持的功能。在团队内部定期审查和审核。
5.测试复杂性增加
随着微服务数量的增长,功能端到端测试的复杂性也在增加。随着系统中微服务的增加,维护数据和系统完整性变得越来越复杂。
影响
(1)跨多个服务协调和执行测试用例可能成为后勤上的噩梦,从而导致测试不完整,从而导致未检测到的问题。
(2)测试单个服务需要付出更多的努力,因为它需要复杂的模拟设置,这可能无法准确地表示实际场景。
(3)在整个服务生态系统的端到端测试中需要付出更多的努力,因此需要更高的投资和成本来安全推出新功能。
潜在的缓解策略
(1)实现自动化测试框架,它可以模拟多个服务之间的复杂交互。
(2)进行分阶段测试,首先测试单个服务,然后根据所涉及服务的接口对整个生态系统进行端到端测试。
6.机会成本增加和资源利用不佳
随着微服务数量的增长,维护服务的成本、开发新功能的成本以及这些服务的基础设施成本也在增加。它还增加了机会成本,因为用于维护这些服务或在这些服务之上进行构建的资源可以用于解决其他问题。
影响
(1)更高的开发、维护和基础设施成本。
(2)更高的机会成本。
(3)浪费资源,因为团队一直在维护现有的服务,而不是在解决其他问题上投入资源。
潜在的缓解策略
(1)提倡重用或扩展的文化,只在必要时构建新服务。
(2)定期检查端到端架构,并进行实验以发现瓶颈。合并或弃用服务以简化架构,从而提高资源利用率。
结论
微服务激增是真实存在的,并带来了巨大的挑战,可能会破坏微服务架构的好处,从而导致复杂性的增加、性能的下降、资源利用率欠佳,以及错失解决其他问题的机会。通过认识到这些陷阱并实现战略性和有效的缓解措施,组织的团队可以应对微服务激增的复杂性,从而确保他们利用这种架构模式的真正好处。
原文标题:Microservice Proliferation: Too Many Microservices,作者:Sumit Kumar