写点什么

领域事件与最终一致性

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

评论

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

沐曦与百度飞桨完成兼容性测试,助力计算机视觉应用发展

飞桨PaddlePaddle

人工智能 百度 paddle

目前包头市等保测评企业有几家?2家还是3家?

行云管家

等保 等级保护 等保测评 等保合规

据平台流量回放最佳实践|精选

得物技术

前端 后端

联合打造!嘉为蓝鲸携手麒麟软件共建智能运维解决方案

嘉为蓝鲸

运维 AIOPS

一种读取亿级doris数据库的方法 | 京东云技术团队

京东科技开发者

MySQL 数据库 Doris 企业号 6 月 PK 榜

软件测试/测试开发丨Python常用数据结构学习笔记

测试人

Python 数据结构 软件测试 集合 列表

实现 AI 大语言模型的关键在于超高性能存储能力

焱融科技

一种接口依赖关系分层方案 | 京东云技术团队

京东科技开发者

依赖关系 接口优化 API 接口 企业号 6 月 PK 榜 接口分层

Spring事件监听机制使用和原理解析

不在线第一只蜗牛

spring springboot

小程序技术分享| 小程序集成 pixi 渲染引擎

anyRTC开发者

小程序 音视频 canvas pixi 渲染

IoT场景时序数据库性能对比报告出炉,TDengine 远超 InfluxDB & Timescal

电子信息发烧客

工业物联网SCADA软件推荐

2D3D前端可视化开发

工业物联网 工业控制系统 web组态软件 HMI SCADA软件

CVPR2023|小红书提出 OvarNet 模型:开集预测的新SOTA,“万物识别”有了新玩法

小红书技术REDtech

深度学习 算法 小红书

Maven进阶学习指南 | 京东云技术团队

京东科技开发者

maven 组件 依赖 Maven仓库 企业号 6 月 PK 榜

消息中间件最强笔记大全:MQ+Kafka+体系图+笔记

小小怪下士

Java 消息队列 消息中间件

618技术揭秘:探究竞速榜页面核心前端技术 | 京东云技术团队

京东科技开发者

前端 H5页面 海报生成 动画特效 企业号 6 月 PK 榜

.NET的基元类型包括哪些?Unmanaged和Blittable类型又是什么?一文带你深度解析

不在线第一只蜗牛

.net 编程

入门指南:使用Spring Boot构建Java应用程序

2756

入门学习

复旦发布云上最大科研智算平台

新云力量

智能 计算 复旦 科研智算平台

架构实战营(一)

架构实战营

码控算法

qh12346

HTML5 游戏开发实战 | 五子棋

TiAmo

html html5 游戏 6 月 优质更文活动

3dMax 应该用哪个渲染器?Vray、Corona、Arnold?

Finovy Cloud

AI与企业信息安全的应用、技术以及前景

行云管家

AI 网络安全 信息安全 企业信息

「学习笔记」记忆化搜索

互联网工科生

学习笔记

提升测试质量的四个关键特征

老张

质量保障 测试质量

NFTScan 与 Sender Wallet 达成合作伙伴,双方在多链 NFT 数据方面展开合作!

NFT Research

NFT\

这样做,轻松拿捏阻焊桥!

华秋PCB

工具 电路 PCB PCB设计 阻焊

版本动态 | SolidUI 0.1.0 版本发布

李孟聊AI

Web 2D 3D AIGC ChatGPT

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