写点什么

事件架构和事件流

2017 年 9 月 10 日

将一个单体系统迁移到分布式系统或微服务系统,通常也是从源于同一数据库的单一数据源(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 年 9 月 10 日 19:001980
用户头像

发布了 376 篇内容, 共 94.3 次阅读, 收获喜欢 215 次。

关注

评论

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

环信助力中国游戏社交类APP出“东南亚”记!

环信

Elasticsearch踩坑记之深度分页

topsion

大数据 elasticsearch 深度分页

区块链商品溯源平台开发,区块链公共服务系统开发方案

WX13823153201

区块链商品溯源平台开发

你的面试专属!JVM G1GC的算法+实现,90张图+33段代码

Java架构追梦

Java 架构 JVM 调优 G1GC

如何 0 改造,让单体/微服务应用成为Serverless Application

阿里巴巴云原生

Docker Serverless 容器 微服务 云原生

APM 行业认知系列 - 四

东风微鸣

APM Trace 可观察性

面试磕磕碰碰,辛得蚂蚁高级工程师的技术笔记指导,终获P7岗offer

Java成神之路

Java 程序员 架构 面试 编程语言

某某大龄程序员被字节面试官怒喷“废物”,他得知真相之后都懵了

Java架构之路

Java 程序员 架构 面试 编程语言

全网最新、最全面蚂蚁金服面经分享:简历模板/面试题库/Java核心技术笔记

比伯

Java 编程 程序员 面试 技术宅

干货来袭!阿里大佬“亲码”Java全线笔记,差距不止一点点

程序员小毕

Java 程序员 面试 分布式 微服务

面试官:Java性能调优你会多少?一个问题就把我问的哑口无言,哭了!

996小迁

架构 Java性能调优 Java性能调优面试

电子产品中EMC隔离设计的方法

不脱发的程序猿

二月春节不断更 电路设计 EMC 电子产品

APM(应用性能监控) 行业认知系列 - 一

东风微鸣

APM Trace 可观察性

APM 行业认知系列 - 三

东风微鸣

APM Trace 可观察性

MySQL事务浅析|由浅入深

云流

MySQL 编程 架构

阿里P8技术官带你玩转Spring全家桶,从Spring到Boot到MVC在到Cloud微服务实战

Java成神之路

Java 程序员 架构 面试 编程语言

Angular性能优化实践——巧用第三方组件和懒加载技术

Geek_Willie

angular SpreadJS

架构设计篇之微服务实战笔记(一)

小诚信驿站

架构师 刘晓成 小诚信驿站 28天写作 架构师成长笔记

新CEO帕特·基辛格回归 英特尔或将上演创新的“速度与激情”?

intel001

EMC设计中电缆屏蔽使用方法

不脱发的程序猿

二月春节不断更 电路设计 EMC 电子产品 电缆屏蔽

Java实体映射利器---MapStruct

是小毛吖

Java MapStruct

爱了!腾讯技术官吹爆的Spring Security笔记开源

Crud的程序员

spring 架构

神级!字节2-4大牛出品:分布式技术笔记,让你在分布式的路上如履平地!

Java架构之路

Java 程序员 架构 面试 编程语言

技术资讯 | BML CodeLab发布重磅更新!!

百度开发者中心

AI 工具软件 #百度#

2020回顾,2021学习目标

叫练

学习 2021年展望 2020年度总结

APM 行业认知系列 - 二

东风微鸣

APM Trace 可观察性

滚雪球学 Python 番外系列,自动化测试是个啥?

梦想橡皮擦

Python 28天写作 2月春节不断更

备受开发者青睐的“Spring全家桶”(双重理念)技术实战与面试结合

Java成神之路

Java 程序员 架构 面试 编程语言

2021版最新!字节跳动3面+腾讯6面一次过,谈谈我的大厂面经

Java架构之路

Java 程序员 架构 面试 编程语言

Supercell还香嘛?

李小腾

腾讯 中台 阿里 Supercell

颠覆认知!阿里又开创《新高并发宝典》,层层深入,深度集成

周老师

Java 编程 程序员 架构 面试

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

事件架构和事件流-InfoQ