软件开发中的通信、协作与团队建设
1. 有界上下文的通信方式
1.1 同步与异步通信
有界上下文各自独立访问底层数据存储,维护的最大代价并非数据重复,而是设计和处理通信,以实现数据的最佳传播并丰富价值流。选择同步或异步通信,关键在于理解它们的影响。
同步依赖意味着调用服务会阻塞执行,等待被调用服务的响应。这种依赖很强,会使调用者与被调用者紧密耦合,扩展性不佳,调用服务还可能受被调用服务错误的影响,在对高可用性有要求的系统中不太适用。
异步通信则使用发布/订阅消息系统。调用服务发布关于领域事件的消息后,可继续其他工作,无需等待响应,提高了可扩展性。其他服务的问题不会导致该服务崩溃,即使其他服务暂时故障,调用服务本身也不会损坏,服务间的耦合度更低,自主性更强。
不过,异步消息解决方案会增加系统的基础设施复杂性,因为需要发送和处理消息的机制。而且,大量使用这种模式时,领域事件流的设计变得至关重要,可能会将复杂性转移到难以监控的领域,带来不必要的风险。
1.2 命令 - 查询分离
从通信角度看,命令和查询的分离也体现在有界上下文的概念中。查询适合同步通信,因为它们只需以只读模式暴露数据,理想情况下操作快速且无竞态条件。
由于 CAP 定理的影响,在分布式系统中以最终一致性条件工作已被证明在弹性、扩展性和性能方面具有关键优势。命令适合在异步通信中以“即发即忘”的模式执行,它们可能比查询需要更多时间来执行,且通常是事件的结果。
事件是系统层面相关事情发生的触发器和通知,应包含最少的标识信息。命令作为事件的结果被执行,引发事件的主体可能甚至不知道命令的发生。如果命令执
超级会员免费看
订阅专栏 解锁全文
951

被折叠的 条评论
为什么被折叠?



