DDD之微服务划分与限界上下文集成

358 阅读2分钟

1微服务的设计方法

1.1微服务设计要考虑的几种情况:

第一,不同的可伸缩性要求 需要动态伸缩的,单独划分出来,以便低成本增加容器。

第二,不同的安全性要求 有的功能要接入互联网,有的要放在内网,需要部署在不同的安全区; 划分成不同的微服务。

第三,技术异构 有的用java实现,有的用Node.js实现。

1.2微服务划分架构图

父组件用 <> 衍型;

子组件用 <> 来说明这些是微服务. image.png

微服务的划分,可以从功能性需求和非功能性需求两方面考虑;

从功能性方面考虑,微服务的划分应该有利于保证系统概念的一致性,更容易灵活扩展功能,而这些又要求开发团队顺畅的沟通协作。

根据限界上下文来划分模型,既考虑到了传统模块化思维中对业务概念的松耦合、高内聚的要求,又考虑到团队的认知负载和认知边界。

合理的微服务划分,应该是对于多数需求变更,只需改动一个或少量的微服务。 而划分不合理的话,对于多数业务需求,都要修改多个微服务。有人把这种现象叫做“分布式单体”,这其实也是因为模型划分不合理,没有找到内聚的业务边界。而限界上下文可以解决这个问题。

2限界上下文间的集成

2.1两种集成策略

一是数据同步策略。

二是是 API 调用策略,分同步和异步两种方式。

2.2防腐层

DDD 中,防腐层也是一种用于上下文映射的模式。指的是两个上下文之间的转换逻辑,这个逻辑可以屏蔽两个上下文的差异,从而使两个上下文可以相对独立地演进。我们目前采用的方法是让适配器充当防腐层。

防腐层隔离了上下文之间的变化,可以使两个上下文各自独立演化,逻辑更加内聚,也更容易测试。


此文章为3月Day2学习笔记,内容来源于极客时间《手把手教你落地 DDD》