PolarDB-X 2.0 全局 Binlog 和备份恢复能力解读

简介: PolarDB-X 2.0 针对数据孤岛问题提供了全局 Binlog 能力,该能力为下游生态提供了与 MySQL Binlog 完全一致的增量日志消费体验。针对数据损坏问题提供了实例级、表级、SQL 级和行级等不同粒度的数据恢复能力,包括一致性备份恢复、表回收站、SQL 闪回、Flashback Query 等。

背景

我们作为开发者都了解或熟悉后台系统,后台系统可以抽象为两个组成部分:一个是业务系统,该部分负责处理系统的业务逻辑,在现代化的架构中,该部分通常设计成可水平扩展的无状态节点;另一个是数据库系统,该部分负责存储系统的状态,这其中便包括最核心的业务数据。
站在数据库的视角,数据的流入包括两个部分,一个是业务系统的实时写入,这是核心数据来源的主要部分;另一个是从上游数据系统一次性或周期性导入的数据。因为这些核心数据在这里首次产生,所以这个数据库也被称为 SSOT(Single Source of Truth)。

SSOT 是后台系统中最重要的数据资产,那么随之便产生两个问题需要妥善处理。第一个问题是,作为最重要的资产,通常我们需要将这些数据实时同步到其他系统进行 BI 分析等进一步的处理,如果没有这样的实时同步机制,那么这份数据将成为数据孤岛。第二个问题是,这份数据可能因为各种原因遭到破坏,比如硬件故障或软件 Bug 导致的数据损坏、不当操作引起的数据损坏、错误 SQL 引起的数据错乱等,提供多种机制保障这份数据的安全显得非常必要。

全局 Binlog

PolarDB-X 是一款高度兼容 MySQL 生态的分布式数据库产品,所以我们首先来看下 MySQL 是如果解决数据孤岛问题的。

从 DB-Engines 排行榜可以看出,MySQL 的流行度比其他开源数据库的总和还要高,这意味着 MySQL 的生态非常繁荣,比如 MySQL 的下游系统有 Kafka、MySQL 备节点、Canal 多种数据同步工具、Pulsar 等等。MySQL 通过 Binlog 机制实现了与下游系统的实时增量数据同步。Binlog 可以看做是一个消息队列,队列中按顺序保存了 MySQL 中详细的增量变更信息,通过消费这个队列,下游系统或工具实现了与 MySQL 的实时数据同步,这样的机制也称为 CDC(Change Data Capture),即增量数据捕捉。

分布式数据库提供 CDC 能力相对于单机有更高的复杂度。一个分布式数据库通常包含多个节点,这些节点会产生多个增量日志队列,那么下游如果要消费多个队列会涉及几个问题。

  1. 因为是多个队列,那么下游消费时多个队列内变更事件的顺序如何确定?
  2. 分布式事务的变更可能涉及多个队列,如果要保证消费时事务的完整性,那么如何发现并合并同一个事务的变更事件?
  3. 系统发生了扩缩容(也就是队列的增减)下游如何正确处理?
  4. DDL 会涉及多个队列,下游如何精确识别出每个队列 Schema 变化前后的位置并协调好消费进度?

面对这些问题,分布式数据库的 CDC 能力需要在实现难度、支持特性、易用性等方面做 trade-off。通常来说,给下游提供多个队列、不保障事务完整性仅提供最终一致性、提供自定义格式的增量日志是一种较易实现的方案,但该方案会对下游消费提出更高的要求,比如要开发相应的消费代码或工具、需要考虑多个队列的协同问题等。一种体验更友好的方式是,通过提供与 MySQL Binlog 完全一致体验的 CDC 能力,让下游可以像消费 MySQL Binlog 一样透明的消费分布式数据库的增量变更,从而极大降低数据同步链路的搭建成本,这也是 PolarDB-X 2.0 采用的方案,我们称为全局 Binlog。

PolarDB-X 2.0 采用的是可水平扩展的 Share-Nothing 架构,系统基本组成单位是节点(即 Node),每个节点又可分为计算节点(即CN)和数据节点(即DN)两个部分。如上图所示,为提供全局 Binlog 能力,PolarDB-X 2.0 在此基础上增加了 CDC 组件,CDC 是一个具备弹性能力的集群。

全局 Binlog 的生成过程可分为三个阶段:

  1. CDC 组件从每个 DN 拉取其增量日志,也就是物理 Binlog,之后进行单队列排序、内部事件过滤、DDL 相关的整形等操作,以便为下一阶段提供一个“干净”的增量事件队列,同时若系统发生了扩缩容,CDC 组件会在该阶段自动感知并做相关处理;
  2. CDC 组件将所有“干净”的增量事件队列进行合并,期间会对属于同一分布式事务的事件进行合并,并会根据事务时间戳进行全局排序,这样便得到一个全局有序的保障事务完整性的事件队列,同时该阶段还会处理好 DDL 在队列中的位置。之后 CDC 组件会将该队列生成兼容 MySQL Binlog 格式的文件,即全局 Binlog 文件;
  3. CN 组件在收到下游订阅全局 Binlog 请求后,会按照 MySQL DUMP 协议将全局 Binlog 发送给下游消费。

经过上面三个阶段,PolarDB-X 2.0 实现了完全兼容 MySQL Binlog 的全局 Binlog 能力。如果对详细的实现原理感兴趣,欢迎关注我们的知乎专栏《PolarDB-X 知乎专栏》。

备份恢复

对于数据损坏问题,PolarDB-X 2.0 提供不同粒度的数据恢复能力,包括实例级的一致性备份恢复能力、表级的表回收站能力、SQL 级的 SQL 闪回能力、行级的 Flashback Query 能力等。下面分别介绍这四项能力的特点和使用场景。

一致性备份恢复

首先来看下一致性备份恢复,该能力的特点是可以提供实例级任意时间点的历史数据恢复能力,这个时间点可以精确到秒级。


单机数据库中,可以认为全量数据和增量日志都存储在一台机器上,实现一致性备份和恢复的话,只需要将全量数据和增量日志备份就好。分布式数据库中若要做到一致性备份恢复,因为全量数据和增量日志都存储在多台机器上的缘故,实现上会有额外的复杂度。


PolarDB-X 2.0 中通过将所有 DN 做全量备份+全局 Binlog 的方式实现了一致性备份恢复能力。
以上图为例,比如我们有一个 PolarDB-X 2.0 实例每周一、周二和周五的零点进行备份,某天产生一个需求,需要将数据恢复到周日的 14:25:26,那么我们的系统会选择离恢复点最近的一个全量备份集---- 也就是周五零点点这份,并从周五零点开始重放全局 Binlog,直到周日 14:25:26 结束,这样我们便得到了想要的快照。


PolarDB-X 2.0 的一致性备份恢复能力备份期间不会锁库,该能力依赖全局 Binlog,也就是可恢复的区间是全局 Binlog 的保存区间。该能力目前有几个限制,比如备份期间不能进行扩缩容、仅支持同构恢复等。

表回收站

PolarDB-X 2.0 提供的第二项数据恢复能力叫做表回收站。顾名思义,我们会将 DROP 的表临时放入一个回收站,若两小时内发现需要恢复该表,那么可以在回收站中找回。
表回收站提供了完整的管理功能,比如查看回收站中所有的表、彻底删除某张表、恢复某张表等。回收站目前仅缓存两小时内删除的表,并且不支持找回通过 TRUNCATE TABLE 删除的表。

SQL 闪回(即将上线)

PolarDB-X 2.0 提供的第三项数据恢复能力叫做 SQL 闪回。该能力可精确恢复一条误操作 SQL 影响的数据。PolarDB-X 1.0 中同样提供了该能力,上线以来,该能力帮助众多误删数据的用户找回了数据,是一项被广泛认可的数据恢复能力。下面我们以一个例子来介绍这项能力的具体使用过程。


如上图所示,在 T1 时我们想把职位是 "Developer" 名字是 "Ralph" 的记录删掉,但 WHERE 条件中忘了加 "name='Ralph'" ,导致名字为 "Mary" 的记录被一同删掉了。这两个删除事件以及对应 SQL 的 ID 会被记录在全局 Binlog 中。


T2 时,我们发现了误删问题,并通过 PolarDB-X 的审计功能找到了对应的 SQL 和 ID。


T3 时,我们通过 SQL ID 和 SQL 闪回能力生成了恢复 SQL。SQL 闪回的原理是,在拿到 SQL ID 后,通过在全局 Binlog 中进行搜索,找到该 SQL 对应的所有变更事件(此处为两个删除事件),并逐个生成逆向恢复 SQL。


T4 时,我们将恢复 SQL 执行后得到了被误删的两条数据。


SQL 闪回针对 SQL 误操作场景可提供精确的数据恢复能力,可以看出,能够恢复的时间区间依赖于全局 Binlog 的保存区间。

Flashback Query(即将上线)

PolarDB-X 2.0 提供的第四项数据恢复能力叫做 Flashback Query。该能力可提供一定时间范围内行级的数据精确恢复能力。下面我们仍以 SQL 误操作场景为例。


如上图所示,T1 时我们想把职位是 "Developer" 名字是 "Ralph" 的记录职位更新为 "CTO",但 WHERE 条件中忘了加 "name='Ralph'",导致所有职位是 "Developer" 的记录都被更新成了 "CTO"。这些变更都会记录在版本为 Vn+1 的 undo log 中(undo log 是数据库中的一个基础数据结构,里面详细的记录了每行数据的变更内容,可简单类比成 GIT commit log)。


T2 时,我们马上发现了误改问题并确定了误操作时间和影响的数据范围。


T3 时,我们通过 Flashback Query 能力直接查到了被影响的两行记录在 T1 时刻正确的值。


T4 时,我们根据 Flashback Query 返回的正确值对数据进行了订正。


可以看出,Flashback Query 能力依赖 undo log 的保存时长。与 SQL 闪回相比,该能力可提供更快速、精确到行级的恢复能力,但 undo log 通常不如全局 Binlog 保存的时间长,所以可恢复区间上弱于 SQL 闪回。

总结

PolarDB-X 2.0 针对数据孤岛问题提供了全局 Binlog 能力,该能力为下游生态提供了与 MySQL Binlog 完全一致的增量日志消费体验。针对数据损坏问题提供了实例级、表级、SQL 级和行级等不同粒度的数据恢复能力,包括一致性备份恢复、表回收站、SQL 闪回、Flashback Query 等。PolarDB-X 2.0 还在持续打造更多产品能力,敬请期待~

原文链接

本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/513124.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

友盟+《小程序用户增长白皮书》:从五个角度入手分析小程序数据

简介: 近日,国内领先的全域数据智能服务商——友盟,发布了《友盟U-APM 移动应用性能体验报告》。据悉,友盟于去年将原移动分析U-App错误分析模块正式升级为U-APM应用性能监控平台,经过近一年的观察,通过DEM…

html提现页面模板,提现记录.html

提现记录$axure.utils.getTransparentGifPath function() { return resources/images/transparent.gif; };$axure.utils.getOtherPath function() { return resources/Other.html; };$axure.utils.getReloadPath function() { return resources/reload.html; };…

有赞九周年,打造技术生态,与开发者一起投身新零售浪潮

编辑 | 宋慧 11月28日,在有赞九周年生态大会有赞云分会场上,有赞宣布全面升级“ONE战略”,将与生态内众多的品牌商、软件厂商,从“产品融合”,“销售联动”,“经验共享”和“资本合作”四个维度实一起共建“…

“控本焦虑”的工程企业 用钉钉宜搭找到了低成本数字化的“捷径”

简介: 上海致拓软件有限公司利用云钉低代码应用构建平台——钉钉宜搭为合安建筑快速、低成本地搭建了个性化的项目管理系统,着力帮助合安建筑解决业务在线场景,形成场景化的工程项目管理数字化解决方案。 一封由工程公司发给项目管理数字化实…

如何做好一场技术演讲?

简介: 据心理学调查,在人们感到最恐惧的事情里,死亡排名第二,而“公开演讲”排名第一!那么作为一个演讲新人,为了可以不丢人的做好演讲,都需要做哪些准备呢? 作者 | 竹涧 来源 | 阿里…

汇聚技术与能力,共绘区块链远大蓝图!

进入数字经济时代,云已成为数字经济的一个最重要的基础设施。区块链,作为跨产业数字生态的连接器,是数字经济时代另一个重要的基础设施。云链结合,让技术助力传统产业升级,重塑信任关系。11月30日,移动云区块链开发者论…

python代码300行程序_python小工具,15行代码秒出工资条

公司工资条经常使用Excel制作,但是每个月都要做一遍,能不能用python写个程序自动化完成这想工作?当然可以,而且只是分分钟的事! 先来看看原始数据是什么样子: 最后做成的效果:使用Excel每次都需要手动修改一…

全链路压测体系建设方案的思考与实践

简介: 在阿里淘宝双11 的过程中,长期以来都是在生产环节做全链路压测的,通过实践我们发现在生产环境中做压测,实际上会和一个 IT 组织的结构、成熟度、流程等紧密相关,所以我们把全链路压测从简单的制作范围内脱离出来…

工业互联网标识解析企业节点_丰尚公司获批建设国家工业互联网标识解析二级节点...

11月12日,从江苏省工业和信息化厅获悉,丰尚公司获批建设国家工业互联网标识解析二级节点!本次获批的节点是:丰尚云行业工业互联网标识解析二级节点,主要应用于饲料、粮油、食品加工等领域。依托丰尚公司行业多年来智能…

低代码发展系列专访之三:低代码平台会成为企业数字化基础设施么?

话题: 低代码专访前言:2019年开始,低代码爆火。有人认为它是第四代编程语言,有人认为它是开发模式的颠覆,也有人认为是企业管理模式的变革……有很多声音,社区讨论很热烈。CSDN随后展开低代码平台产品系列活…

Flink+Hologres亿级用户实时UV精确去重最佳实践

简介: FlinkHologres亿级用户实时UV精确去重最佳实践 UV、PV计算,因为业务需求不同,通常会分为两种场景: 离线计算场景:以T1为主,计算历史数据实时计算场景:实时计算日常新增的数据&#xff0…

如何评估Serverless服务能力,这份报告给出了40条标准

简介: 如今,已经有评测机构给出了40条标准来对Serverless的服务能力进行评估,这些评估细则既是技术生态繁荣发展的一种表现,也可以作为新进入者评估Serverless落地成效的一种参考依据。 编者按:两年前,我们…

Redis 分布式锁的正确实现原理演化历程与 Redisson 实战总结

作者 | 码哥来源 | 码哥字节❝可能是最完善的 Redis 分布式锁原理与实战总结,建议收藏。Redis 分布式锁使用 SET 指令就可以实现了么?在分布式领域 CAP 理论一直存在。分布式锁的门道可没那么简单,我们在网上看到的分布式锁方案可能是有问题的…

OceanBase时序数据库CeresDB正式商用 为用户提供安全可靠的数据存储管理服务

简介: OceanBase完成OLAP和OLTP双重能力并行后,向数据管理领域多模方向迈出第一步。 近日,在数据库OceanBase3.0峰会上,OceanBase CEO杨冰宣布首个时序数据库产品CeresDB正式商用。该数据库将为用户提供安全可靠的数据查询和存储…

html伸缩布局,CSS3 伸缩布局(一)

CSS3引入了一种新的布局模式——Flexbox布局,即伸缩布局盒模型(Flexible Box),用来提供一个更加有效的方式制定、调整和分布一个容器里项目布局,即使它们的大小是未知或者动态的,这里简称为Flex。Flexbox布局常用于设计比较复杂的…

从0开始:500行代码实现 LSM 数据库

简介: LSM-Tree 是很多 NoSQL 数据库引擎的底层实现,例如 LevelDB,Hbase 等。本文基于《数据密集型应用系统设计》中对 LSM-Tree 数据库的设计思路,结合代码实现完整地阐述了一个迷你数据库,核心代码 500 行左右&#…

从 Docker 的信号机制看容器的优雅停止

作者 | Addo Zhang来源 | 云原生指北有太多的文章介绍如何运行容器,然而如何停止容器的文章相对少很多。根据运行的应用类型,应用的停止过程非常重要。如果应用要写文件,停止前要保证正确刷新数据并关闭文件;如果是 HTTP 服务&…

使用 Arthas 排查开源 Excel 组件问题

简介: 有了实际的使用之后,不免会想到,Arthas 是如何做到在程序运行时,动态监测我们的代码的呢?带着这样的问题,我们一起来看下 Java Agent 技术实现原理。 背景介绍 ​ 项目中有使用到 com.github.dream…

如何选择python书籍_关于 Python 的经典入门书籍有哪些?

展开全部 关于Python,是最近最火最的编程语言e68a843231313335323631343130323136353331333365643631,挺多人都在学习的,关于它的入门书籍,我大概推荐以下几本: 首先我介绍的是《Python基础教程(第2版修订版)》&#x…

“融合、智能、绿色”施耐德电气线上工博以全生命周期解决方案助推数字化

原定于12月1-5日在上海举办的第23届中国国际工业博览会因为疫情再次延期。不必翘首等待,施耐德电气将以线上云展厅的形式如期与您见面,为工业用户呈现一场以“绿色智能制造,共塑可持续未来”为主题的云端盛宴。凭借在绿色智能制造领域的丰富实…