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

拆分服务

一个服务提供了应用程序中其他服务所需要的某些能力。例如,账单服务(提供了用户开具账单功能的组件)、账户创建服务(管理创建账户的组件),以及通知服务(包含了通知用户事件和使用情况的功能)。

每个服务都是一个独立的组件。这里的“独立”很重要,独立的服务必须满足以下几个条件。

维护自己的代码库

服务拥有自己的代码库,且区别于其他服务的代码库。

管理自己的数据

服务需要管理其自身数据的状态。服务之间唯一能访问到数据的方式就是通过定义的API,其他服务不能直接接触当前服务的数据或者状态信息。

向其他服务提供能力

服务有一个定义良好的能力集合,并将这些能力提供给系统中的其他服务。换句话说,它提供了一个API。

消费其他服务的能力

服务按照标准的、约定的方式,使用其他服务提供的能力。换句话说,它使用其他服务的API。

单一所有者

每个服务只能由一个开发团队负责和维护。虽然一个团队可以负责和维护多个服务,但是一个服务只能由一个团队负责和维护。

如何定义服务

你如何来决定应该将系统中的哪些部分独立出来形成自己的服务呢?

这是一个好问题,但没有唯一的答案。某些公司喜欢“服务化”,因此将系统拆分成很多(成百上千)个非常小的微服务。另一些公司则将系统拆分成一些较大的服务。这个问题并没有谁对谁错。但是,整个行业在向着更小的微服务的趋势发展。像Docker和Kubernetes等技术通过提供管理大量小型服务的基础设施,使得这些大量的微服务成为一种可能的系统拓扑。

我们在本书中将交替使用服务和微服务这两个名词。