在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

事件架构和事件流

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

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

关注

评论

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

海阅优品致力打造新零售蓝海

Geek_116789

【写作群星榜】6.20~6.26 写作平台优秀作者 & 文章排名

InfoQ写作社区官方

写作平台 排行榜 热门活动

架构师训练营第四周学习总结

张明森

iOS 动画 - 窗景篇(三·完结)

柯烂

ios swift 动画 移动互联网 动效

了不起的 TypeScript 入门教程 [1.2 w字]

阿宝哥

Java typescript 大前端 Web

来了!8M/S+速度,Pdown复活!

程序员生活志

从0开始设计Flutter独立APP | 第二篇: 完整的国际化语言支持

渔子长

flutter 大前端

揭秘!中国人一定要知道的北斗卫星系统

程序那些事

北斗卫星 北斗系统 卫星定位 卫星授时 黑科技

深入浅出kubernetes之WorkQueue详解

博文视点Broadview

Kubernetes 源码分析 k8s 队列 延迟队列

一二线城市知名 IT 互联网公司名单(新版)

程序员生活志

互联网 IT 大厂

创新管理体系标准ISO56002介绍

涛哥 数字产品和业务架构

数字化转型 创新

软件架构语录

烟雨濛濛

对直播带货的一点思考

Neco.W

直播 直播带货

Dart vs Swift

柠檬水

swift dart

玩转Java8中的 Stream 之从零认识 Stream

Java小咖秀

学习 面试 stream java8 经验

告别静默式看房 融云音视频助力上海中原 App 上线 VR 带看服务

Geek_116789

架构师训练营第四周作业

张明森

一群龙舟划手 “拍了拍” 你:端午节安康~

博睿数据

重学 Java 设计模式:实战中介者模式「按照Mybatis原理手写ORM框架,给JDBC方式操作数据库增加中介者场景」

小傅哥

设计模式 小傅哥 代码优化 代码规范 中介者模式

为什么建议你使用枚举?

王磊

Java 枚举

IM聊天教程:发送图片/视频/语音/表情

GoEasy消息推送

websocket 即时通讯 聊天室 聊天

MySQL实战45讲笔记(1)

程序员老王

msyql

MySQL系列 - SQL查询与修改执行过程

俊俊哥

MySQL 性能优化 关系型数据库 存储

计算机操作系统基础(五)---Linux的进程管理

书旅

php 线程 多线程 操作系统 进程

如何学 Java,我说点不太一样的学习方式

四猿外

学习 程序员 个人成长

那些会阻碍程序员成长的细节[3]

MavenTalker

程序员 职业规划 职业成长

架构师训练营第四周作业

烟雨濛濛

限频/限流的一些思考

i风语

Java redis 微服务 sentinel ratelimiter

势能造就下的互联网大厂程序员为什么去开滴滴了?

非著名程序员

程序员 程序人生 提升认知

融云年中大促钜惠来袭 IM+RTC 超值套餐最低6折起

Geek_116789

ARTS - Week 4

Khirye

ARTS 打卡计划 arts

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