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

事件架构和事件流

  • 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:002584
用户头像

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

关注

评论

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

3 天交付新需求?极狐GitLab APP 「极限编程 XP」实践

极狐GitLab

DevOps 敏捷开发 CI/CD 极限编程 极狐GitLab

智慧公厕管理系统哪家好?

光明源智慧厕所

智慧城市

某头部零售集团的数据云平台“多租户安全”实践 | 奇点云技术分享

奇点云

数据安全 多租户技术 奇点云

OpenHarmony关系型数据库[1]

白晓明

关系型数据库 OpenHarmony

面试造火箭?GitHub飙升“2023(Java 岗)面试真题汇总”转载40万

三十而立

Java 互联网 IT java面试

HarmonyOS 联合绿盟发布折叠屏软件规范,携HUAWEI Mate X3带来创新折叠体验

科技汇

3D模型分割新方法解放双手!不用人工标注,只需一次训练,未标注类别也能识别|港大&字节

Openlab_cosmoplat

模型 开源社区

Moblink节省开发者时间精力和公司成本

MobTech袤博科技

开心档之Go 语言环境安装

雪奈椰子

SRE是什么,与传统运维有什么不同?

不思jo

SRE #运维

DPU 厂商北中网芯加入龙蜥社区,共建网络通信与安全

OpenAnolis小助手

开源 龙蜥社区 DPU CLA 北中网芯

华秋电子受邀参加产业高峰论坛,探讨电子行业新商机

华秋电子

对话数十位学术合作代表:如何提升前沿技术在商业领域的落地应用?

阿里技术

前沿技术

软件测试 | 白盒的测试方法

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

测试

软件测试/测试开发丨app自动化测试之Andriod微信小程序的自动化测试

测试人

微信小程序 软件测试 自动化测试 测试开发

熟悉的测试用例设计方法都有哪些?

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

测试

上传iOS应用变得更加容易 - 在Windows上架iOS APP的工具介绍

雪奈椰子

软件测试 |全局变量和局部变量有什么区别?

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

测试

EasyExcel 带格式多线程导出百万数据

三十而立

Java 互联网 IT

软件缺陷是什么?

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

测试

测试策略与测试手段

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

测试

ChatGPT王炸更新!能联网获取新知识,可与5000+个应用交互,网友:太疯狂了

Openlab_cosmoplat

工业互联网 开源社区 智能制造 ChatGPT

谈谈低代码的安全问题,一文全给你解决喽

加入高科技仿生人

软件开发 低代码 信息安全 低代码开发

让Web和App无缝链接的移动深度链接方案

MobTech袤博科技

9000字,通俗易懂的讲解下Java注解

Java你猿哥

Java ssm 实战 Java工程师

【3ds MAX 插件】近期发布的几个小插件,总有一款适合你

Finovy Cloud

插件 3ds Max

旺链科技荣获“高新技术企业证书”殊荣

旺链科技

区块链 区块链+ 高新技术企业

裸辞底气!GitHub飙升“java面试笔记2023” 了解下八股文天花板

三十而立

Java 互联网 面试 IT java面试

EasyExcel 带格式多线程导出百万数据(亲测牛逼)

三十而立

Java 互联网 IT 程序猿

开源工具系列6:Grype

HummerCloud

PCB生产工艺 | 第九道主流程之表面处理

华秋电子

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