关于阿里云:融合数据库生态利用-EventBridge-构建-CDC-应用

38次阅读

共计 4482 个字符,预计需要花费 12 分钟才能阅读完成。

作者:昶风

引言

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 ]

图片起源:https://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 等数据库的实时增量数据。

CDC 在 EventBrige 上的利用

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

事件总线底层领有事件的长久化能力,能够依照须要将事件路由到多个事件指标中。

事件流实用于端到端的流式数据处理场景,对源端产生的事件实时抽取、转换和剖析并加载至指标端,无需创立事件总线,端到端转储效率更高,应用更轻便。

为了更好地反对用户在 CDC 场景下的需要,EventBridge 在事件流源端反对了阿里云 DTS 的数据订阅性能,用户仅需简略配置,即可将数据库变更信息同步到 EventBridge 事件流。

EventBridge 定制了基于 DTS sdk 的 DTS Source Connector。当用户配置事件提供方为 DTS 的事件流时,source connector 会实时地从 DTS 服务端拉取 DTS record 数据。数据拉取到本地后,会进行肯定的构造封装,保留 id、operationType、topicPartition、beforeImage、afterImage 等数据,同时减少 streaming event 所须要的一些零碎属性。

DTS Event 样例可参考 EventBridge 官网文档

EventBridge Streaming 保障了 DTS 事件的程序性,但存在事件反复投递的可能性,EventId 在保障了和每条 DTS record 的一一映射关系,用户可根据此字段来对事件做幂等解决。

创立源为 DTS 的 EventBridge 事件流

上面展现如何在 EventBridge 控制台创立源为 DTS 的事件流

  • 后期筹备
  1. 开明 EventBridge 服务;
  2. 创立 DTS 数据订阅工作;
  3. 创立用于生产订阅数据的生产组账号信息。
  • 创立事件流
  1. 登陆 EventBridge 控制台,点击左侧导航栏,抉择“事件流”,在事件流列表页点击“创立事件流”;
  2. “根本信息”中“事件流名称”与“形容”依照须要填写即可;
  3. 在创立事件流,抉择事件提供方时,下拉框抉择“数据库 DTS”;
  4. 在“数据订阅工作”一栏中抉择已创立的 DTS 数据订阅工作。在生产组一栏,抉择要应用哪个生产组生产订阅数据,同时填写生产组明码与初始生产工夫。
  1. 事件流规定与指标依照须要填写,保留启动即可创立以 DTS 数据订阅为事件源的事件流。

注意事项 

应用时有以下几点须要留神:

  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 数据操作。

微服务解耦

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 等,在实际操作中用户能够依据本人的须要进行抉择。

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

数据库灾备和异构数据库数据同步也是 CDC 重要的利用场景。应用阿里云 EventBridge 亦能够疾速搭建此类利用。

  1. 新建 DTS 数据订阅工作,捕捉用户 MySQL 数据库变更;
  2. 搭建 EventBridge 事件流,事件提供方为 DTS 数据订阅工作;
  3. 应用 EventBridge 在目标数据库执行指定 sql,实现数据库备份;
  4. 数据变更事件投递到函数计算,用户业务依据数据变动内容更新对应异构数据库。

自建 SQL 审计

对于用户有自建 SQL 审计的需要,应用 EventBridge 也能够轻松实现。

  1. 新建 DTS 数据订阅工作,捕捉数据库变更;
  2. 搭建 EventBridge 事件流,事件提供方为 DTS,事件接管方为日志服务 SLS;
  3. 用户须要对 SQL 进行审计时,通过查问 SLS 进行。

总结

本文介绍了 CDC 的一些概念、CDC 在 EventBridge 上的利用以及若干最佳实际场景。随着反对产品的一直减少,EventBridge 所承载的生态幅员也不断扩大,从音讯生态到数据库生态,从日志生态到大数据生态,EventBridge 不断扩大其实用畛域,坚固云上事件枢纽的位置,尔后也将依照这个方向持续倒退,技术做深,生态做广。

参考链接:

[1] DTS:

https://www.aliyun.com/produc…

[2] Debezium:

https://debezium.io/

[3] Canal:

https://github.com/alibaba/canal

[4] Maxwell:

https://github.com/zendesk/ma…

[5] DTS 数据订阅:

https://help.aliyun.com/docum…

[6] 事件总线:

https://help.aliyun.com/docum…

[7] 事件流:

https://help.aliyun.com/docum…

[8] SUBSCRIBE 生产模式:

https://help.aliyun.com/docum…

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

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

正文完
 0