图文详解CDC技术,看这一篇就够了!

服务端思维

共 2763字,需浏览 6分钟

 ·

2022-03-10 03:19


点击上方“服务端思维”,选择“设为星标

回复”669“获取独家整理的精选资料集

回复”加群“加入全国服务端高端社群「后端圈」


作者 | Kirill
出品 | http://u6.gg/kpcw2

这篇文章是对变更数据捕获 (CDC) 实践的介绍,而不是对特定工具的深入探讨。

假设我们正在构建一个简单的 Web 应用程序。在大多数情况下,此类项目从最小的数据架构开始。例如,像 MySQL 或 PostgreSQL 这样的关系数据库足以处理和存储许多用户可以使用的数据。他们输入查询,更新它们,关闭它们,更正它们,通常会执行许多操作。它可以是 CRM、ERP、自动银行系统、计费系统,甚至是 POS 终端,应有尽有。

但是,存储在数据库中的信息可能会引起许多第三方系统的兴趣,通常是分析系统。企业需要了解存储在该系统中的应用程序或其他实体的状态——账户、存款、制造、人力资源等。数据几乎在每项业务运营中都发挥着重要作用。因此,企业会定期生成报告,这些报告反映了企业感兴趣的所有主要指标,并且是做出进一步管理决策所必需的。

报告和分析计算通常非常消耗资源。查询可能需要数小时才能完成,这通常会严重影响从中检索数据的系统的性能。另一个缺点是发送所有这些数据会给网络带来很大压力。最后,基于该数据的业务决策由于查询频率而延迟。所以,如果你每晚更新数据,那意味着你要到第二天才能知道昨天发生了什么。

如果系统有一个明确的负载减少时间段(例如在夜间),并且这段时间足以卸载所有必要的数据而不影响系统的主要活动——那么使用对 RDBMS 的直接查询可能是一个可以接受的选项。但是,如果没有减少负载的时期,或者分配的负载窗口不足以完全卸载整个更改的数据怎么办?

在这里 CDC 流程来救援。顾名思义,变更数据捕获只会捕获数据中的变化,这是复制数据的 ETL 模式之一。它是一种确定我们感兴趣的数据的机制,即跟踪源数据库中的更改并将其应用于目标数据库或数据仓库。并且在目标数据库或数据仓库中,我们可以进行所有类型的分析、报告生成等,甚至不会影响源数据库的性能。

因此,用户可以在不降低性能的情况下使用原始系统,并且管理层可以随时获取他们做出管理决策所需的报告。

CDC

因此,CDC 的本质——通过捕获数据操作语言 (DML) 更改(插入/更新/删除)的事实和更改的数据本身来为用户表提供历史更改信息。CDC 以可以在上游数据系统中复制的形式提取它们。用行话来说,这样的数据也被称为“delta”。

您可以将 CDC 视为一种机制,它不断监控原始数据系统的更改、提取它们并将它们分发到上游系统。Change Data Capture 通过近乎实时地实现数据的增量加载,排除了批量数据加载的过程。

那么,使用CDC如何解决我们提到的问题呢?

好吧,您没有定期运行非常大的请求,因为您的负载率实际上是峰值负载行为不会高的,因此,您必须执行网络以确保及时发送您想要的所有数据,而不是发送所有这些数据并最终因为数据是连续发布的,而且是为了小规模的数据,您可以通过多个数据泄露更多的网络正常运作,并且显着地展示您的工作成果,让您有不同的业务范围。将数据发送到您的数据仓库更新,因此仓库中的数据是最新的,这是为了提供实时信息,以便根据数据业务决策。

变更数据操作数据中心是您最好的数据存储方式。


提取增量

在分析也是仓库、CRM、MDM hub、灾难时间、提取事务的“delta”是它创建系统的架构任务,当有一段时间的并行操作时,迁移从一个系统的数据项目中的人常有任务交给另一个。

在早期,增量知道我们现在的整个问题列表更新了。将成为一个潜在的可能的结果,并且您可能会遗弃一些数据。

为了确保任何遗失这些数据,但工程师还尝试了对行进行控制,并得出了大致相同的结果——它可以工作,但它非常资源。不到。

所有的问题都随着简单的出现而得到解决。

是数据库中的一种特殊过程。示例过程的特殊性类型,每次数据库中的事件发生后,在示例中的 SQL 示例中的简单示例被执行。

所以,我们需要一个简单的表来跟踪所有的更改,以便为每个创建对象创建一个表,该表将用于更改。

但也有一个类——尽管现在表中的数据有任何变化,简单简单但一些CDC产品仍然基于简单。


CDC的现代方法

我们可以回想一下,数据库实际上是事务性的,并且具有类似的数据库日志(也称为数据库事务日志或事务日志)之类的功能。几乎所有管理系统都有事务日志文件,记录每个事务在我们需要做访问事务日志的所有数据库并选择我们想要跟踪的更改。

因此,在 CDC 中,更改是使用从事务中读取更改的,并且会在相应的更改表中设置管理员的过程中通过管理员的。

日志的更改部分是我们正确设置的这些事务并跟踪实际过去的更改。将它们应用到目标。

现代读取事务处理在独立服务器的内存中进行系统处理,突出需要远程更改这些更改此类型的通知显示,系统的架构不,并提供了令人印象深刻的源代码,能够跟踪数据发生的变化变化的预测目标。


生产就绪的CDC系统

要制造一个之前需要生产的CDC系统,除了提取之外,我们在一个系统考虑问题:

  1. 必须按照发生的变化,否则系统可能会出现的不同状态;

  2. 在传递方面,传递保证是的,因此,CDC 必须至少传递一次及时通知消息,如果后续系统交付了一个变更事件,则可能导致整个系统的状态;

  3. 最后,简单的消息转换,因为必须支持不同系统的数据格式可能。

系统的所有消息都报道了——所有消息源对更改源/订阅的消息进行更改,源源不断地将系统监听到系统目标对象,然后在更改消息这些对象时,都可以在更改消息的范围内。时使用它们。

该解决方案提供了许多好处,扩展性。订阅方法允许主要消息来源/可以向目标系统发送更多的更新,并且可以相应地扩展此用户的数量,以便在需要时使用地处理数据。

第二个想要的好处是两个系统现在连接了。如果源系统更改其数据库或将特定数据集移动到其他位置,则目标不需要使用像解拉系统那样进行更改。只要源系统继续以相同的格式将消息就不会继续接收到系统更新消息,而显示源已更改任何内容。

— 本文结束 —


● 漫谈设计模式在 Spring 框架中的良好实践

● 颠覆微服务认知:深入思考微服务的七个主流观点

● 人人都是 API 设计者

● 一文讲透微服务下如何保证事务的一致性

● 要黑盒测试微服务内部服务间调用,我该如何实现?



关注我,回复 「加群」 加入各种主题讨论群。



对「服务端思维」有期待,请在文末点个在看

喜欢这篇文章,欢迎转发、分享朋友圈


在看点这里
浏览 79
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报