写点什么

事件架构和事件流

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

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

关注

评论

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

华为云数据灾备方案助力企业安全,守住企业底线

路过的憨憨

华为

View层、Controller层、Service层、Dao层的区别以及对应的功能

孙铭

service DAO 10月月更

Vue.nextTick核心原理

yyds2026

Vue

华为云数据灾备方案,撑起一把企业的保护伞

路过的憨憨

华为

4000字深度总结!Pipeline五大性能实践,招招制敌

极狐GitLab

DevOps CI/CD 持续交付 pipeline 极狐GitLab

云端软件运行,小程序安全沙箱技术为端侧安全保驾护航

Geek_99967b

小程序

英特尔“四维发力”系统级代工:晶圆制造、封装、芯粒、软件

科技之家

华为云数据灾备方案如何成为企业的坚实后盾

路过的憨憨

华为

华为云桌面,安全可靠的云上办公首选

路过的憨憨

华为

HTTP 常用的状态码及使用场景

孙铭

HTTP 10月月更 200

华为云对象存储服务OBS教你一招轻松解决存储难题

路过的憨憨

华为

助力企业资源的合理利用,华为云数据库RDS for MySQL使用经济更省心!

路过的憨憨

重磅丨九科被评为“2022年中国流程挖掘行业典型实践厂商” 实力再获“RPA中国”认可

九科Ninetech

RPA 流程挖掘 数智化转型

Zookeeper的服务器的log4j升级为log4j2的升级方案(忽略配置化兼容问题)

码界西柚

zookeeper

Vue3, setup语法糖、Composition API全方位解读

yyds2026

Vue

华为云CDN联手OBS桶,帮助企业更好降本增效!

路过的憨憨

华为

HTML学习笔记

虾仁疙瘩汤

html 前端 10月月更

华为云对象存储OBS,助力企业高效解决存储问题

路过的憨憨

华为

鸿蒙开发实例|分布式文件服务

TiAmo

华为 鸿蒙 10月月更

低代码无代码区别在哪?通过这5点来区别准没错

优秀

低代码 无代码

HTML基本知识学习笔记

虾仁疙瘩汤

html 前端 10月月更

华为云大数据BI解决方案,如何帮助企业精准营销

路过的憨憨

华为

CSS学习笔记1

虾仁疙瘩汤

CSS html 10月月更

开发者原来都是健身猛男?

InfoQ写作社区官方

热门活动

华为云灾备,保护企业信息数据势在必行!

路过的憨憨

华为

华为云数据灾备,如何让企业数据无忧

路过的憨憨

华为

Vuex在uniapp中的使用

孙铭

Vue vuex 10月月更

“程”风破浪的开发者|我是如何快速学 Go 的?GoFrame 只用了 3 天时间就从小白变大佬?

王中阳Go

Go golang 学习方法 10月月更 “程”风破浪的开发者

Spring Boot 应用使用 application.yml 和 application.properties 的区别

汪子熙

Java mvc spring springboot 10月月更

rdd pair reduce

小东

分布式事务-事务补偿(TCC)

zarmnosaj

10月月更

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