实用指南:「腾讯云NoSQL」技术之向量数据库篇:自研分布式向量数据库,实现毫秒级时序一致备份的挑战和实践

news/2025/12/9 20:18:29/文章来源:https://www.cnblogs.com/tlnshuju/p/19328283

实用指南:「腾讯云NoSQL」技术之向量数据库篇:自研分布式向量数据库,实现毫秒级时序一致备份的挑战和实践

2025-12-09 20:11  tlnshuju  阅读(0)  评论(0)    收藏  举报

随着AIGC和大模型的浪潮席卷全球,向量数据库作为处理和检索海量非结构化数据的核心引擎,其重要性日益凸显。为了确保材料的多副本容灾和一致性,数据库普遍采用成熟的Raft协议来构建多副本架构,依据Raft协议和高可靠的云盘,材料被复制成三份甚至更多,似乎已经构筑了一套完备的数据的读写和核心的容灾能力,然而,这样的高可用架构真的就万无一失了吗?

当人为的误删除、工具Bug的致命一击发生时,这些“错误”操作也会被忠实地同步到所有副本,导致数据瞬间灰飞烟灭——此时我们才意识到,仅靠多副本远不足够,那么,我们应该如何在海量分片间保证数据的一致性快照?

基于以上痛点,腾讯云NoSQL团队自研了完整的备份恢复特性,解决了分布式架构下数据与元数据的动态一致性难题,构建了一套对业务影响极低的精确时间点备份恢复系统。从功能设计到发布后,整体未发生过一起数据故障和间接引发的宕机故障。 腾讯云NoSQL团队是如何做到这一点的?本文将带你一探究竟。

1 自研数据库中备份各类问题与挑战

1.1 Raft+云盘多副本,难道还不够?

TencentVDB源自PCG的OLAMA平台,并持续共建构建,该平台的构建的基础架构与众多数据库类似,基于Raft协议来确保数据的多副本容灾和一致性,如下图所示:

对元数据的管理,采用1Leader+4Follower的方式来确保元信息的可靠性。就是如上所示,VDB从数据面将1个collection划分为1-N个shard(分片)放在Worker0-N中对客户直接进行访问服务,每个shard是一个raft组,或者说每个shard是1个leader多个Follower。VDB管理面(Master)

按照raft协议的基本逻辑,数据的读写和基本的容灾能力是具备的:

  • 多数派写入成功则会认为成功,假如是1主2从,2个节点写入成功则认为成功,那么在其中任意一个节点出现意外宕机或主动运维重启过程中不会引发读写异常。

  • 任何一份数据损坏都可以恢复,因为最少2份数据是完整的,所以即使是Leader材料盘损坏也依然行确保数据不丢失。

  • 3份数据最终是一致的,纵然写入是多数派成功认为成功,但依旧会借助Raft日志确保最终3个副本的数据是一致的。

  • 多可用区多副本确保9个9以的可靠性。就是云盘本身的高可靠性,在云上部署的VDB是基于云盘来完成,云盘本身也

为什么这样的资料可靠性还不够?

偏于机机正常访问为前提下,出现宕机、运维重启、磁盘损坏、文件损坏等可能发生的数据丢失的容灾方法,但在实际运行过程中,还存在以下两类情况:就是上述数据的可靠更多还

  • 人为误(或恶意)删除,人为误删除材料、表、库的时候(甚至于将回收站清空),即使数据多个副本会被同时删除。

  • 程序Bug,由于程序发布bug、被恶意植入执行代码等方式,导致数据和结构被删除,此时多副本依然会被同时删除。

  • 需要克隆实例,用户因为需要对比数据、性能、版本差异,应该克隆一份某时刻的素材是一种不错的选择。

“备份恢复”成为保障客户数据的终于一道防线。向量数据库早期更聚焦于向量算法检索和工程优化。随着业务需求的敏捷发展,越来越多的客户将业务标量资料、原始文本内容、图片和视频地址等具备业务含义的数据放入到向量数据库中,以便于借助向量数据库获得更多更直接的非结构化数据处理。

由此客户对于向量数据库的信息可靠性要求更高,对备份恢复的客观诉求变得越发强烈,VDB内核团队基于分布式向量数据库自研了完整的向量数据库备份恢复,在该过程中相对于传统数据库会有诸多区别和不同的技术挑战,本文将详细展开这些细节分享给大家。

1.2 相对传数据库的困难和挑战

在自研分布式向量数据库中,备份恢复机制面临以下几个关键难点:

  • 备份恢复平台需完全自研,缺乏现成方案

与传统数据库不同,自研向量数据库无法直接沿用成熟的开源或商业备份软件,几乎从0设计和构建整套备份恢复流程,并针对向量数据的高维、相似性检索等特性做专门优化。

  • 分布式分片与多副本间的一致性保障

数据表会被拆分为多个分片(Shard),分散在不同节点上,每个分片又存在多个副本。在备份瞬间,需要确保所有分片及其副本在时序上保持一致,否则可能因材料状态不一致导致数据错乱。

  • Braft框架log中缺乏时间戳带来的恢复效果

基于默认 BRaft框架的日志中未记录时间戳,导致无法直接基于指定时间点进行恢复。VDB团队借助改写日志格式,引入时间戳来增强能力,但这又会带来新旧版本兼容性升级的挑战,这都将在本文后面逐步展开。

  • 元数据与节点状态在备份过程中的动态一致性挑战

Shard(分片)的分布、副本位置、节点 IP、角色等关键信息均由元数据库统一管理。备份过程中若元资料发生变更(如频繁新建和删除表),需确保元数据与各节点实际资料状态的一致性。而在恢复阶段,需要对元数据中的异常进行处理,由于恢复的机器IP已发生改变,也需处理对节点 IP 元信息进行依赖解耦处理,会进一步增加了实现复杂度。

2 核心技术点的落地

2.1 备份核心点:一致性与完整性

多节点数据毫秒级一致

当外部发起T0备份时,其核心目标是为恢复T0时刻的数据。然而在分布式环境中,该备份的实际执行会因网络与预处理延迟,导致以下情况:

  • 备份时间点分散:各节点实际备份时刻并不统一,而是分布在T0之后的多个时间点。

  • 恢复信息不一致:恢复所得的信息并非一个统一的T0时间点快照,不同节点的数据存在时间差。

  • 中间操作状态混杂:在T0到各节点搞定备份的时间窗口内,若发生CRUD操作,会导致部分节点包含了此变更,而其他节点未包含,从而引发数据状态不一致。

VDB面对上述客观问题,我们考虑的是通过上次本地快照+Raft日志的方式,确保备份时刻比发起备份的T0时刻更晚,那么就能确保恢复阶段的数据就可以通过回放到T0时刻的日志来确保时序的一致性(这里理解的基础是时钟同步的差距低于ms级)。VDB备份前和备份中会有以下行为

  • 相对T0更早的时刻,标记为:Tx1就是VDB周期性判断,倘若数据发生变化较多,对原始数据进行本地硬链接(放在RocksDB中,包含标量和向量),这个

  • VDB周期性判断,如果素材发生变化较多,对索引数据的进行本地快照(索引素材存放在磁盘上的文件),也是相对T0更早的时刻,标记为Tx2

Tx1本地磁盘链接速度非常快速然后索引数据备份开始fork一份内存在此期间短暂阻塞写入确保Tx1Tx2之间数据发生变化

  • 备份过程中,并对Raft日志进行硬链接处理后再进行远程备份

  • T0,以便于恢复时统一用该时刻就是备份过程中,由Master记录备份的时间点

VDB恢复实例阶段处理手段:

恢复过程禁写:设置特定状态,该阶段禁止外部写入,恢复完成后才开放

Tx1,早于T0。就是先恢复原始(RocksDB)资料:此时恢复出来的原始数据

再回复索引数据(Index)数据:此时恢复出来的索引数据是Tx2,前文中提到Tx1-Tx2信息保持一致,所以索引也可以认为是Tx1时刻的索引。

通过Raft日志恢复到T0时刻:根据Master记录的T0时刻,回放Tx1-T0这个时段日志,确保各个节点的即使快照和备份时间不一致,也能最终在毫秒级达成一致。

补充:关于braft框架默认的raft log的改写:

VDB是基于braft框架来完成的,其框架本身提供的raft log并没有标志timestamp信息,而是通过类似序列号的方式来表达的。

所以VDB在结束上述备份过程中之前需要先更改整体的日志格式,而在这个过程中,会引发旧版本日志和新版本日志不兼容的情况,例如在升级过程中节点间传递raft日志,旧版本日志和新版本日志相互不兼容。为了克服这个挑战,VDB做了以下处理:

  • 新版本的代码兼容旧版本的日志,升级过程中作为Follower可以接收以前的日志。

  • 提供升级模式状态,不影响读写,在此状态下,新版本也依然按照旧版本的日志写入,升级过程中作为Leader时可以让旧版本节点识别到日志。

  • 通过在所有节点升级完成后,将状态更改为正常服务,确保全部启用新日志格式进行写入,并立即完成一份快照,以确保从此时刻起,就能够使用备份恢复。

分布式元数据状态一致

除上述信息一致外,大家还会遇到的问题是,当T0时刻发起备份后,T1时刻才真正开始备份,此时T0到T1之间用户发起了新增表、删除表、添加索引字段、删除库等行为,则会导致元内容不一致,例如:

● 恢复时元数据多了一些新增的表,但素材节点上备份的数据中没有该表

● 恢复时元内容少了一些表,导致无法恢复出来这些内容

分布式元数据状态一致

,当T0时刻发起备份后,T1时刻才真正开始备份,此时T0到T1之间用户发起了新增表、删除表、添加索引字段、删除库等行为,则会导致元素材不一致,例如:就是除上述内容一致外,大家还会遇到的问题

● 恢复时元数据多了一些新增的表,但材料节点上备份的数据中没有该表

● 恢复时元数据少了一些表,导致无法恢复出来这些数据

元资料是否类似数据面一样,通过快照+Raft log回放来实现?

元内容的日志是对表和库的增删改,而该行为是不可发生REDO的,例如建表再发生REDO就会报错,所以还需要采用其它的方式来完成。

为此VDB先引入了状态机,来控制管理节点(Master)来控制任务处理过程中的信息:

  • IDLE,日常空闲状态,不做任何控制行为

  • IN-PROGRESS,发起备份Maser立即修改的状态,并向所有的数据节点下发备份任务

  • WAITING,管理节点(Master)开始等待所有Worker节点是否收到备份,假设收到则认为下发结束,否则认为本次备份失败。

引入上述状态机后,发起备份会第一时间修改状态,此时如果外部发起对表的新增、删除、修改操作会被短期阻塞或拒绝(根据策略来决定),之后将T0时刻的元数据快照并保存,并通知各个数据节点(Worker)开始备份指定的表,进一步将进行如下处理:

  • 快速释放锁元资料本地快照成功后不再加锁,允许外部对表和库进行增删改运行

  • 新增表如果期间发生新增表操作,新增的表不会被备份(各数据节点需要备份的表已在加锁阶段确定)

  • 新增和删除索引该行为在VDB中不会真正去删除数据,元数据加锁阶段已被保存。

  • 发生删除表管理元材料会被删除,但元数据已在加锁阶段被保存快照,而数据节点的索引、原始数据、日志会暂时标记删除,外部访问不到该表。接着借助缓清理的方式(询问Master是否能够清理),使得数据在备份期间不会因为删除行为而被实际清理。

数据和日志的完整性

数据备份过程数据日志正在写入内核程序角度会认为写入成功操作系统可能尚未刷盘部分数据还在缓冲区中),此时进行磁盘备份的时候,会导致内容和日志的不完整,例如最后一条日志可能只有一半被刷盘。操作系统的机制无法避免,只能充分利用OS的机制,针对内容和日志做一些特殊处理,使得最终的数据是一致的:

● 数据快照阶段处理:确保数据本身在快照时是被强制刷盘的(fsync),以确保备份的快照文件在那个时刻是完整的。

● 日志实时写入处理:确保日志在备份时刻前的日志都已经被强制刷盘一次,备份时刻T0发起后,可能还会有外部请求写入数据到缓冲区未落盘,导致半条日志的情况,但那些日志是在T0时刻过后的,所以只需要对日志校验部分进行特殊处理,就可以。

2.2 丝滑体验降低备份对业务的影响

VectorDB的备份过程中,首要有3个核心步骤:

● 本地硬链接(含上面提到的数据、索引、日志、元数据),实现本地备份

● 借助云巢团队DBS框架,间接使用CBS盘快照,构建远程备份

因此在备份过程中会几个明显的特点:

  • 业务影响趋近0:无论是本地硬链接,还是CBS盘快照,对业务的IO影响几乎趋近0,同时几乎不占用系统的CPU和内存资源。

  • 急速备份:

    • 本地硬链接几乎在压秒级完成,在现网业务中部分运行时数据显示,对一个20TB的向量库进行备份,经过元数据加锁分发,以及所有分片日志的本地备份全部搞定在20s内完毕。

    • CBS盘的快照在首次备份成功后,再进行快照备份,其取决于磁盘更新的量,不需要将整个磁盘的数据拷贝。

  • 本地盘(NVMe)拷贝减少

    • 将业务Raft日志依然放在CBS盘,这部分内容可能会超过数据本身的大小,确保备份时这部分内容不再从本地盘拷贝出来。

    • 本地盘NVMe主要存放索引数据,将其与日志分离,许可更好的保障客户的检索服务使用磁盘时具备稳定的IOPS。

    • 备份期间该数据的硬链接会被建立在本地盘并在备份时直接进行远程备份,以减少对CBS盘的写入。此时如将数据拷贝到CBS盘统一备份,可能会导致CBS盘的写入带宽被拉高,从而导致业务写入时Raft日志落盘变慢,间接导致写入变慢,极端情况下会导致整个框架的处理线程会消耗光,无法为业务提供查询服务。

2.3 降低RTO:恢复一致性与速率

关于信息和元数据的一致性,在前面已提到。除此之外,元数据还包含了各个数据节点的IP地址,数据分片和其副本在那个节点上(IP地址),以及其角色,以便于在日常运维和异常宕机时便于容灾处理。接着这一方式使得备份后的元信息在恢复阶段变得麻烦,所以在恢复阶段VDB会采用以下动作去做完一致性和速率提升:

● 按照备份恢复元数据到Master节点

● 内容节点Worker按照1:1恢复到新的数据节点,此时为恢复状态,暂不进行各类心跳处理

● 根据新节点顺序,将元数据的IP地址进行修改,让Master与新的一批Worker进行通信调度

● 每个Woker凭借快照恢复到新的CBS盘

● 每个CBS盘上并行装载分片数据到内存,这样充分利用多台机器云盘的最大带宽装载数据

3 运行情况

在基于纯自研的分布式数据库备份恢复,从设计到达成发布后,整体未发生过一起数据故障和间接引发的宕机故障,备份和恢复的成功率几乎也是:

  • 备份成功率:99.99%,备份次数达到数十万次,部分未成功的例子也已经寻求到解法会在后续版本中完善

  • 恢复成功率:客户侧使用100%,滚动流水线模拟99.95%(常态化模拟备份恢复),未成功的部分也已寻求到解法会在后续版本中完善。

4 需更进一步

今天VDB主要是做到备份时刻的一致性处理,为了更好的支持备份恢复以缩小RPO,需要献出更加强大的备份恢复能力:

  • 分钟/秒级实时备份,基于日志文件变更的备份,也可献出CDC能力由外部订阅来达成日志的事实流式备份。

  • 数据表无删除的回收站能力,以便于误操作时可以飞快恢复表,而不需要经历整库的恢复流程。

  • 数据级UNDO能力,根据日志反推回滚行为,用户如发生局部资料修改错误或删除错误,可根据需要,对某个表的某个过滤条件下的材料,进行部分快捷闪回。

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

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

相关文章

Semaphore、CountDownLatch、ReentrantLock使用场景简单说说

目录Semaphore、CountDownLatch、ReentrantLock使用场景简单说说1. Semaphore(信号量)2. CountDownLatch(倒计时门闩)3. ReentrantLock(可重入锁)对比总结简单记忆三个并发工具的简单示例1. Semaphore 示例 - 停…

LATTICE HW-USBN-2B 高速下载器凭什么是销冠

LATTICE HW-USBN-2B 高速下载器凭什么是销冠 1). 支持windows7,Windows10 操作系统,两个操作系统非常稳定不断线。2). 支持JTAG 模式,速度快,最高30Mb/s,调试serdes core,不会像hw-usbn-2a出现错误。如这种错误…

py-lambda-map-list随笔

py-lambda-map-list随笔 匿名函数lambda lambda 表达式用于创建 小型、匿名 的单行函数。 语法:lambda arguments: expression很方便的map()用于及其方便地映射 把相同的操作(如lambda表达式)映射到后者(如列表上)…

2025年12月水上乐园设备厂家最新推荐:昊至泉充气水上乐园设备、室内水上乐园设备、户外水上乐园设备、大型水上乐园设备、漂流河水上乐园设备、打造安全创新个性化水上娱乐新标准

随着全民休闲娱乐需求增长及文旅产业升级,水上乐园作为夏季热门旅游目的地,其设备安全性、创新性及个性化设计已成为投资运营者的核心考量。2025年,市场对水上乐园设备的要求已从基础功能转向安全高效、主题鲜明、适…

杂题选记

记录一些我觉得比较有意思的题目。难度差异可能会很大。 书信 给一个字符串 \(S\),对于 \(S\) 中的每一类字符,可以选择一个区间 \([l,r]\) 保留,保留的字母间相对顺序不变。 每一个位置有权值 \(w_i\)。 求将 \(S\…

2025年12月铝材厂家推荐榜:廊坊国美铝业,工业铝材、门窗铝材、3C铝材、通用铝材、多领域铝材定制与绿色生产标杆

随着 2025 年国内基建项目集中开工、新能源产业加速扩张及绿色建筑标准全面落地,铝材作为工业制造与建筑领域的核心基础材料,市场需求持续攀升。但当前市场上厂商技术水平、产品适配能力及环保合规性差异显著,企业在…

Qt 文本转语言(QTextToSpeech类)详解 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

AWS发布网络扫描指南:构建更安全云环境的守则

亚马逊云科技(AWS)正式发布针对客户工作负载的网络扫描行为指导原则。该指南旨在帮助合规扫描工具获取更准确数据,减少滥用报告,并提升整体互联网安全,涵盖了扫描行为的可观测性、可识别性、协作性与保密性四大核…

# 题解#洛谷P2880 Balanced Lineup #ST表#

P2880 [USACO07JAN] Balanced Lineup G - 洛谷 分析f[i][j]记录以i开头,长度为2^i的子段的最值f[i][j+1]=max( f[i][j] , f[i+2^(j-1)][j-1] )代码实现 #include<bits/stdc++.h> #define int long long #defin…

2025年12月包头保洁公司最新推荐:信达家政,包头保洁开荒、包头高空清洗保洁、包头保姆公司、包头保姆家政、包头保姆月嫂、包头保姆护工、服务品质新标准

随着城市生活节奏加快及家庭服务需求多元化发展,家政服务行业正朝着专业化、标准化、精细化的方向升级。2025年,市场对高品质、可信赖的家政服务需求持续增长,但服务机构水平参差不齐、服务标准不一、人员素质差异大…

机器视觉测量与建模

基于机器视觉的空间信息数据获取与处理技术在当今发展迅速、应用前景巨大,它与计算机视觉、计算机图像学、机器人视觉导航、测绘遥感、地理信息系统等学科方向密切相关。本课程将系统地讲解介绍基于机器视觉的三维空间…

2025最值得报的雅思封闭班:高性价比/冲高分/打基础三类优选清单

2025最值得报的雅思封闭班:高性价比/冲高分/打基础三类优选清单一、2025 雅思封闭班选课指南:五维评测体系揭秘 在雅思备考白热化的当下,封闭式培训以沉浸式学习优势成为提分 “加速器”。本文联合 ETS 官方合作机构…

[Java EE] 多线程 -- 初阶(1) - 详解

[Java EE] 多线程 -- 初阶(1) - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monac…

AQS与CAS深度讲解

下面我给你 一口气把 AQS 与 CAS 讲透。你有十年 Java 经验,我直接按“面试+底层原理+源码模型”这种工程师能秒懂的方式来讲,不整花里胡哨的。🔥 一、CAS:并发世界的基石(Compare-And-Swap) 1. CAS 是什么? 一…

PKU 数据结构与算法 2025 复习题 坐公交

题目大意 A 城市有 n 个路口,由 n-1 条道路连接,保证所有路口可以通过这些道路相互联通。 A 城市总共有 m 条公交线路,第 i 条公交在路口 x[i] , y[i] 之间双向往复开行。经过并停靠路口 x[i] , y[i] 最短路径上每一…

2025 雅思培训班怎么选?5 大热门机构深度测评 + 避坑指南

2025 雅思培训班怎么选?5 大热门机构深度测评 + 避坑指南作为一名深耕留学备考领域的教育博主,最近后台被问爆了 “雅思培训班该怎么选”。毕竟市面上机构鱼龙混杂,“保分承诺”“名师授课” 的噱头满天飞,稍不注意…

2025年12月模内注塑技术标杆厂商最新推荐:腾达鑫电子科技,引领IML/IMD/IMR/IMP个性化新标准

随着消费电子、家电、汽车等产业对产品外观、耐用性与环保性要求不断提高,模内注塑技术已从传统制造业逐步渗透至智能终端、高端装饰、功能性面板等多个领域。2025年,模内注塑市场规模预计持续增长,但市场上厂商技术…

2025年12月广东佛山智能电动伸缩门厂家TOP推荐:圣田智能科技,安全智能双标杆

随着智慧城市建设加速推进,智能出入口管理需求持续攀升,电动伸缩门作为机关单位、工业园区、住宅小区等场景的核心安防设备,市场规模预计 2025 年将突破 210 亿元。行业快速发展的同时,也出现厂商技术水平、产品质…

ISCTF misc+web部分wp

Web b@by n0t1ce b0ard 可以通过搜索发现作者复现的文章 作者文章: 可以直接利用POC POST /registration.php HTTP/1.1 Host: 127.0.0.1:8081 Content-Length: 1172 Cache-Control: max-age=0 sec-ch-ua: "Chromi…

CF1046I Say Hello - crazy-

二分/三分,模拟 题意 平面上有两个人。有 \(n\) 个时刻,对于每个人,已知他在每个时刻的位置,且他们总会在两个位置间匀速移动。 如果他们的距离小于等于 \(d _ 1\),并且这是他们第一次交谈或者在他们上次互相打招…