DBLog:一种基于水印的变更数据捕获框架
数据库
2020-10-27 v1
摘要
应用程序使用多个异构数据库是一种常见模式,其中每个数据库用于满足特定需求,例如存储数据的规范形式或提供高级搜索能力。因此,应用程序希望保持多个数据库的同步。我们观察到一系列试图解决该问题的不同模式,例如双写和分布式事务。然而,这些方法在可行性、鲁棒性和可维护性方面存在局限。近来出现的一种替代方法是利用变更数据捕获(CDC)从事务日志中捕获变更行,并最终以低延迟将其传送到下游。为解决数据同步问题,还需要复制数据库的完整状态,而事务日志通常不包含完整的变更历史。同时,存在一些用例要求事务日志事件的高可用性,以使数据库尽可能保持紧密同步。为应对上述挑战,我们开发了一种用于数据库的 novel CDC框架,即DBLog。DBLog利用基于水印的方法,使我们能够将事务日志事件与直接从表中选择的行交错,以捕获完整状态。我们的方案允许日志事件在处理选择时持续推进而不停滞。选择可在任意时间对所有表、特定表或表中特定主键触发。DBLog以分块方式执行选择并跟踪进度,使其可暂停和恢复。水印方法不使用锁,对源端影响最小。DBLog目前由Netflix的数十个微服务在生产环境中使用。
引用
@article{arxiv.2010.12597,
title = {DBLog: A Watermark Based Change-Data-Capture Framework},
author = {Andreas Andreakis and Ioannis Papapanagiotou},
journal= {arXiv preprint arXiv:2010.12597},
year = {2020}
}
备注
6 pages