最近觉得微服务架构的服务拆分好像很难。比如一个大型电商系统,怎么确定哪些功能应该是一个独立的服务?有没有一些通用的拆分原则或者经验可以分享一下??
介绍一个利用DDD拆分微服务的方法过程
首先,领域专家和团队一起讨论分析业务领域,确认业务期望,将业务分解成若干个业务场景。然后,针对每个场景画UML活动图,活动图中包含泳道,通过高内聚原则对功能逻辑不断调整,使功能和泳道之间的归属关系变得更加清晰合理。这些泳道最终就是限界上下文,泳道内的功能就是将来微服务的功能边界,泳道之间的调用流程关系,就是将来微服务之间的依赖关系,即上下文映射图。
但是,这个状态的泳道还不能直接转化成限界上下文。有些限界上下文可能会很大,有些依赖关系可能会比较强。而一个限界上下文不应该超过一个团队的职责范围,因为根据康威定律:组织架构决定系统架构,两个团队维护一个微服务,必然会将这个微服务搞成事实上的两个微服务。所以,我们还需要根据团队特性、过往的工作职责、技能经验,重新对泳道图进行调整,使其符合团队的职责划分,这时候才得到限界上下文。
在这个限界上下文基础上,考虑技术框架、非功能需求、服务重用性等因素,进一步进行调整,就得到最终的限界上下文设计,形成最后的微服务架构设计。