知识卡片
微服务间领域事件:优先异步最终一致,避免雪崩与分布式事务
内容
跨微服务的领域事件可以在不同限界上下文/领域模型间实现业务协作,主要目的是解耦微服务、推动业务流程和数据在不同子域间流转,同时减轻微服务间同步调用的压力——避免某个关键微服务不可用时引发连锁的雪崩效应。跨微服务领域事件同样存在两条路:一是采用异步化的最终一致性设计,结合消息中间件完成事件的构建、发布订阅、持久化,实现起来相对复杂但避免了强耦合;二是采用同步服务调用实现强一致性,但这需要引入分布式事务机制才能保证多个微服务间的数据强一致,分布式事务不仅会拖累系统性能,还会显著增加微服务之间的耦合度。书中给出的明确建议是:应尽量减少微服务之间的同步服务调用方式,优先采用基于消息中间件的最终一致性设计。这个建议和跨微服务场景下”雪崩效应”这个具体风险是绑定的——同步调用链条越长、越紧密,一个节点故障波及全局的概率就越高,异步事件驱动从根本上打断了这种紧密耦合的调用链。
参考来源
- 位置:第9章《领域事件:解耦微服务的关键》"9.1.2 微服务之间的领域事件"(源文件:_epub-src/OEBPS/Text/chapter3-5-1-2.xhtml)
- 结论依据:原文说明"其主要目的是实现微服务解耦……同时也可以减轻微服务之间同步服务访问的压力,避免当某个关键微服务无法提供服务时,出现雪崩效应……所以,应尽量减少微服务之间的同步服务调用方式,优先采用基于消息中间件的最终一致性设计",直接支撑本卡片结论。
- 原始内容:微服务之间的领域事件,也可以采用同步服务调用的强一致性设计,实现实时的数据和服务访问。其弊端就是需要引入分布式事务机制,以确保微服务之间的数据强一致性。但分布式事务机制会影响系统性能,同时增加微服务之间的耦合。