作者:昶风

引言

CDC(Change Data Capture)指的是监听上游数据改变,并将改变信息同步到下流事务以供进一步处理的一种运用场景。近年来事情驱动架构(EDA)热度逐渐上升,日渐成为项目架构设计者的榜首挑选。EDA 天然符合 CDC 的底层根底架构,其将数据改变作为事情,各个服务经过监听自己感兴趣的事情来完结一些列事务驱动。阿里云 EventBridge 是阿里云推出的一款无服务器事情总线服务,能够协助用户轻松方便地树立根据 EDA 架构的运用。近期,EventBridge 事情流现已支撑了根据阿里云DTS [ 1] 服务的 CDC 才能。本文将从 CDC、CDC 在 EventBridge 上的运用以及若干最佳实践场景等方面,为大家介绍怎么运用 EventBridge 轻松构建 CDC 运用。

CDC 概述

根本原理与运用场景

CDC 从源数据库捕获增量的数据以及数据形式改变,以高牢靠、低延时的数据传输将这些改变有序地同步到方针数据库、数据湖或者其他数据剖析服务。现在业界干流的开源 CDC 东西包含Debezium [2 ] 、Canal [3 ] 以及Maxwell [4 ]

融合数据库生态:利用 EventBridge 构建 CDC 应用

图片来源:dbconvert.com

现在业界主要有以下几类 CDC 的完成:

1. 根据时刻戳或版本号

根据时刻戳的方法要求数据库表有一个字段代表更新时刻戳,当存在数据插入或更新时,对应时刻戳字段就会随之更新。CDC 组件周期性检索更新时刻大于前次同步时刻的数据记载,即可捕获本周期内数据的改变。根据版本号跟踪和根据时刻戳跟踪原理根本共同,要求开发者改变数据时有必要更新数据的版本号。

2. 根据快照

根据快照的 CDC 完成在存储层面运用到了数据源 3 份副本,分别是原始数据、先前快照和当前快照。经过比照 2 次快照之间的差异来获取这之间的数据改变内容。

3. 根据触发器

根据触发器的 CDC 完成方法事实上是在源表上树立触发器将对数据的改变操作(INSERT、UPDATE、DELETE)记载存储下来。例如专门树立一张表记载用户的改变操作,随后创立 INSERT、UPDATE、DELETE 三种类型的触发器将用户改变同步到此表。

4. 根据日志

以上三种方法都对源数据库存在必定侵入性,而根据日志的方法则是一种非侵入性的 CDC 方法。数据库运用事务日志完成灾备,例如 MySQL 的 binlog 就记载了用户对数据库的所有改变操作。根据日志的 CDC 经过持续监听事务日志来实时获取数据库的改变状况。

CDC 的运用场景广泛,包含但不限于这些方面:异地机房数据库同步、异构数据库数据同步、微服务解耦、缓存更新与 CQRS 等。

根据阿里云的 CDC 解决方案:DTS

数据传输服务 DTS(Data Transmission Service)是阿里云供给的实时数据流服务,支撑联系型数据库(RDBMS)、非联系型的数据库(NoSQL)、数据多维剖析(OLAP)等数据源间的数据交互,集数据同步、搬迁、订阅、集成、加工于一体。其间,DTS 数据订阅 [ 5 ] 功用能够协助用户获取自建 MySQL、RDS MySQL、Oracle 等数据库的实时增量数据。

融合数据库生态:利用 EventBridge 构建 CDC 应用

CDC 在EventBrige上的运用

阿里云 EventBridge 供给了事情总线 [6 ] 与事情流 [7 ] 2 款不同运用场景的事情路由服务。

事情总线底层具有事情的持久化才能,能够依照需求将事情路由到多个事情方针中。

事情流适用于端到端的流式数据处理场景,对源端发生的事情实时抽取、转化和剖析并加载至方针端,无需创立事情总线,端到端转储效率更高,运用更轻便。

为了更好地支撑用户在 CDC 场景下的需求,EventBridge 在事情流源端支撑了阿里云 DTS 的数据订阅功用,用户仅需简略装备,即可将数据库改变信息同步到 EventBridge 事情流。

融合数据库生态:利用 EventBridge 构建 CDC 应用

EventBridge 定制了根据 DTS sdk 的 DTS Source Connector。当用户装备事情供给方为 DTS 的事情流时,source connector 会实时地从 DTS 服务端拉取 DTS record 数据。数据拉取到本地后,会进行必定的结构封装,保存 id、operationType、topicPartition、beforeImage、afterImage 等数据,一起添加 streaming event 所需求的一些体系特点。

DTS Event 样例可参阅 EventBridge 官方文档

融合数据库生态:利用 EventBridge 构建 CDC 应用

EventBridge Streaming 确保了 DTS 事情的次序性,但存在事情重复投递的可能性,EventId 在确保了和每条 DTS record 的一一映射联系,用户可依据此字段来对事情做幂等处理。

创立源为 DTS 的 EventBridge 事情流

下面展现怎么在EventBridge控制台创立源为DTS的事情流

  • 前期预备
  1. 开通 EventBridge 服务;

  2. 创立 DTS 数据订阅使命;

  3. 创立用于消费订阅数据的消费组账号信息。

  • 创立事情流
  1. 登陆 EventBridge 控制台,点击左边导航栏,挑选“事情流”,在事情流列表页点击“创立事情流”;

  2. “根本信息”中“事情流称号”与“描述”依照需求填写即可;

  3. 在创立事情流,挑选事情供给方时,下拉框挑选“数据库 DTS”;

  4. 在“数据订阅使命”一栏中挑选已创立的 DTS 数据订阅使命。在消费组一栏,挑选要运用哪个消费组消费订阅数据,一起填写消费组暗码与初始消费时刻。

融合数据库生态:利用 EventBridge 构建 CDC 应用

  1. 事情流规则与方针依照需求填写,保存启动即可创立以 DTS 数据订阅为事情源的事情流。

融合数据库生态:利用 EventBridge 构建 CDC 应用

注意事项

运用时有以下几点需求注意:

  1. EventBridge 运用的是SUBSCRIBE 消费形式 [8 ] ,所以请确保当前 DTS 消费组没有其他客户端实例在运转。假如设置的消费组在之前有运转,则传入的位点失效,会根据此消费组前次消费过的位点继续消费;

  2. 创立 DTS 事情源时传入的位点仅在新消费组榜首次运转时起效,后续使命重启后会根据前次消费位点继续消费;

  3. EventBridge 事情流订阅 OperationType 为 INSERT、DELETE、UPDATE、DDL 类型的 DTS 数据;

  4. 运用 DTS 事情源可能会有音讯重复,即确保音讯不丢,但无法确保仅投递一次,主张用户做好幂等处理;

5.用户假如需求确保次序消费,则需求将反常忍受战略设置为“NONE”,即不忍受反常。在这种状况下,假如事情流方针端消费音讯反常,整个事情流将暂停,直至恢复方针端正常。

最佳实践示例

根据EventBridge 完成 CQRS

在 CQRS(Command Query Responsibility Segregation)模型中,指令模型用于履行写以及更新操作,查询模型用于支撑高效的读操作。读操作和写操作运用的数据模型存在必定差异,需求运用必定方法确保数据的同步,根据 EventBridge 事情流的 CDC 能够满足这样的需求。

根据云上服务,用户能够运用如下方法轻松构建根据 EventBridge 的 CQRS:

  1. 指令模型操作数据库进行改变,查询模型读取 elasticsearch 获取数据;

  2. 敞开 DTS 数据订阅使命,捕获 DB 改变内容;

3.装备 EventBridge 事情流,事情供给方为 DTS 数据订阅使命,事情接收方为函数计算 FC;

  1. FC 中的服务即为更新 elasticsearch 数据操作。

融合数据库生态:利用 EventBridge 构建 CDC 应用

微服务解耦

CDC 也能够用于微服务解耦。例如下文是一个电商渠道的订单处理体系,当有新建的未付款订单发生时,数据库会有一条 INSERT 操作,而当某笔订单状况由“未付款”变为“已付款”时,数据库会有一条 UPDATE 操作。根据订单状况改变的不同,后端会有不同的微服务来对此进行处理。

  1. 用户下单/付款,订单体系进行事务处理,将数据改变写入 DB;

  2. 新建 DTS 订阅使命捕获 DB 数据改变;

  3. 树立 EventBridge 事情流。事情供给方为 DTS 数据订阅使命,事情接收方为 RocketMQ;

  4. 在消费 RocketMQ 数据时,同一个 topic 下启用 3 个 group 代表不同的事务消费逻辑;

a. GroupA 将捕获到的 DB 改变用户缓存更新,便于用户查询订单状况;

b. GroupB 下流相关财务体系,仅处理新建订单,即处理 DB 操作类型为 INSERT 的事情,丢弃其余类型事情;

c. GroupC 仅关怀订单状况由“未付款”变为“已付款”的事情,当有符合条件事情到达时,调用下流物流、仓储体系,对订单进行进一步处理。

假如采用接口调用方法,那么用户在下单之后订单体系将分别需求调用缓存更新接口、新建订单接口以及订单付款接口,事务耦合性过高。除此之外,这种形式使得数据消费端不必忧虑上游订单处理接口回来内容的语义信息,在存储模型不变的状况下,直接从数据层面判别此次数据改变是否需求处理以及需求怎样的处理。一起,音讯队列天然的音讯堆积才能也能够协助用户在订单峰值到来时完成事务削峰填谷。

事实上,现在 EventBridge Streaming 支撑的音讯产品还包含 RabbitMQ、Kafka、MNS 等,在实际操作中用户能够根据自己的需求进行挑选。

融合数据库生态:利用 EventBridge 构建 CDC 应用

数据库备份&异构数据库同步

数据库灾备和异构数据库数据同步也是 CDC 重要的运用场景。运用阿里云 EventBridge 亦能够快速树立此类运用。

  1. 新建 DTS 数据订阅使命,捕获用户 MySQL 数据库改变;

  2. 树立 EventBridge 事情流,事情供给方为 DTS 数据订阅使命;

  3. 运用 EventBridge 在目的数据库履行指定 sql,完成数据库备份;

  4. 数据改变事情投递到函数计算,用户事务根据数据改变内容更新对应异构数据库。

融合数据库生态:利用 EventBridge 构建 CDC 应用

自建 SQL 审计

对于用户有自建 SQL 审计的需求,运用 EventBridge 也能够轻松完成。

  1. 新建 DTS 数据订阅使命,捕获数据库改变;

  2. 树立 EventBridge 事情流,事情供给方为 DTS,事情接收方为日志服务 SLS;

  3. 用户需求对 SQL 进行审计时,经过查询 SLS 进行。

融合数据库生态:利用 EventBridge 构建 CDC 应用

总结

本文介绍了 CDC 的一些概念、CDC 在 EventBridge 上的运用以及若干最佳实践场景。跟着支撑产品的不断添加,EventBridge 所承载的生态地图也不断扩大,从音讯生态到数据库生态,从日志生态到大数据生态,EventBridge 不断扩大其适用范畴,稳固云上事情纽带的位置,尔后也将依照这个方向继续发展,技术做深,生态做广。

参阅链接:

[1] DTS:

www.aliyun.com/product/dts

[2] Debezium:

debezium.io/

[3] Canal:

github.com/alibaba/can…

[4] Maxwell:

github.com/zendesk/max…

[5] DTS 数据订阅:

help.aliyun.com/document_de…

[6] 事情总线:

help.aliyun.com/document_de…

[7] 事情流:

help.aliyun.com/document_de…

[8] SUBSCRIBE 消费形式:

help.aliyun.com/document_de…

感兴趣的小伙伴们能够扫描下方二维码加入钉钉群讨论(群号:44552972)

融合数据库生态:利用 EventBridge 构建 CDC 应用

点击此处,进入 EventBridge 官网了解更多信息~