50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

事件架构和事件流

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

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

关注

评论

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

动手实践丨使用华为云IoT边缘体验“边云协同”

华为云开发者联盟

云计算 华为云 企业号十月 PK 榜

React的5种高级模式

夏天的味道123

React

Q3手机银行运营报告:直销银行江湖再起波澜,数字员工助力手机银行活跃度提升

易观分析

金融 手机银行

浅谈:数字资产永续合约交易所开发有什么好处?

W13902449729

合约交易所开发 区块链交易所开发

React组件设计模式-纯组件,函数组件,高阶组件

xiaofeng

React

音视频开发进阶|第六讲:色彩和色彩空间·下篇

ZEGO即构

音视频开发 色彩

【web 开发基础】通过模拟地铁售票系统介绍PHP 自定义函数之函数的参数-PHP 快速入门 (26)

迷彩

记录函数参数和返回值 参数列表 PHP基础 11月月更 函数参数

淄博教育局5G交互式教学项目获“绽放杯”一等奖 天翼云提供技术底座

天翼云开发者社区

元宇宙场景技术实践|实现“虚拟人”自由

ZEGO即构

React组件复用的技巧

夏天的味道123

React

React性能优化的8种方式

xiaofeng

React

热备与冷备的三大区别讲解-行云管家

行云管家

热备 冷备 双机热备

最近面试经常被问到的js手写题

helloworld1024fd

JavaScript

重磅!涛思数据发布TDengine PI连接器

TDengine

数据库 tdengine 时序数据库

React核心工作原理

xiaofeng

React

美团前端常考手写面试题(边面边更)

helloworld1024fd

JavaScript

走进 Orca 架构及技术世界

KaiwuDB

数据库·

深入浅出分布式,阿里大牛手写《分布式核心原理》Github一夜爆火

Java永远的神

分布式 程序人生 分布式计算 分布式系统 分布式存储

共筑使能千行百业的数字底座 | HDC 2022松湖对话顺利召开

OpenHarmony开发者

OpenHarmony

一本书,带你走出Spring新手村

博文视点Broadview

CIO们开始将软件供应链升级为安全优先级top

SEAL安全

DevOps 开源软件 软件供应链 SBOM 软件供应链安全

一种基于Prompt的通用信息抽取(UIE)框架

阿里技术

深度学习 信息抽取

Oracle、MySQL等数据库故障处理优质文章分享 | 10月文章汇总

墨天轮

MySQL 数据库 oracle 性能优化 故障恢复

想会用synchronized锁,先掌握底层核心原理

华为云开发者联盟

开发 华为云 企业号十月 PK 榜

阿里云Imagine Computing创新技术大赛正式开启!

阿里云CloudImagine

阿里云 技术大赛

用了1年的录屏软件被我含泪甩了,因为我发现了它

淋雨

python小知识-并发编程(3)

AIWeker

Python 人工智能 python小知识 11月月更

假如面试官要你手写一个promise

helloworld1024fd

JavaScript

React组件复用的发展史

夏天的味道123

React

哪些企业需要上云?上哪家好?

行云管家

云计算 云服务 企业上云

筑牢国产芯片软件生态,天翼云bcache解决方案来了!

天翼云开发者社区

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