写点什么

事件架构和事件流

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

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

关注

评论

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

数据总量 40 亿+,报表分析数据 10 亿+,TiDB 在中通的落地与进化

TiDB 社区干货传送门

实践案例

Chaos Mesh® 在腾讯——腾讯互娱混沌工程实践

TiDB 社区干货传送门

实践案例

云集财务业务 TiDB 实践

TiDB 社区干货传送门

实践案例 数据库架构选型

58同城大规模TiDB运维漫谈

TiDB 社区干货传送门

安装 & 部署

事务前沿研究丨事务测试体系解析

TiDB 社区干货传送门

TiDB 底层架构

TiDB 4.0 生产环境扩容 TiKV 节点详细步骤

TiDB 社区干货传送门

【TUG 话题探讨 005】TiDB 生态工具(DM、TiCDC等)使用场景及常见问题

TiDB 社区干货传送门

tidb中的key和MVCC value解析

TiDB 社区干货传送门

管理与运维

PD 如何调度 Region

TiDB 社区干货传送门

TiDB 底层架构

地产TiDB使用初探索

TiDB 社区干货传送门

安装 & 部署

Zetta:HBase 用户的新选择 —— 当知乎遇上 TiDB 生态

TiDB 社区干货传送门

实践案例

通过label调度副本测试

TiDB 社区干货传送门

内存泄漏的定位与排查:Heap Profiling 原理解析

TiDB 社区干货传送门

故障排查/诊断

TiDB 5.0 两阶段提交

TiDB 社区干货传送门

TiDB 底层架构

TiDB 如何做到无限扩展和保证节点 id 唯一

TiDB 社区干货传送门

TiDB 底层架构

涂鸦智能选型 TiKV 的心路历程

TiDB 社区干货传送门

数据库架构选型

带你重走 TiDB TPS 提升 1000 倍的性能优化之旅

TiDB 社区干货传送门

性能调优

TiDB 4.0 基于 Binlog 的跨机房集群部署

TiDB 社区干货传送门

安装 & 部署

我们为什么放弃 MongoDB 和 MySQL,选择 TiDB

TiDB 社区干货传送门

数据库架构选型

TiDB5.0.3-ARM平台性能测试

TiDB 社区干货传送门

安装 & 部署

基于TiCDC 实现的双云架构实践

TiDB 社区干货传送门

实践案例

TIDB监控报警对接企业微信的简便工具推荐

TiDB 社区干货传送门

监控

技术升级&行业升级 TiDB 助力易车打造超级汽车狂欢节

TiDB 社区干货传送门

同城双中心自适应同步方案 —— DR Auto-Sync 详解

TiDB 社区干货传送门

TiDB HTAP 上手指南丨添加 TiFlash 副本的工作原理

TiDB 社区干货传送门

TiDB 性能测试最佳实践

TiDB 社区干货传送门

数据库架构选型

【TUG 话题探讨004】对 TiDB 的爱恨之情!

TiDB 社区干货传送门

做出让人爱不释手的基础软件:可观测性和可交互性

TiDB 社区干货传送门

数据引擎助力车娱融合新业态 让秒杀狂欢更从容

TiDB 社区干货传送门

TiDB 监控整合方案

TiDB 社区干货传送门

实践案例

通过 ProxySQL 在 TiDB 上实现 SQL 的规则化路由

TiDB 社区干货传送门

管理与运维

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