聂同学

一个程序员和架构师的实践与思考

微服务划分:按业务能力 vs 按子域

微服务的划分方法,常见的是两种,按业务能力和按子域1

“子域”,就是DDD中的"子域"。

“业务能力”,是一个专用名词,指的是一个连续的业务过程,其中不需要中断,也不需要别的业务过程的参与。这些业务过程自然组织起来,比如首尾相连,或者,由用户参与来自然连接。

两种不同的服务划分风格,反映了对业务本身的不同的描述与划分的风格。

比较形象地讲,按子域划分,就是把业务划成一块一块的。按业务能力划分,就是把业务划成一段一段的。一块一块的,描述业务概念和它们之间的关系。一段一段的,描述业务执行的步骤和过程。

按业务能力划分的优势主要在运行时。各个服务的运行时依赖被尽量减少。在服务性能、可用性方面不会相互牵绊,可以做到最好。

而按子域划分的优势主要在设计时和演进时。有利于应对业务的规模发展、复杂性增加和分别演进。

这样看来,按业务能力划分的微服务是不是类似于一种事务脚本?只不过它的粒度更大,以服务为单元?

是时候又贴出这张图,事务脚本的优势与劣势在图里体现得很明显,按业务能力划分的微服务,是否有同样的优势与劣势?


  1. 有的观点,认为两种划分可以根据不同的情况进行选择。而有的观点,认为应该这样划分而不要那样划分。

微服务, 架构, 领域

分享 -