从一到无穷大 #32 TimeCloth,云上的快速 Point-in-Time Recovery

news2024/9/20 5:34:03

在这里插入图片描述本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。

文章目录

  • 引言
  • 解决方案
    • FAST FINE-GRAINED PITR
      • Log Filter
      • Inter-Record Dependency Resolution
      • Log Merger
    • FAST IMPORT OF REMOTE TABLES
  • 总结

引言

由组内大佬爽哥推荐的论文,sigmod2024的《TimeCloth: Fast Point-in-Time Database Recovery in The Cloud》阐述了一种在恢复表所在实例中基于PITR( Point-in-Time)的快速恢复方案。
请添加图片描述
先不讨论论文内容,但从这个功能来看存在哪些问题和哪些优化点。

PITR一般我们也称之为流水备份,其基本思路非常清晰:

  1. 定期对数据库做全量冷备,并记录冷备的最后一个LSN。(一周三份,两周五份,一个月七份等冷备策略,值得一提的是冷备是对每个分片去做的,所以全局来看不能做到备份到某个时间点)
  2. 保存数据的WAL(写,删,修改,元数据操作),每条WAL记录LSN和混合时间时钟
  3. 冷备和流水备份上传对象存储
  4. 恢复时指定实例,先导入恢复时间前的一个冷备,然后再恢复冷备中每个分片最后一个LSN到指定时间的LSN

事实上这个过程有这么几个优化点:

  1. 恢复的表不是用户的表,用户要通过Join从新恢复的表去修正原始表,其实我认为有办法做到用户无感知直接恢复源表数据
  2. 针对表级别数据恢复(用户误操作),单分片中可能存在不同Collection的数据,Collection级别的恢复会扫描无用的数据,可以在流水备份文件中添加摘要信息,扫描的时候可以规避掉部分不需要的数据;
  3. 针对于实例级别的数据恢复(灰色错误导致数据损坏。之前遇到一例在写入存储引擎前内存跳变导致写坏一个字节,存储引擎的CRC已经算错了,最后是用户发现的错误,这种错误不做全局CRC是无法避免的;两副本硬盘损坏;),目前的导入过程是分片并发的,但是每个分片内部是重放全量的WAL,这个过程显然基于不同的数据模型有更快的恢复方案,比如合并部分修改结果,只保留最终结果;并行导入单分片中没有依赖关系的数据项,单分片也可以做到并发;

好了,回到论文的内容。

计算机工程领域,提出问题其实在很多情况下比其解决的过程更为重要,我们来看看本篇文章抽象出来的问题是什么。

论文提到 1w 个数据库实例中就有大约 700 次由用户发起的恢复。在这种由用户触发的恢复中,客户有两个基本需求:

  1. 希望将受影响的表回滚到某个历史时间点的一致状态
  2. 保持原始数据库实例正常运行,以满足写入查询

在这个过程中观察到客户经常对恢复的表进行频繁读取(如 SELECT 和 JOIN),以纠正原始表数据。在服务受到严重影响或纠正过程耗时过长的情况下,客户会优先考虑服务可用性,完全切换到已恢复的表( RENAME)。因此,论文确定了云中高效用户触发恢复的两个理想目标:

  1. Recovered data in situ:恢复后的后续用户操作通常涉及对恢复表的频繁读写。如果恢复的表位于当前实例之外的其他地方,则所有表访问都会因跨实例或跨节点通信而产生额外开销。因此,恢复表应位于同一数据库实例下,以实现良好的查询性能。
  2. Lower recovery time objective (RTO):在恢复期间,原始表和数据库实例都是实时的,因为可能会有新的事务到达。因此,较高的 RTO 可能会导致用户执行的恢复后数据校正任务量增加,从而提高操作复杂性。所以较低的 RTO 可以大大减少和简化恢复后的用户工作量。

所以可以看到,论文其实就是要在恢复表所在实例比传统方案更快速的恢复数据。

解决方案

在这里插入图片描述

TimeCloth的解决方案分为两个方面:

  1. 在恢复实例外快速细粒度恢复数据
  2. 基于lazy loading的快速导入

FAST FINE-GRAINED PITR

Log Filter

在这里插入图片描述
使用 Dictionary 将表名和数据库字典化为较短的字符,日志索引中的每个 entry 对应于原始事务日志中的一条日志。包含四项:

  1. 数据库名对应字典值
  2. 表名对应字典值
  3. 日志中的位置
  4. 时间戳

在恢复过程中,基于摘要可以快速识别相关日志记录。当然一般整个WAL文件还是要从对象存储拉下来的,一般这是一个对象。

Inter-Record Dependency Resolution

介绍了一种检测依赖关系的轻量级算法,可以识别出不同主键之间的依赖关系,判断哪些数据可以并行恢复。

总体思路不难,有兴趣的可以看看原文。

Log Merger

对于每一批不冲突的日志事件,可以通过合并主键相同的日志事件来进一步加快日志重放速度。原因是恢复方案只关注最终状态,因此只要不违反记录间的依赖关系,我们就可以安全地跳过中间状态,合并对同一行的操作。

基本规则如下图所示:
请添加图片描述

FAST IMPORT OF REMOTE TABLES

请添加图片描述

基本思路认为物理导入速度太慢,在完全导入实例前用户无法使用恢复表,所以使用 Lazy Loading。

步骤如下:

  1. 在一台远程主机上基于上一节提到的快速恢复方案恢复一个数据库实例
  2. 待恢复实例中创建一个 New Table file,此时用户可以认为恢复任务完成,但是实际数据还是在远程
  3. 创建一个临时表,使用FUSE文件系统接口,对上层数据库保持透明,拦截用户对于 New Table file的读取,先从本地检索是否存在,如果不存在则读取远程实例,并实时填充临时表
  4. 后台预取远程实例的页面
  5. 一旦复制了全部的页面,则用临时表替换New Table file
  6. 远程读取,表交换对用户来说的都是透明的

总结

在不同的数据模型下PITR拥有不同的目标,在这个基础上有不同的预期,从而诞生不同的解决方案;

话说回来都是锦上添花,不过这也是软实力的体现,要是团队都快养不起了自然都是扑杀在前线业务的功能和性能上,只有运营稳定,营收稳定且愿意投入才能有这样的收获。

不过基于hook的方式真的是很多小创新的高发地域,以下提到的东西我都至少见过一篇论文或者一篇专利23333:

  1. 用户函数的hook
  2. 文件系统的hook
  3. 用户态系统调用的hook
  4. ebpf的函数级别hook

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

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

相关文章

全球氢燃料电池汽车市场规划预测:未来六年CAGR为44.4%

一、引言 随着全球能源转型和环保意识的提升,氢燃料电池汽车作为清洁能源汽车的重要组成部分,其市场潜力日益凸显。本文旨在探索氢燃料电池汽车行业的发展趋势、潜在商机及其未来展望。 二、市场趋势 全球氢燃料电池汽车市场的增长主要受全球环保政策推…

springboot辽B代驾管理系统论文源码调试讲解

2 相关技术 2.1 MySQL数据库 本研究与开发的应用程序在数据操作中难以预料,有时候甚至产生变化。没有办法直接在Word中写数据信息,这不但不安全,并且难以达到应用程序的功能。想要实现所需要的文档存储功能,务必选择专业数据库存…

奥运会Ⅲ--AI风险矩阵

问满屋子的人工智能专家:“我们如何知道我们的人工智能是否安全可靠?”你可能会得到十几个不同的答案,每个答案都比上一个更复杂。似乎不知何故,在 OpenAI 成为地球上增长最快的公司一年零几个月后,每个人都是 LLM&…

CANOpen EMCY紧急报文介绍

什么是CANOpen紧急报文 CANOpen中的Emcy紧急报文用于当设备出现故障或警告时,向其它节点报告故障或警告使用的。如设备某个设备出现过压或过流时,就可以发送紧急报文。 紧急报文的格式 错误代码:是0x1003索引预定义错误字段的内容&#xff…

修改VSCode插件默认安装路径

文章目录 前言VSCode插件默认安装路径添加环境变量先修改路径注意事项 前言 今天发现C盘快满了,只能清理点东西,给C盘腾出的空间出来,结果一看,VSCode的插件目录就占了不少呢。 VSCode插件默认安装路径 C:\Users\{个人用户名}\.…

比较支持向量机、AdaBoost、逻辑斯谛回归模型的学习策略与算法

(1)支持向量机:SVM 是一种监督学习算法,用于分类和回归任务。 学习策略:间隔最大化 算法:最大间隔法、软间隔算法。 参数学习:参数学习过程是要最小化目标函数,通常通过优化算法(如SMO&#x…

为什么选择 Baklib 而不是 Salesforce 进行知识库管理

对于希望管理其产品和服务的在线文档或知识库以支持其客户和员工的组织来说,市场上有太多的平台和工具。知识库通过向客户和员工提供重要信息来帮助组织提高生产力。这大致分为客户关系管理或客户服务。 很少有平台能够为销售、客户服务等提供一套服务。Salesforce…

Adobe ColdFusion反序列化漏洞(cve-2017-3066)

目录 概述复现过程修复建议 概述 Adobe ColdFusion(直译:冷聚变),是一个动态Web服务器,其CFML(ColdFusion Markup Language)是一种程序设计语言,类似JSP里的JSTL(JSP St…

High Speed Serdes学习笔记

1 并行数据总线(Parallel Data Bus) 并行数据总线为传统的数据传输方式,存在两个问题; 1>需要大量的I/O引脚 2>必须满足严格的时序要求以保证数据正确传输。 图:两个设备之间的并行数据 2 数据串行化 减少并行…

【学习笔记】Day 2

一、进度概述 1、inversionnet_train_light 试运行——未成功 2、DL-FWI基础入门培训-1,2,以及作业1的完成 二、详情 1、inversionnet_train_light 试运行 在补充完相关依赖后,运行仍有报错 产生原因:这个代码在当时师兄的库中存在…

架构设计前期应该怎么做?

利益干系人分析 利益干系人分析框架 利益干系人 - 投资者 利益干系人 - 监管者 利益干系人 - 构建者,维护者 利益干系人 - 使用者,评估者 利益干系人 - 钱包案例 评估者:用户可以评估好不好用 利益干系人 - 外包系统案例 诉求优先级排序 …

【LeetCode每日一题】盛最多水的容器

思路 标签:双指针,贪心 分析: 首先选两条线为容器的两端,盛水的高度取决于高度小的那条线,此时在两条线中间选一条线,有两种情况,如果区间内某条线比两端高度小的那条线还要小,此时宽度和高度…

UE4-常用快捷键汇总

一.虚幻引擎编辑器快捷键 二.蓝图编辑器快捷键

JAVA项目

目录 一、前言 二、技术介绍 三、项目实现流程 四、论文流程参考 五、核心代码截图 专注于大学生实战开发、讲解和毕业答疑等辅导,获取源码后台 一、前言 在数字化音乐时代,个性化推荐已成为提升用户体验、促进音乐消费的重要手段。为此&#xff0…

mybatis-plus selectPage获取到数据但是total为0

查数据库返回数据,但是total显示为0 这里需要设置分页拦截器 config目录下新建mybatisConfig.java import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springframework.context.annotation.Bean; import org.spri…

Airtest精讲Template配置参数

Airtest精讲Template配置参数 今天我们讲一下airtest图像识别中的一个最基本、最常用的一个类Template 一、环境背景 首先我们先看一个非常简单的脚本示例,在AirtestIDE中,显示如图: 在编辑器中点击鼠标右键菜单的‘图片/代码模式切换’&am…

美股:AMD展现乐观前景,挑战AI加速器市场霸主

在科技行业的激烈竞争中,AMD公司近期发布了对当前季度收入的乐观预测,显示出其新推出 一、AMD第三季度营收预期超越分析师平均预期 AMD在周二的声明中预计,第三季度营收将达到约67亿美元,这一数字超出了分析师此前平均预期的66.…

mybatis-plus雪花算法

苞米豆mybatis-plus已实现雪花算法,若项目中使用雪花算法生成自增主键,可直接引用相关jar实现其工具类,若不想再单独引用jar也可将其Sequence类直接复制到自己项目中定义为工具类使用 官方文档:https://baomidou.com/ Git地址&am…

ESP32是什么?

ESP32是一款由乐鑫信息科技(Espressif Systems)推出的高度集成的低功耗系统级芯片(SoC),它结合了双核处理器、无线通信、低功耗特性和丰富的外设,特别适用于各种物联网(IoT)应用。以…

架构设计中期应该怎么做?

设计备选方案 架构设计常见的错误思维 什么是备选架构? 能够解决系统复杂度的方案 备选方案设计过程 备选架构设计技巧 备选方案常见困难和应对技巧 学的太浅:不知道本质 比较学习法 评估和选择备选方案 错误的方法 正确的方法 - 360度环评 优先级排…