写点什么

领域事件与最终一致性

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

评论

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

以算力深挖数据应用价值!和鲸助力北京市市场监管数据应用创新竞赛圆满收官!

ModelWhale

大数据 数据应用 数据大模型

《2023年度快团团行业洞察报告》呱呱爆品重磅发布!

极客天地

揭露 FileSystem 引起的线上 JVM 内存溢出问题

vivo互联网技术

JVM 内存泄露 OOM 内存溢出

性能问题分析优化实践案例

老张

高可用 性能优化 性能测试 稳定性保障

大模型,为什么非得和「弱智吧」过不去?

脑极体

AI

观测云产品更新 | 管理、容器、异常追踪、场景图表、DQL等

观测云

监控

提示词优化的自动化探索:Automated Prompt Engineering

Baihai IDP

程序员 AI 企业号 4 月 PK 榜 Prompt Engineering 提示词工程

香港的云主机怎么样?为网站运行和响应有哪些帮助?

一只扑棱蛾子

云主机

大模型区域落地再加速!百度“文心中国行”西部首站落地成都锦江

飞桨PaddlePaddle

百度 BAIDU 百度飞桨 文心一言 文心大模型

Appium控件互动攻略:提升自动化测试效率的必备方法大揭秘!

测吧(北京)科技有限公司

测试

文本向量化模型新突破——acge_text_embedding 勇夺 C-MTEB 榜首

中杯可乐多加冰

rag 文本嵌入模型 文本向量化 文本嵌入

网站打开504,504网关超时可能是哪些原因导致

德迅云安全杨德俊

Appium控件互动攻略:提升自动化测试效率的必备方法大揭秘!

测试人

软件测试 自动化测试 测试开发

火山引擎ByteHouse:OLAP如何支持超高QPS点查?

字节跳动数据平台

大数据 企业号2024年4月PK榜

淘宝/天猫商品评论API:实时追踪用户反馈,洞悉市场动态

技术冰糖葫芦

api 货币化 API 文档 pinduoduo API

大模型,为什么非得和「弱智吧」过不去?

白洞计划

AI

大模型的现在进行时:走出对话框,走向产业端

Alter

IAM赋能数字化转型

芯盾时代

iam 统一身份认证 业务安全

Pandabuy VS Wegobuy哪个代购系统强?类似软件哪家公司开发

tbapi

淘宝代购系统 Pandabuy wegobuy 代购系统

实践探讨Python如何进行异常处理与日志记录

华为云开发者联盟

Python 开发 华为云 华为云开发者联盟 企业号2024年4月PK榜

领跑数字化转型:望繁信科技荣登「2024智能自动化技术商Top 15」榜单

望繁信科技

数据挖掘 流程挖掘 流程资产 流程智能

青椒云桌面玩转AIGC应用部署

青椒云云电脑

云桌面 AIGC

HCDG天津站精彩回顾 | AI高效开发, ModelArts技术动手工作坊

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号2024年4月PK榜 华为云HCDG

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