在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

领域事件与最终一致性

  • 2015-10-08
  • 本文字数:1085 字

    阅读完需:约 4 分钟

领域事件代表了领域中发生的某些事情, 当 Eric Evan 原创的 DDD 书本发行的时候并没有把它定义为一种领域驱动设计 (DDD) 模式,但现在在DDD 中已经是一种战术元素,而且是一个完整的领域模型成员。 最终一致性 是一种改进规模和性能的设计方法,而且领域事件能作为触发器承载领域信息进而协助实现, Florin Preda 在最近的博客文章 中作出了解析。

对于多数开发者都很熟悉的事务型一致性工作流中,客户在系统中执行一个命令,这个系统为维护事务中的领域一致性的需要而运行所有操作。当操作全部成功或全部失败的时候客户会收到反馈,没有中间地带。

对于常见于分布式系统的最终一致性工作流中,客户同样在系统中执行一个命令,但这个系统只为维护事务中的领域一致性运行部分的操作。剩余的操作在系统前后一致后运行。

Preda 指出虽然事务型一致性看起来更加直观和容易使用,但他觉得某些场景中最终一致性有一点优势。在他描述的四种场景中,用 A 操作之后进行 B 操作来作为例子:

  1. 操作 B 执行时间长。
  2. 操作 B 本来就是异步的,例如依赖了一个异步机制。
  3. 操作 B 是通过在相同的 有界上下文 中使用不同于操作 A 的聚合
  4. 操作 B 在不同于操作 A 的有界上下文中执行。

Preda 将场景 3 和 4 关联到领域驱动设计(DDD),他相信在这两种场景中选择最终一致性将引导到比使用传统事务工作更好的设计。领域事件在这里可以很有用。领域事件是在领域专家相关的领域中发生的某些事情的代表,它们通过作为触发器启动工作流的下一个步骤和承载领域信息需求来促进最终一致性。

写同一主题的 Mike Mogosanu 声称在现实世界的用例中 事务型一致性工作流很罕见;一个业务流程经常包含一系列的用例和使用 Unit of Work (UoW) 模式去持久化一组更改,从技术观点来看,它幼稚的解决方案会将事情复杂化,尤其是在分布式应用中。

Mogosanu 相信一个包含不同有界上下文的业务流程应该考虑变为最终一致性,其在每个有界上下文中有最少一个领域用例。领域用例负责让聚合保持始终如一,在这里 UoW 模式会很有用,而且公布触发其它用例启动的领域事件,最终可以把整个系统带到一致的状态。

为了举例说明他的想法,在实现用 Azure Service Bus 消息系统来做事件传送的 C# 应用 中,Preda 使用了 Vaughn Vernon 在书本 实现领域驱动设计 中提到的设计的一个简化版本。

查看英文原文: Domain Events and Eventual Consistency


感谢张龙对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-10-08 19:005879

评论

发布
暂无评论
发现更多内容

数字货币OTC交易所开发,交易所搭建方案

13530558032

JMeter100个线程竟然只模拟出1个并发

dongfanger

软件测试 Jmeter 性能测试 压力测试 测试工具

完美!阿里P8都赞不绝口的世界独一份489页SQL优化笔记

Java~~~

Java 数据库 程序员 架构师 SQL优化

神经网络之dropout总述

Dreamer

学习

CDN是什么?

德胜网络-阳

金融科技的未来

CECBC

金融

做个别人家的网页

MySQL从删库到跑路

html/css 网页设计

从一场“众盟科技云滇之播”,我们发现了美食直播的商业与公益价值

脑极体

《乌合之众——群体心理研究》读书笔记

Jesse Xing

读书笔记 心理学 乌合之众 群体心理学

Android网络性能监控方案

移动研发平台EMAS

android 性能 监控 移动开发 应用

Java垃圾回收GC概览

Java JVM GC

架构师训练营 - 第七周 - 作业一

行者

不会这些mysql得面试题,那可能说明你要回炉了

小Q

Java MySQL 数据库 学习 面试

从接口异常说说线上问题排查流程

QiLab

线上排障 指标监控 链路监控 日志监控 排障流程

jdk 源码系列之ReentrantLock

sinsy

源码 jdk ReentrantLock 公平锁 非公平锁

USDT承兑支付平台技术开发,承兑商币支付交易平台搭建

13530558032

害怕重构?都怪我太晚和你介绍该如何重构,现在我来了

小Q

Java 学习 程序员 面试 重构

初级工程师职场生存要点

javaadu

程序员 职场成长 开发日志

《精进:如何成为一个很厉害的人》阅读心得

Jesse Xing

读书笔记 个人成长 精进

一不小心画了 24 张图剖析计网应用层协议!

苹果看辽宁体育

计算机网络 计算机 协议

接口测试的时候如何生成随机数据进行测试

测试人生路

接口测试

京东技术中台Flutter实践之路(二)

京东科技开发者

开源 中台 大前端 Web UI

魏际刚:精准谋划我国供应链发展新方位

CECBC

供应链 物流

一款区块链钱包开发需要多少钱?数字资产钱包开发搭建

13530558032

《TED TALKS演讲的力量》阅读笔记

Jesse Xing

读书笔记 演讲 TED

算法有多重要,看字节腾讯等公司面试多重视就行了

小Q

Java 学习 架构 面试 算法

从智慧计算的点、线、面,读懂浪潮AI的进化轨迹

脑极体

面试前不陪女朋友也要看完这套spring源码面试题(附答案)

小Q

Java 学习 编程 架构 面试

18张图,揭开阿里巴巴开发手册强制使用SLF4J作为门面担当的秘密

沉默王二

Java slf4j 日志系统

音像协呼吁保护音乐版权:短视频平台成为侵权重灾区

石头IT视角

搭建一套ASP.NET Core+Nacos+Spring Cloud Gateway项目

yi念之间

领域事件与最终一致性_语言 & 开发_Jan Stenberg_InfoQ精选文章