从一到无穷大 #32 TimeCloth,云上的快速 Point-in-Time Recovery
本作品采用知识共享署名-非商业性使用-相同方式共享 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一般我们也称之为流水备份,其基本思路非常清晰:
- 定期对数据库做全量冷备,并记录冷备的最后一个LSN。(一周三份,两周五份,一个月七份等冷备策略,值得一提的是冷备是对每个分片去做的,所以全局来看不能做到备份到某个时间点)
- 保存数据的WAL(写,删,修改,元数据操作),每条WAL记录LSN和混合时间时钟
- 冷备和流水备份上传对象存储
- 恢复时指定实例,先导入恢复时间前的一个冷备,然后再恢复冷备中每个分片最后一个LSN到指定时间的LSN
事实上这个过程有这么几个优化点:
- 恢复的表不是用户的表,用户要通过Join从新恢复的表去修正原始表,其实我认为有办法做到用户无感知直接恢复源表数据
- 针对表级别数据恢复(用户误操作),单分片中可能存在不同Collection的数据,Collection级别的恢复会扫描无用的数据,可以在流水备份文件中添加摘要信息,扫描的时候可以规避掉部分不需要的数据;
- 针对于实例级别的数据恢复(灰色错误导致数据损坏。之前遇到一例在写入存储引擎前内存跳变导致写坏一个字节,存储引擎的CRC已经算错了,最后是用户发现的错误,这种错误不做全局CRC是无法避免的;两副本硬盘损坏;),目前的导入过程是分片并发的,但是每个分片内部是重放全量的WAL,这个过程显然基于不同的数据模型有更快的恢复方案,比如合并部分修改结果,只保留最终结果;并行导入单分片中没有依赖关系的数据项,单分片也可以做到并发;
好了,回到论文的内容。
计算机工程领域,提出问题其实在很多情况下比其解决的过程更为重要,我们来看看本篇文章抽象出来的问题是什么。
论文提到 1w 个数据库实例中就有大约 700 次由用户发起的恢复。在这种由用户触发的恢复中,客户有两个基本需求:
- 希望将受影响的表回滚到某个历史时间点的一致状态
- 保持原始数据库实例正常运行,以满足写入查询
在这个过程中观察到客户经常对恢复的表进行频繁读取(如 SELECT 和 JOIN),以纠正原始表数据。在服务受到严重影响或纠正过程耗时过长的情况下,客户会优先考虑服务可用性,完全切换到已恢复的表( RENAME)。因此,论文确定了云中高效用户触发恢复的两个理想目标:
- Recovered data in situ:恢复后的后续用户操作通常涉及对恢复表的频繁读写。如果恢复的表位于当前实例之外的其他地方,则所有表访问都会因跨实例或跨节点通信而产生额外开销。因此,恢复表应位于同一数据库实例下,以实现良好的查询性能。
- Lower recovery time objective (RTO):在恢复期间,原始表和数据库实例都是实时的,因为可能会有新的事务到达。因此,较高的 RTO 可能会导致用户执行的恢复后数据校正任务量增加,从而提高操作复杂性。所以较低的 RTO 可以大大减少和简化恢复后的用户工作量。
所以可以看到,论文其实就是要在恢复表所在实例比传统方案更快速的恢复数据。
解决方案
TimeCloth的解决方案分为两个方面:
- 在恢复实例外快速细粒度恢复数据
- 基于lazy loading的快速导入
FAST FINE-GRAINED PITR
Log Filter
使用 Dictionary 将表名和数据库字典化为较短的字符,日志索引中的每个 entry 对应于原始事务日志中的一条日志。包含四项:
- 数据库名对应字典值
- 表名对应字典值
- 日志中的位置
- 时间戳
在恢复过程中,基于摘要可以快速识别相关日志记录。当然一般整个WAL文件还是要从对象存储拉下来的,一般这是一个对象。
Inter-Record Dependency Resolution
介绍了一种检测依赖关系的轻量级算法,可以识别出不同主键之间的依赖关系,判断哪些数据可以并行恢复。
总体思路不难,有兴趣的可以看看原文。
Log Merger
对于每一批不冲突的日志事件,可以通过合并主键相同的日志事件来进一步加快日志重放速度。原因是恢复方案只关注最终状态,因此只要不违反记录间的依赖关系,我们就可以安全地跳过中间状态,合并对同一行的操作。
基本规则如下图所示:
FAST IMPORT OF REMOTE TABLES
基本思路认为物理导入速度太慢,在完全导入实例前用户无法使用恢复表,所以使用 Lazy Loading。
步骤如下:
- 在一台远程主机上基于上一节提到的快速恢复方案恢复一个数据库实例
- 待恢复实例中创建一个 New Table file,此时用户可以认为恢复任务完成,但是实际数据还是在远程
- 创建一个临时表,使用FUSE文件系统接口,对上层数据库保持透明,拦截用户对于 New Table file的读取,先从本地检索是否存在,如果不存在则读取远程实例,并实时填充临时表
- 后台预取远程实例的页面
- 一旦复制了全部的页面,则用临时表替换New Table file
- 远程读取,表交换对用户来说的都是透明的
总结
在不同的数据模型下PITR拥有不同的目标,在这个基础上有不同的预期,从而诞生不同的解决方案;
话说回来都是锦上添花,不过这也是软实力的体现,要是团队都快养不起了自然都是扑杀在前线业务的功能和性能上,只有运营稳定,营收稳定且愿意投入才能有这样的收获。
不过基于hook的方式真的是很多小创新的高发地域,以下提到的东西我都至少见过一篇论文或者一篇专利23333:
- 用户函数的hook
- 文件系统的hook
- 用户态系统调用的hook
- ebpf的函数级别hook
- …
相关文章:
![](https://i-blog.csdnimg.cn/direct/b08a72107a2642fab932d27b15042eed.png)
从一到无穷大 #32 TimeCloth,云上的快速 Point-in-Time Recovery
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。 文章目录 引言解决方案FAST FINE-GRAINED PITRLog FilterInter-Record Dependency ResolutionL…...
![](https://www.ngui.cc/images/no-images.jpg)
时间序列论文1——Forecasting at Scale
目录 0. AI总结0.1 文章概述0.2 研究背景0.3 研究思路0.4 研究结论与讨论1. Introduction2 Features of Business Time Series3 The Prophet Forecasting Model3.1 The Trend Model3.2 Seasonality3.3 Holidays and Events3.4 Model Fitting3.5 Analyst-in-the-Loop Modeling4 …...
![](https://i-blog.csdnimg.cn/direct/0245e9a33a1c471e8f6d0d5790f1f6f1.png)
HDFS常用命令
HDFS常用命令 1.HDFS命令介绍1.1基本语法格式1.2常用命令 1.HDFS命令介绍 HDFS 提供了一组命令行工具,用于管理和操作 HDFS 文件系统。 1.1基本语法格式 hdfs dfs -<命令> [选项] <参数>1.2常用命令 1.显示<path>指定的文件的详细信息。 had…...
![](https://i-blog.csdnimg.cn/direct/d4630e9ad2c9438d9ab9409e2999530b.png)
请问如何做好软件测试工作呢?
一、明确测试目标和范围 理解测试目的:在开始测试之前,首先要明确测试的目标和范围,确保测试计划 与需求相匹配。这有助于测试人员聚焦在关键功能上,避免浪费时间和资源。制定详细的测试计划:根据项目需求࿰…...
![](https://www.ngui.cc/images/no-images.jpg)
单片机开发与Linux开发的区别
引言 单片机(MCU)和Linux开发是嵌入式系统领域的两大主要方向。它们在硬件平台、开发环境、应用场景和开发难度上存在显著区别。本文将系统性地比较单片机开发和Linux开发,探讨它们的主要区别及各自的应用场景和难度体系。 一、基本概念 1…...
![](https://i-blog.csdnimg.cn/direct/48d85b3409064ba581fb99737ad0ad1a.png)
【机器学习】回归类算法-相关性分析
一、前言 前面的几篇博客我们学习了分类算法,今天我们来了解一下回归类的算法吧。首先我们来谈谈两者有什么区别,首先是我们在之前的分类算法,这类算法可以将让我们学会如何将不同的数据划分到不同的类里面,输出的是一些离散的值。…...
![](https://i-blog.csdnimg.cn/direct/c33bcd3d9870415a93e5a61be77c55f0.png)
java基础 之 集合与栈的使用(三)
文章目录 Map接口(一)实现类:HashMap特点HashMap集合的一些方法 (二)实现类: TreeMap特点【自然排序】代码【定制排序】代码TreeMap集合的一些方法 HashMap 和 TreeMap的区别 前文回顾: 戳这里 …...
![](https://i-blog.csdnimg.cn/direct/453377bee2cb4383af7f9c707c7f3f1d.png)
JDK-java.nio包详解
JDK-java.nio包详解 概述 一直以来Java三件套(集合、io、多线程)都是最热门的Java基础技术点,我们要深入掌握好这三件套才能在日常开发中得心应手,之前有编写集合相关的文章,这里出一篇文章来梳理一下io相关的知识点。…...
![](https://www.ngui.cc/images/no-images.jpg)
虚拟机与服务器的区别是什么?虚拟机与服务器的区别和联系
服务器和虚拟机是两个不同的概念,它们在计算机领域有着不同的含义和作用。今天飞飞就和你分享虚拟机和服务器的区别和联系,希望可以帮助到你~ 1、物理形态 a)服务器是实实在在的物理设备,拥有独立的硬件架构。如CPU、硬盘、内存等 b)虚拟机…...
![](https://www.ngui.cc/images/no-images.jpg)
Linux CentOS stream9 命令
初学linux,对字符界面的命令并不陌生。问到什么是linux命令直接答cd、pwd、ls是linux命令。对于命令的定义并熟悉,也不太关心命令的底层执行逻辑,更关心录入命令,马上获取需要的结果。 本文就命令的定义、分类或执行优先级作一简单介绍。 一、定义 搜索网上对linux命令的…...
![](https://i-blog.csdnimg.cn/direct/b3f05c42210d49b39f5558143d5531c3.png)
JavaScript基础——JavaScript变量声明
变量是存储数据的容器,可以变的量,值可以改变,在JavaScript中,变量声明的关键字有var、let,其中,var是ES5的语法,let是ES6的语法,变量需要先声明,在使用。 声明一个age变…...
![](https://i-blog.csdnimg.cn/direct/c0ea57f80e0d411b87dfd40e14c88b46.jpeg)
ModuleNotFoundError: No Module Named openai
题意:Python 无法在环境中找到名为 openai 的模块 问题背景: import requests from bs4 import BeautifulSoup import openai #write each line of nuclear.txt to a list with open(nuclear.txt, r) as f:lines f.readlines()#remove the newline cha…...
![](https://img-blog.csdnimg.cn/img_convert/7f7e69a05d41a9499aa4a6fdf51a39ef.png)
基于SpringBoot+Vue的校园便利平台(带1w+文档)
基于SpringBootVue的校园便利平台(带1w文档) 基于SpringBootVue的校园便利平台(带1w文档) 本平台采用B/S架构、采用的数据库是MySQL,使用JAVA技术开发。该平台的开发方式无论在国内还是国外都比较常见,而且开发完成后使用普遍,可以给平台用户…...
![](https://i-blog.csdnimg.cn/direct/966ab94ff3af4a5fbe47cffb70053eab.png#pic_center)
串口应用编程-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板
串口应用编程 串口应用编程介绍 介绍 串口定义:串行接口,数据按顺序传输 串口特点:通信线路简单,距离远,速度较低 应用领域:常用工业接口 Linux系统中的作用 作为标准输入输出设备 系统打印信息输出 用户与系统交互 串口与终端:在Linux系统中,串口被视为一种终端&#…...
![](https://i-blog.csdnimg.cn/direct/eac92f75963647a8ad25c81347fec5da.png)
Canvas实现截图
<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>canvas实现截图功能</title><style>.ca…...
![](https://i-blog.csdnimg.cn/direct/46d5d1cce5864b43a9ad85b63eb84ad6.png)
Python高性能计算:进程、线程、协程、并发、并行、同步、异步
这里写目录标题 进程、线程、协程并发、并行同步、异步I/O密集型任务、CPU密集型任务 进程、线程、协程 进程、线程和协程是计算机程序执行的三种不同方式,它们在资源管理、执行模型和调度机制上有显著的区别。以下是对它们的详细解释和比较: 进程&…...
![](https://www.ngui.cc/images/no-images.jpg)
kafka基本操作
Kafka详解 一、Kafka概述 Kafka是一个开源的分布式事件流平台,它主要用于高性能数据管道、流分析、数据集成和关键任务应用。Kafka最初被设计为一个分布式的基于发布/订阅模式的消息队列,但随着时间的推移,它已发展成为一个功能强大的流处理…...
![](https://i-blog.csdnimg.cn/direct/f7e8f2a8ab934d71877340b63279d064.png)
JavaFX布局-Accordion
JavaFX布局-Accordion 一个可扩展的面板,包括标题、内容与TitledPane配合一起使用 public static Accordion demo1() {// 创建AccordionAccordion accordion new Accordion();// 内边距accordion.setPadding(new Insets(10, 10, 10, 10));for (int i 1; i < 1…...
![](https://img-blog.csdnimg.cn/img_convert/0220d7f8f1e3ecc35bdb7f6e532a8b31.webp?x-oss-process=image/format,png)
【轨物方案】评估光伏组件发电性能一致性方案
光伏电站建设后运行周期长达二十多年,对于电站运营者来说,基础设施的稳定、安全、高效的运行是至关重要的。然而从近些年光伏的发展过程中看到,在电站规划到后期运维整个过程中可能存在着诸多问题,如设备选型不当、施工建设质量差…...
![](https://i-blog.csdnimg.cn/direct/76d3759080c6401a9f99be0d27368fec.png)
安全基础学习-keil调试汇编代码
初始目的是为了通过汇编编写CRC功能。 但是基础为0,所以目前从搭建工程开始记录。 大佬绕路。 (一)创建项目 1. 新建项目 打开 Keil uVision。选择 Project -> New uVision Project 创建一个新项目。选择你的目标设备(如 ARM Cortex-M 系列处理器),我这里一开始选择…...
![](https://www.ngui.cc/images/no-images.jpg)
Unity复制对象时让私有变量也被复制的简单方法
Unity复制对象时,如果一个变量为公共变量(public),那么这个变量的值会被复制到新的对象中去,但是如果一个变量是私有变量(private),默认是不会被复制的,如果希望被复制&a…...
![](https://i-blog.csdnimg.cn/direct/dc6e2ceecdf54074a85bcf6b4216bd4f.png)
Flink 实时数仓(二)【DIM 层搭建】
1、DIM 层搭建 1.1、设计要点 DIM层设计要点: DIM层存的是维度表(环境信息,比如人、场、货等)DIM层的数据存储在 HBase 表中DIM层表名的命名规范为dim_表名 DIM 层表是用于维度关联的,要通过主键(维度外…...
![](https://img-blog.csdnimg.cn/img_convert/a47c1c01b77dd749d000fa7505fb4f6a.png)
知识图谱开启了一个可以理解的人工智能未来
概述 本文是对利用知识图谱(KG)的综合人工智能(CAI)的全面调查研究,其中 CAI 被定义为可解释人工智能(XAI)和可解释机器学习(IML)的超集。 首先,本文澄清了…...
![](https://img-blog.csdnimg.cn/img_convert/993a0d10975d380760e169884c2717b4.png)
借助Aspose.html控件, 将SVG 转PNG 的 C# 图像处理库
Aspose.HTML for .NET 不仅提供超文本标记语言 ( HTML ) 文件处理,还提供流行图像文件格式之间的转换。您可以利用丰富的渲染和转换功能将SVG文件渲染为PNG、JPG或其他广泛使用的文件格式。但是,我们将使用此C# 图像处理库以编程方式在 C# 中将 SVG 转换…...
![](https://i-blog.csdnimg.cn/direct/ead74fac1fa448b3af5930a0e488ed22.png)
vs-2015安装教程
双击安装包 2-如图先选自定义,然后选安装路径(英文路径) 3-安装选项一个就够了,如图 4-点击下一步,之后如下图 5-点击安装 启动,如图则恭喜你成功安装...
![](https://img-blog.csdnimg.cn/img_convert/90c1a9496d4b85dcaabbfacc8dfa10ee.png)
Stable Diffusion绘画 | 文生图设置详解—随机种子数(Seed)
随机种子数(Seed) Midjourney 也有同样的概念,通过 --seed 种子数值 来使用。 每次操作「生成」所得到的图片,都会随机分配一个 seed值,数值不同,生成的画面就会不同。 默认值为 -1:每次随机分…...
![](https://www.ngui.cc/images/no-images.jpg)
56、php实现N的阶乘末尾有多个0
题目: php实现N的阶乘末尾有多个0 描述: 阶乘 N! 123*…N; 比如 5! 12345 120 末端有1个0 解题思路: N! K*(10^M) N的阶乘为K和10的M次方的乘积,那么N!末尾就有M个0。如果将N的阶乘分解后,那么N的阶乘可以分解为&…...
混合域注意力机制(空间+通道)
在计算机视觉任务中,空间域注意力通常关注图像中不同位置的重要性,例如突出图像中的关键对象或区域。而通道域注意力则侧重于不同通道(特征图)的重要性,决定哪些特征对于任务更具判别力。混合域注意力机制结合了空间域…...
![](https://i-blog.csdnimg.cn/direct/6529105d3fd94e3d99fa7ae903d15c48.png)
springboot长春旅游安全地图平台-计算机毕业设计源码90075
摘 要 本文详细阐述了基于微信小程序前端和Spring Boot后端框架的长春旅游安全地图平台的设计思路与实现过程。该平台旨在为长春游客提供安全、便捷的旅游服务,同时为旅游管理部门提供高效的信息管理和应急响应机制。 在平台设计上,我们充分考虑了用户体…...
![](https://www.ngui.cc/images/no-images.jpg)
apex正则表达式匹配富文本字段内容,如何只匹配文本而忽略富文本符号
在Apex中处理富文本字段时,如果你只想匹配其中的纯文本而忽略富文本符号,可以使用正则表达式来去除HTML标签,然后再进行文本匹配。以下是一个示例代码,展示了如何实现这一点: public class RichTextHandler {// Funct…...
![](/images/no-images.jpg)
网站空间试用/网站建设哪家公司好
Oracle 提供了强大的审计功能,可以针对用户级,系统级范围,以及标准审计,细粒度审计等多种方式来审计各种数据库层面上的操作。然很多中小型数据库需要记录用户的登陆登出信息,而又不希望牺牲太多的性能。基于这种情形&…...
![](/images/no-images.jpg)
wordpress推广/某个产品营销推广方案
1.自从换了工作之后,好久都没有碰自己的博客园了,今天刚好学到这个知识点就想起来写点东西了呀,tableview的使用在我们的应用的十分广泛,我特地的学习了下纯代码计算的cell的高度,在计算的中遇到了几个问题,…...
![](/images/no-images.jpg)
沈阳网站开发培训/网络营销工程师培训
bootstrap源码分析之scrollspy(滚动侦听) 源码文件: Scrollspy.js 实现功能1、当滚动区域内设置的hashkey距离顶点到有效位置时,就关联设置其导航上的指定项 2、导航必须是 .nav > li > a 结构,并且a上href或dat…...
![](/images/no-images.jpg)
做asmr的网站/运营推广渠道有哪些
我们来看下面的例子:create or replace view testviewasselect empno,ename from emp where ename like ‘M%’with check option; 这里我们创建了一个视图,并使用了with check option来限制了视图。 然后我们来看一下视图包含的结果:select …...
![](https://img-blog.csdnimg.cn/img_convert/2c50d18ce47a56b7011cc7d5156d5398.png)
o2o网站建设新闻/新媒体seo培训
按ctrl-d终止当前终端的标准输入并终止命令,通常会终止一个程序。这和ctrl-c不一样。ctrl-c是终止当前进程运行,无论是否有输入和输出。常用命令一ls-l :显示文件目录详细列表ls-F:显示文件类型信息ls -i : 查看当前目录的inode编号lsof:列出…...
![](/images/no-images.jpg)
上海建站提供商/西安百度竞价托管
(内容包括Python语法概述,流程控制,条件表达式)1 Python语法1.1 Python的特点Python是一种完全面向对象的、解释性的、可移植的、开源的脚本编程高级语言,具有丰富的库,允许边写边执行。他完全支持继承、重载,强大的第…...