写点什么

体验构建反应式事件驱动的 CQRS 应用

  • 2014-08-03
  • 本文字数:1143 字

    阅读完需:约 4 分钟

Duncan DeVore 在一次近期的演讲中谈到,设计一个不变的领域模型并与之进行反应式(Reactive)编程对我们的新架构而言是非常重要的需求,Duncan 在演讲中还对他构建分布式应用的体验进行了分享。该分布式应用基于 CQRS 最终一致性事件溯源 event sourcing ),并且是采用 Akka Scala 编写的,

Duncan 是一家能源公司的工程副总裁,他对 Command Query Responsibility Separation (CQRS,即命令查询职责分离) 进行了描述:将命令与查询分离到两个对象中,使它们在其他方面可以进行单独的优化,根据 Duncan 的经验,这是一种非常常见的需求。对于命令(Commands)而言,虽然它们会改变状态,但是它们并不涉及数据的编辑,它们只是行为,是一个对执行某个任务或某个动作的请求,它们更适合作为一条消息进行传递。而查询(Queries)则是位于数据存储之上的一层很轻薄的读取层,它并不是领域的映射,相反,数据通常是基于抓取(fetch)和页面结构(screen structure)存储的,并且拥有一个可以读取所有需要数据的键。将写和读分离的一个重要挑战是最终一致性,它会使得在写发生一段时间后,读取才可能展示出相同的数据。

当今大多数的业务应用都依赖对当前状态的存储,而 Duncan 认为这是由于采用了关系型数据库系统( RDBMS )的副作用。相比而言,事件溯源是针对事件的捕获,这是一种贴合自然的行为,它不会保持当前的状态,它保持的是状态的根源。我们来讲一个可以阐述这种方式优势的例子,有一个这样的需求,我们需要现有的购物车能够报告所有用户在购物车(取出商品后)所产生的订单。如果一个系统只是跟踪当前的状态,那么它只能报告新的订单,而对于基于事件的系统,所有订单的事件都保留在系统里,唯一需要做的就是向系统添加报告这项功能。

在成熟的业务模型中,行为跟踪的概念很常见。举一个例子,在一个银行账户中,每一比交易事务,比如存款和提款都会被记录下来。我们之所以信任当前的状态是因为该状态可以通过重放所有前面的交易事务来重新创建,而且该状态也可以通过对账来确认有效性。

Duncan 强调了与事件打交道的两个技术性影响,第一个是存储系统成为了一种只有追加操作(译者注:即没有更新)的架构,这种架构更加容易分发,第二个是水平分区变得更加容易,因为抓取数据时使用的只是一个单独的键。

Duncan 最后引用了他自己的一段话进行了总结:

我相信将 CQRS 和事件溯源结合可以为构建遵循反应式宣言( Reactive Manifesto )的分布式应用提供一种清晰且简明的方式。

反应式宣言 Reactive Manifesto )于 2013 年九月发布,目前已经有 6,300 人签署了该宣言。

Duncan 是一本即将出版的名为《构建反应式应用》(“Building Reactive Applications”)的图书的联合作者。

查看英文原文: Experiences Building a Reactive Event-Driven CQRS Application

2014-08-03 02:103103
用户头像

发布了 52 篇内容, 共 23.3 次阅读, 收获喜欢 5 次。

关注

评论

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

由 Mybatis 源码畅谈软件设计(五):ResultMap 的循环引用

京东科技开发者

研发效能实践之打造高效能团队

思码逸研发效能

研发效能 效能度量 研发效能度量 高效能

自学记录鸿蒙API 13:Calendar Kit日历功能从学习到实践

李游Leo

HarmonyOS HarmonyOS NEXT

CleanMyMac有必要买吗?达人深度体验后告诉你答案

阿拉灯神丁

软件包 苹果软件精选 mac系统维护 CleanMyMac X中文

百剧计划:百度短剧创新引擎,赋能短剧新未来

极客天地

无限制!个人开发者发布Coze扣子智能体到微信小程序教程

Ceelog

由 Mybatis 源码畅谈软件设计(七):从根上理解 Mybatis 一级缓存

京东科技开发者

Web3项目开发流程

北京木奇移动技术有限公司

区块链技术 软件外包公司 web3开发

探析同济医院科研一体化平台建设(二):统筹科研项目,促进成果转化

ModelWhale

人工智能 大数据 同济大学

实力再获认可!焱融 AI 存储 F9000X 荣获中国 IDC 产业创新技术产品奖

焱融科技

人工智能 IDC 智算中心 全闪存储

百家号年度盛典:聚焦创作者成长,乘风计划再升级

极客天地

焱融 AI 存储荣登 「2024 年度 AI 最佳技术服务商 TOP 10」榜单

焱融科技

AI 全闪存储

Java Web学生自习管理系统

不在线第一只蜗牛

Java 前端

如何通过电商 API 接口实现智能客服与用户互动?

科普小能手

数据挖掘 数据分析 电商 API 接口 API 测试

人形机器人赛道已挤满车企和自动驾驶行业精英

机器人头条

机器人 人形机器人 具身智能

推理模型的“年终考试”,谁是国内目前最好的“o1”?

Alter

AI 大模型 推理模型 大模型应用

得物基于AIGC生成测试用例的探索与实践

得物技术

AI 效率提升

区块链智能合约的开发流程

北京木奇移动技术有限公司

区块链开发 智能合约开发 软件外包公司

四年匠心磨砺,快手系统软件技术创新与领域演进之路

快手技术

编译器 快手 系统软件技术 Java协程

研发效能度量的常见指标问题——看什么?不准怎么办?

思码逸研发效能

DevOps 研发效能 效能度量 研发效能度量 思码逸

鸿蒙保存图片到相册

龙儿筝

【连载 08】lock锁

FunTester

🎉 夜莺监控突破一万 star,这是汗水,也是鞭策

巴辉特

夜莺监控 运维监控 IT监控 开源监控

用户态文件系统在高性能文件存储中的探索实践

焱融科技

高性能存储 用户态文件系统

快手动效渲染引擎Crab,解锁“游戏化动效”开发新方式!

快手技术

Java 前端 动效

体验构建反应式事件驱动的CQRS应用_Scala_Jan Stenberg_InfoQ精选文章