写点什么

事件架构和事件流

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

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

关注

评论

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

CTF逆向涉及的各种加密算法

网络安全学海

网络安全 信息安全 CTF 渗透测试 漏洞挖掘

使用FFMPEG自动剪辑视频

十三

Linux之last命令

入门小站

Linux

恒源云(Gpushare)_没有你想要的镜像?技巧大放送5!

恒源云

镜像仓库 显卡、gpu

Spring 完美导入 IDEA

阿Q说代码

spring IDEA 4月月更

融合通信常见问题3月刊 | 云信小课堂

网易云信

前端

什么是元宇宙?为何要关注它?

CECBC

一个公式告诉你:如何提升团队的研发效率?

凌晞

技术管理 研发效率

基于 HTML+CSS+JS 的石头剪刀布游戏

海拥(haiyong.site)

html 大前端 游戏 4月月更

百度信誉保障服务架构全解析

百度Geek说

后端

ffmpeg实现web在线转码

lo

4月月更

龙蜥开源Plugsched:首次实现 Linux kernel 调度器热升级 | 龙蜥技术

OpenAnolis小助手

Linux 内核 龙蜥社区 Plugsched

netty系列之:netty中的核心MessageToMessage编码器

程序那些事

Java Netty 程序那些事 4月月更

Web 3.0的未来产业趋势

王强

Web 3.0

墨水屏的“硬伤”与福气

脑极体

实时数仓建设

五分钟学大数据

实时计算 4月月更

阿里Maven仓库不限容量,免费用

阿里云云效

云计算 阿里云 npm Maven仓库 制品仓库

腾讯云CDW-ClickHouse云原生实践

腾讯云大数据

Clickhouse 云数据仓库

Flink 实践教程-进阶(11):SQL 关联:Regular Join

腾讯云大数据

flink 流计算 流计算 Oceanus

Flink 实践教程-入门(10):Python作业的使用

腾讯云大数据

两步实现让antd与IDE和睦相处的处理案例

袋鼠云数栈

大数据 开源

数栈在湖仓一体上的探索与实践

袋鼠云数栈

数据库 大数据 数据湖 湖仓一体

GaussDB(for Redis)助力《余烬风暴》实力上线,给您沉浸式魔幻体验

华为云数据库小助手

GaussDB GaussDB ( for Redis )

关于元宇宙热的冷思考

CECBC

Hoo虎符研究院|从多个方面了解公链Tezos和它的 Ithaca 2 升级

区块链前沿News

Hoo 虎符交易所 研究院 tezos

透过「人月神话」,看清软件开发问题

架构精进之路

软件开发 人月神话 4月日更 4月月更

Improvements of Job Scheduler and Query Execution on Flink OLAP

Apache Flink

大数据 flink 编程 实时计算 OLAP

私有链还有未来吗?

CECBC

RabbitMQ 实现延时队列(订单定时取消为例)

Ayue、

Rabbit MQ 4月月更

北京市东城区赵海东副区长一行莅临博睿数据参观指导

博睿数据

Ribbon从入门到源码解析

李子捌

微服务 SpringCloud Ribbon

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