【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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

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

关注

评论

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

一文吃透信息化、数字化、智能化三者不同的概念

这我可不懂

低代码 数字化 信息化 JNPF

为什么ChatGPT不是中国搞出来的?

慕枫技术笔记

人工智能 后端 4月月更

4 种办法获得测试 BNB,你一定需要知道

加密先生

区块链、 bnb

如何实现对 Oracle 的实时数据捕获和性能调优|Flink CDC 专题

Apache Flink

大数据 flink 实时计算

基于 LowCodeEngine 的低代码组件体系建设和实践

阿里技术

前端 低代码

Themis Pro版将正式推出,3次迭代到底在酝酿什么?

威廉META

互联网工程师最新Java面试题及答案汇总( 2023最新版,持续更新)

采菊东篱下

Java 编程

提高API采用率的关键:快速创建有效的API监控任务

云智慧AIOps社区

API api 网关 监控宝 API Gateway 监控产品

毕业设计 - 电商秒杀系统

架构实战营 「架构实战营」

以技术赋能智慧酒店,思岚科技亮相上海酒店展

科技热闻

Visual Studio Code for Mac(好用的微软代码编辑器)中文版

Rose

4种办法获得测试BNB,你一定需要知道

加密先生

英特尔宋继强:面向半导体“万亿时代”,以全栈创新推动算力发展

科技热闻

对谈阿里云祝顺民:经济复苏,云网络如何加速企业效率提升?

云布道师

云网络

Bigasoft Video Downloader Pro :视频网站下载和转换视频器

Rose

手把手带你通过API创建一个loT边缘应用

华为云开发者联盟

IoT 边缘计算 华为云 华为云开发者联盟 企业号 4 月 PK 榜

sync.WaitGroup:掌握并发编程中的重要工具

Jack

AI推理服务平台升级,阿里云机器学习PAI推出新规格

阿里云大数据AI技术

人工智能 机器学习 模型 在线服务

World Clock Deluxe for Mac(世界时钟豪华版)

Rose

PCB拼板,不得不注意的10个问题!

华秋PCB

电路 PCB PCB设计 拼版 邮票孔

IT采购,不再默默扛下“背刺”

脑极体

AI ChatGPT

互联网出海风大雨大,融云助力 App 守护用户「被遗忘权」

融云 RongCloud

互联网 安全 融云 泛娱乐

AutoCAD(CAD2024)中文特别版Mac/win

Rose

CAD绘图 cad2024激活版

一文读懂华为云云原生产品及开源实践

华为云开发者联盟

开源 云原生 华为云 华为云开发者联盟 企业号 4 月 PK 榜

GaussDB(DWS)网络调度与隔离管控能力

华为云开发者联盟

数据库 大数据 华为云 华为云开发者联盟 企业号 4 月 PK 榜

zkSync Era发币教程:配置本地环境、部署智能合约

加密先生

智能合约 公链

软件测试/测试开发丨ChatGPT在软件测试领域的应用

测试人

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

百度研发效能从度量到数字化蜕变之路

百度Geek说

百度 研发效能 企业号 4 月 PK 榜 效能数字化

经验分享|如何用ChatGPT开发一个安卓应用

Onegun

人工智能 移动开发 ChatGPT

昇思MindSpore:人工智能的创新之源

Geek_2d6073

精彩回顾 | 2023工赋Meetup—上海站

工赋开发者社区

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