写点什么

领域事件与最终一致性

  • 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:005702

评论

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

ERP系统与智能商品系统在供应链管理上的区别和优势在哪些方面?

第七在线

阿里云 ACK 云上大规模 Kubernetes 集群高可靠性保障实战

阿里巴巴云原生

阿里云 容器 云原生

高效打通,释放人力——聚道云软件连接器助力生产制造行业人力资源信息交互

聚道云软件连接器

云原生时代的安全变化趋势

穿过生命散发芬芳

七功能遥控编解码芯片

芯动大师

TiDB 7.1 多租户在中泰证券中的应用

PingCAP

数据库 TiDB

基于 KubeBlocks 的 PikiwiDB(原Pika) 云化下一站

小猿姐

数据库 云计算

Solana 生态铭文跨链桥 Sobit 是何神圣?其场外白名单已达到1200U

股市老人

边缘计算:将未来的计算力带到你的指尖

啊川..

TiDB 助力保险业首个全栈自主的核心保单系统成功投产

PingCAP

数据库 TiDB 保险业

0.1+0.2≠0.3,揭秘Python自带的Bug

程序员晚枫

Python

按图搜索淘宝商品接口(拍立淘)(Taobao.item_search_img)

tbapi

按图搜索淘宝商品接口 图片搜索商品接口 图片搜索API接口 拍立淘API接口 淘宝图片搜索接口

聚道云受邀参加【中国算谷·智慧庆阳】算力行动推进大会

聚道云软件连接器

为什么市场称SoBit 是铭文跨链赛道真正的龙头?

股市老人

普及旗舰音质,打造一加用户首选!一加 Buds 3定档1月4日发布

编程猫

聚道云实现浙商银行与易快报完美互通,助力企业财务完成数字化转型

聚道云软件连接器

C 语言中的 switch 语句和 while 循环详解

小万哥

程序人生 编程语言 软件工程 C/C++ 后端开发

内嵌AI智能会议、AI临时分身、AI降噪等创新技术,ThinkPad X1 Carbon AI发布

科技范儿

云原生场景下月省 10 万元资源成本,这家企业做对了什么

阿里巴巴云原生

阿里云 容器 云原生

如何快速获取抖音新用户/用户信息

谷云科技RestCloud

抖音 数据同步 ETL

中&美程序员,其实就差在这6点了

伤感汤姆布利柏

程序员 IT

TiDB 7.5 LTS 发版丨提升规模化场景下关键应用的稳定性和成本的灵活性

PingCAP

数据库 TiDB pingCAP

多语言应用监控最优选,ARMS 应用监控 eBPF 版正式发布

阿里巴巴云原生

阿里云 云原生

Kubernetes常见的三种网络插件Flannel、Calico、Weave Net的比较:

虚实的星空

2023 年中国金融级分布式数据库市场报告:TiDB 位列领导者梯队,创新能力与增长指数表现突出

PingCAP

数据库 TiDB

2023 IoTDB Summit:清华大学软件学院院长王建民《清华数为:可组装的工业大数据软件栈》

Apache IoTDB

实时渲染与离线渲染优势浅析-3D可视化技术

3DCAT实时渲染

云渲染 实时渲染

Kubernetes调试终极武器: K8sGPT

俞凡

人工智能 Kubernetes SRE ChatGPT

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