产品战略专家梁宁确认出席AICon北京站,分享AI时代下的商业逻辑与产品需求 了解详情
写点什么

事件架构和事件流

  • 2017-09-10
  • 本文字数:1015 字

    阅读完需:约 3 分钟

将一个单体系统迁移到分布式系统或微服务系统,通常也是从源于同一数据库的单一数据源(SSOT,Single Source Of Truth)转变为源自多数据库的多个数据源。如果使用事件架构(Event Architecture)并将所有事件持久化为数据流,那么就我们可以转回到单一数据源上。这是 Ben Stopford 在他撰写的博客文章中提出的,此篇博客是他关于如何在 Kafka 中使用事件的系列博文之一。

Stopford 是 Confluent 公司的一名工程师他在博文中指出,传统的消息系统中,事件是短暂存在的,已消费的事件并没有历史信息。持久化所有的事件不仅会创建单一数据源,而且可以回溯和重放事件,使得对数据可执行似于版本管理系统中那样的操作。这使得恢复崩溃的系统以及在修复软件故障后重放事件成为可能。

对于一个典型的基于事件的系统,它会对事件进行监听,更新事件在数据库中的状态并做持久化,进而发出新的事件。在 Stopford 看来,这一架构具有两个挑战。首先,如何在同时写入数据和事件日志时维护一致性。其次,因为存在不同的代码路径等原因,在数据库中的和事件中的数据会出现一些偏差,这可能会导致系统中的不一致问题。解决问题的最好方法是类似于在事件溯源系统中那样,将事件作为头等实体并仅使用事件。

要着手实现事件流,一个途径是使用“变更数据捕获 ”(Change Data Capture)技术。采纳了这一技术的数据库正在不断增加。使用CDC,对数据库的写入将在后台转换为事件流。Stopford 在文章中提及,CDC 的一个优点就是提供了一致点。我们可以对数据库做读写操作,无需分布式事务就让事件流保持数据库和数据流的同步。

Stopford 提供了一个 CDC 的重要用例,就是实现旧架构的迁移。通过使用 CDC 连接到遗留系统的数据库,他们抽取出了事件流,并从使用遗留系统逐步迁移到使用事件流的系统。

在使用事件溯源和事件流中,一个非常有用的模式就是对事件的两次持有。其中一次在基于保留(Retention)的消息类(Topic)中。此类消息按时间顺序保留了每次更改,用于事件溯源视图中。另一次是在压缩消息类(Compacted Topic)中,该类消息类仅提供实体的最新视图,因此规模更小,速度更快。

文末 Stopford 做了总结,指出基于流的事件架构的最显著特性是可不断进化的能力。一旦有新的需求出现,系统就能构建出新的服务,进而轻易地进行部署,并通过从头开始重放所有的事件而维持更新状态。他相信,考虑到 Kafka 所能提供的功能,它非常适用于此类架构之中。

查看英文原文: Event Architectures and Event Streaming

2017-09-10 19:002696
用户头像

发布了 391 篇内容, 共 135.3 次阅读, 收获喜欢 256 次。

关注

评论

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

“码”力全开!高效开发就靠这款神器

ZEGO即构

UI 自定义组件 即构UIkits UIKits

软件测试公开课 | Python高频面试题解析公开课

测试人

软件测试

对象业务的追加写接口

不在线第一只蜗牛

对象 业务开发

面试官:说说Netty对象池的实现原理?

王磊

Java

1688批量自动下单接口丨1688代采系统丨1688跨境代采系统

tbapi

1688批量采购 1688代购系统

保姆级教程:Redis主从复制原理及集群搭建

小曾同学.com

redis主从 redis哨兵集群 redis 底层原理 redis主从集群 redis数据同步原理

用Python打造你的微博热搜追踪器

我再BUG界嘎嘎乱杀

Python 后端 开发语言

Python 中有没有所谓的 main 函数?为什么?

EquatorCoco

Python 开发语言

告别繁琐,一键同步!聚道云助力企业人力资源大升级

聚道云软件连接器

案例分享

斯坦福 AI 团队被曝抄袭中国大模型开源成果;Zoom 创始人谈视频会议未来丨 RTE 开发者日报 Vol.218

声网

研发提效:想快速定制一个OLAP应用?你可以这么做!

京东零售技术

架构 后端 研发提效 企业号 6 月 PK 榜

生成式 AI 码力全开,动手搭建未来商城

亚马逊云科技 (Amazon Web Services)

Serverless

NFTScan 获 Google Cloud 战略支持!

NFT Research

Google Cloud NFT\ NFTScan

Stable diffusion采样器详解

程序那些事

程序那些事 Stable Diffusion

仓库数据同步难题如何轻松破解?

聚道云软件连接器

案例分享

小狐狸MetaMask:探索以太坊世界的必备工具

dappweb

#区块链#

降本增效下的自动化测试实践

老张

软件测试 研发效能 自动化测试 质量保障

利用Python调用KimiGPT API接口

我再BUG界嘎嘎乱杀

Python 后端 开发语言 GPT

发挥财务规划隐藏的超能力,实现企业业务与财务的协作

智达方通

企业管理 全面预算管理 财务管理 财务规划

Python高频面试题解析公开课

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

测试

RESTful API 设计原则:优化您的接口设计

Liam

后端 Rest API APi设计 REST API

你还不懂区块链就out了

区块链开发团队DappNetWork

用这个方法给苹果电脑清理app垃圾,让电脑快如闪电

阿拉灯神丁

CleanMyMac Mac 系统 苹果软件 杀毒软件

扫码报名活动时,如何避免重复报名?

草料二维码

二维码 活动报名 草料二维码

事件架构和事件流_语言 & 开发_Jan Stenberg_InfoQ精选文章