写点什么

体验构建反应式事件驱动的 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:103093
用户头像

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

关注

评论

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

铭文 LaunchPad 平台 Solmash 推出早鸟激励计划

西柚子

浅尝在 Rocky 9 下自助生成 PDF 格式的 TiDB 文档

TiDB 社区干货传送门

管理与运维

观测云产品更新 | 日志、场景仪表板、监控器等

观测云

可视化图表

“全球金牌课程”2024年3月9-10日 · CSM认证在线周末班【提前报名特惠】CST导师亲授

ShineScrum

敏捷教练 ScrumMaster ScrumMaster认证

“领导企业转型必修课” 3月23-24日敏捷领导力(CAL / ALJ)认证周末班【新年特惠】

ShineScrum

领导力 组织转型 业务敏捷 高管教练 敏捷领导力

软件测试/测试开发/全日制/测试管理丨Web自动化测试价值与体系

测试人

软件测试

BOE(京东方)供货荣耀Magic6系列 定义柔性OLED低功耗全新标准

科技热闻

文心与飞桨共享生态下的大模型训推部署创新实践计划

百度开发者中心

人工智能 大模型

TiDB × 杭州银行丨首个云原生、分布式、全栈国产化银行核心业务系统投产上线

TiDB 社区干货传送门

实践案例

tidb-v7.4初体验

TiDB 社区干货传送门

7.x 实践

微短剧市场暴涨267.65%,用微短剧场景AUI Kit精巧入局

阿里云CloudImagine

云计算 视频云 微短剧

如何规避云服务宕机现象?

天翼云开发者社区

云计算 服务器 云服务

企业为什么要进行数字化转型?七大原因

天津汇柏科技有限公司

数字化转型

vue3 + tsrpc +mongodb 实现后台管理系统

--linshuai

mongodb nodejs Vue3 后台管理系统

GaussDB(for MySQL) RegionlessDB发布:全球数据库技术

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 华为云GaussDB(for MySQL)

gRPC 和 RPC:分布式系统通信的核心机制解析

Apifox

程序员 gRPC 网络协议 RPC grpc双向流

存储结构的种类与比较

天翼云开发者社区

数据 存储结构

持续构建行业影响力|HarmonyOS SDK荣膺年度“技术卓越”奖项

HarmonyOS SDK

HarmonyOS

Mixtral 8X7B MoE模型基于阿里云人工智能平台PAI实践合集

阿里云大数据AI技术

入选人民网2023普惠金融优秀案例,合合信息旗下启信宝赋能银行对公信贷数字化转型

合合技术团队

银行 数字化 合合信息 启信宝

云上rds是暴利吗?是我们用tidb来替代他。

TiDB 社区干货传送门

数据库架构设计

等保三级测评:TiDB 客户端服务端间通信开启加密传输实践

TiDB 社区干货传送门

实践案例 数据库连接

存储程序和程序控制:开发经验分享及操作过程详解

天翼云开发者社区

存储 数据存储

QEMU组件安装来啦

小齐写代码

TiCDC同步kafka问题总结

TiDB 社区干货传送门

实践案例 6.x 实践

如何使用TiDB中的Placement Rules功能

TiDB 社区干货传送门

7.x 实践

AI时代下的智能商品计划如何助力服装企业实现库存精准优化

第七在线

软件测试/测试开发/全日制/测试管理丨Web测试框架Selenium

测试人

软件测试

懋嘉信息加入飞桨技术伙伴计划,通过大模型助力人力管理智能化

飞桨PaddlePaddle

人工智能 深度学习 文心大模型

大模型如何改变传统教学方式?《AI赋能教学实践》新课上线

飞桨PaddlePaddle

人工智能 深度学习

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