可伸缩架构(第2版):云环境下的高可用与风险管理
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

过犹不及

但是,通常你会将应用程序过度拆分成太多服务。之前的标准可能会被滥用于创建服务,从而导致创建出过多的服务。

例如,除了提供一个简单的用户身份服务之外,你还可能将它再拆分成多个更小的服务,例如:

  • 用户名称服务

  • 用户地址管理服务

  • 用户邮件地址管理服务

  • 用户祖籍管理服务

这样做很可能有点拆分过度了。

将服务拆分成过细粒度会带来一些问题,包括整体的系统性能影响。但是从最基本的角度来说,每当要将一个功能拆分成多个服务时,你都会做以下几件事:

  • 降低单个服务的复杂性(通常来说)。

  • 增加系统整体的复杂性。

体积小的服务通常会降低单个服务的复杂性,但是,你拥有的服务越多,需要交互的独立服务也越多,从而导致整体系统架构变得越来越复杂。

如果一个系统中存在过多的服务,可能会带来以下这些问题。

影响大局观

想要记住整个系统架构变得越来越难,因为系统变得越来越复杂。

更大故障概率

更多独立组件之间需要相互协作,导致故障发生的概率更大。

难以修改服务

每个独立服务的消费者都越来越多,增加了修改服务可能对使用者造成影响的可能。

更多依赖

每个独立服务都越来越依赖于其他的服务。更多的依赖意味着发生更多问题的可能。

这些问题都可以通过在服务间定义清晰的接口边界来缓解,但这不是一个完美的解决方案。重要的一点是,我们需要在服务数量和服务体积之间找到一个适当的平衡点。