写点什么

事件架构和事件流

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

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

关注

评论

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

百度智能云实战——静态文件CDN加速

百度Geek说

后端 H5 移动开发

推出Amazon Kinesis Data Analytics Studio —— 与流数据快速交互

亚马逊云科技 (Amazon Web Services)

分析

模块7作业

panxiaochun

架构实战营

Linux之head命令

入门小站

Linux

在线JSON转toml工具

入门小站

工具

“你最崇拜的人是谁”,从面试问题看标杆学习法

编程江湖

面试题

如何在 K8s 集群中使用 Nocalhost 开发 APISIX Ingress

API7.ai 技术团队

Kubernetes 网关 Nocalhost Apache APISIX Ingress Controller

云小课|云小课带你快速掌握云数据迁移CDM

华为云开发者联盟

EI智能体 数据湖治理中心 云数据迁移 CDM

使用 Amazon Athena 做漏斗分析——实现更高效的数据湖检索

亚马逊云科技 (Amazon Web Services)

分析

读《思辨与立场》-08设计你的人生

wood

28天写作 批判性思维 思辨与立场

Go 的 golang.org/x/ 系列包和标准库包有什么区别?

AlwaysBeta

golang Go 语言

2021 InfoQ 写作平台年度优质企业号评选名单公布!

InfoQ写作社区官方

2021年度评选 热门活动

Amazon Redshift ML现已正式推出——使用SQL创建机器学习模型并通过您的数据进行预测

亚马逊云科技 (Amazon Web Services)

分析

通用数据保护条例的监管下,你的数据湖“断舍离”了吗?

亚马逊云科技 (Amazon Web Services)

分析

Vue.js关于响应式部分的优化

编程江湖

前端开发

​虚幻引擎5更新:头部工作室如何使用Perforce Stream实现虚幻升级

龙智—DevSecOps解决方案

虚幻引擎 虚幻引擎5 UE5

技术分享| 如何快速实现音视频在线通话

anyRTC开发者

音视频 语音通话 视频通话 呼叫邀请 离线推送

如何摆脱机房教师控制?

喀拉峻

网络安全 安全 信息安全 计算机

轻松搭建数据仓库,与FreeWheel一起“玩转”Amazon EMR

亚马逊云科技 (Amazon Web Services)

分析

大数据开发 Spark 模块之SparkSQL

@零度

大数据 spark Sparksql

在Amazon SageMaker上快速、灵活构建TensorFlow模型的在线推理服务

亚马逊云科技 (Amazon Web Services)

分析

借助Amazon EMR与外部KDC进行身份认证,有效集成业务场景

亚马逊云科技 (Amazon Web Services)

分析

直播预告丨和我们一起过圣诞吧!Hackathon 创意攻略等你查收

PingCAP

kafka的JavaAPI操作

编程江湖

大数据

能源互联,激荡十年

钛禾产业观察

能源互联网 新能源

面对持续不断生成的流数据—— Amazon Kinesis Data Analytics 实现及时分析与处理

亚马逊云科技 (Amazon Web Services)

分析

使用Amazon RDS for Oracle配合Oracle Active Data Guard建立托管的灾难恢复与只读副本

亚马逊云科技 (Amazon Web Services)

分析

体育锻炼的好处

Tiger

28天写作

Amazon Timestream 在车联网场景的典型应用和性能测试

亚马逊云科技 (Amazon Web Services)

分析

通过Amazon SageMaker与Amazon Step Functions实现机器学习的CI/CD 方案

亚马逊云科技 (Amazon Web Services)

分析

风云叱咤,尚硅谷云原生实战教程(下篇)发布

编程江湖

Java 开发

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