当今的企业,尤其是那些已将数字化转型置于优先地位的企业,需要接近实时的数据。每周和每月的批处理已不再适用。然而,从多种来源获取实时数据以自动化流程并做出动态优化决策并非易事。
最近,在为客户重新架构遗留系统并将单体架构拆分为微服务时,我们面临了这个特定的挑战。我们开始为新架构更改数据库,并按模块对系统进行现代化改造。在此阶段,我们需要让两个数据库保持同步,因为不同的模块可能需要相同的数据 — 换句话说,旧系统需要新数据库中新系统生成的数据,反之亦然。
我们探索了变更数据捕获(CDC)来看它是否能实现这一目标。本文深入探讨了CDC的概念、我们探索过的工具、它们的工作原理以及它们的好处。我们还提供了一些例子和建议,指导其他技术人员如何为其特定用例选择合适的CDC工具。
什么是变更数据捕获?
变更数据捕获是检测和捕获源系统(通常是数据库)中的变更,并将这些变更以几乎实时的方式传递到目标系统的过程。这些变更可以是插入、删除、更新以及通过DDL进行的数据库结构更改等。
变更数据捕获工具的工作原理
CDC工具通过持续监控源系统中的数据变更来工作。每当检测到变更时,它会将其捕获并记录到一个单独的位置,比如数据库、日志文件,或发送到消息代理。然后捕获的数据经过处理、转换并加载到目标系统,比如数据仓库、分析平台或另一个数据库中。
有多种捕获数据库变更的方法。让我们来看看其中的一些:
1.基于时间戳/查询的
在这种方法中,我们在源中维护类似于CREATED_AT、LAST_UPDATED或DATE_MODIFIED的审计列,并查询源中的数据以根据这些列中的变更来捕获任何变化。需要注意的是,这种方法无法捕获删除操作。
2.基于触发器的
触发器是根据数据库中发生的特定事件执行用户定义操作的函数。这可用于捕获数据库中的任何变更,包括删除操作。然而,这种方法会降低数据库性能,因为每次事件发生时都需要多次写入。
3.基于日志的
数据库包含用于在崩溃时进行恢复的事务日志(或重做日志),它存储了所有事件。通过基于日志的CDC,新数据库事务是从其本机日志中读取的。这种方式可以捕获变更,而无需扫描源表,因此比其他两种方法更有效。
这种方法类似于事件驱动架构中的事件溯源,每当系统状态发生变化时,我们将其记录为一个事件。记录的事件可以通过以相同的顺序重播来随时重建系统状态。
为什么使用CDC?
根据情况、应用程序、架构和业务需求,CDC在许多场景下都是至关重要的。以下是CDC有助于工程过程的一些方式:
- 实时数据可用性:CDC工具以几乎实时的方式捕获变更,确保最新的数据可用于分析、报告或进一步处理。
- 更快的决策制定:CDC有助于减少捕获和数据可用性之间的延迟,实现更快的分析和决策制定。
- 高效的数据集成:CDC工具有助于从多个操作源捕获数据,并将其转换为单一目标数据库或数据湖中的通用格式。
- 目标数据库的定制设计:CDC提供跨功能的好处,比如在CQRS系统中创建只读搜索或查询数据库、创建审计数据库,或在数据仓库中捕获数据。它允许将非功能性和架构需求与主要数据存储解耦。
- 简化的数据迁移:在我们的情况下,CDC有助于在现代化阶段维护遗留和新数据库之间的数据一致性。这也适用于其他各种数据迁移场景。
如何选择合适的CDC工具?
市场上有几种CDC工具,比如Oracle Golden Gate、Debezium、IBM Infosphere、Striim、StreamSets和Qlik Replicate。这些工具可以是开源的或付费的。它们通常支持本地和云环境,并能处理各种数据源。在选择时,考虑以下几点:
- 与数据源的兼容性:至少,您选择的工具必须与您想要捕获变更的所有数据源兼容。
- 实时数据捕获:工具应该以几乎实时的方式捕获变更,以便您能够使用最新的数据。
- 数据转换和集成:CDC工具应该能够处理从源到目标数据类型的数据转换。
- 价格:CDC工具必须对您的用例具有成本效益。有开源、付费和许可产品可供选择。
- 使用便捷性和支持:工具应该对您的团队易于使用,并提供充分的支持,包括全面的文档和技术支持。
- 其他功能:根据您的需求,您可能还想检查其他特定功能,比如源和目标之间的双向同步和云支持。
随着企业变得以技术为驱动,历史和当前的数据将成为一个至关重要的差异化因素。实现精确、及时、高效和具有成本效益的变更数据捕获将成为任何技术转型计划的重要组成部分。当您面临这种情况时,希望本文能对您有所帮助。