首页   >   新闻   >   文章

《向量数据库》第五章
- 2025 -
05/29
16:14
零号员工
发表时间:2025.05.29     作者:Jingyi     来源:ShoelessCai     阅读:13

《向量数据库》第五章 实现分布式向量数据库。

总览四部分,集群数据管理、集群流量管理、集群异常管理、分片。分布式数据库用 CAP 理论约束,Consistency, Availability, Partition tolerance。强一致性,所有副本成功写入之后,系统才写入操作成功。

一致性,数据副本在同一时刻保持一致;
可用性,持续提供服务的能力;
分区容错性,系统能在网络分区情况下,继续运行。


1.集群数据管理

数据管理的两个关键点:一是节点之间的数据复制。二是角色选择。例如,少部分节点拥有写入权限,其他节点只有接收权限。常用一致性,包括 Paxos, Raft, Gossip。

Paxos 协议,强一致,实现复杂,用消息传递和投票机制。
Raft 协议,引入主节点选举,基于日志的复制和安全性。
Gossip 协议,去中心化,不需要集中式控制节点。

NuRaft 基于 C++ 的轻量级的 Raft 版本。一是自动主节点选举,调节多节点角色。二是基于日志完成多节点之间的复制。

NuRaft 新特点,预投票、主节点选举、主节点过期、逻辑快照、SSL。使用 tcp/ip 协议。

NuRaft 对外接口:append_entries, add_srv, remove_srv。

NuRaft 内部接口:日志存储 API,状态机 API(状态转换的重要作用)。

建立主从关系,state_mgr 管理节点状态信息,state_machine 抽象类。

注意,如果是两个抽象类的实例,监听两个不同端口,跑在同一台机器上。



2.集群流量管理

方案,在 VdbServer 前设置代理服务器 ProxyServer,隐藏主从节点细节,代理建立联结,感知主从节点身份变化。

元数据管理,要有一定容灾能力。

ProxyServer,两个线程同时访问内存数据,会产生线程之间的数据竞争,导致程序异常退出。更好的方案,用交换数组和两个原子索引。这里作者没有展开,本站认为,根据并发控制原理,认为两个进程同时访问临界资源时候,有个处理的数组(坑位),还有个 Stand by 数组。两个数组的时钟可以异步。

自动剔除异常节点。



3.集群异常管理

节点之间数据复制后,通过代理服务器统一入口。发现新的主节点时候,自动选主节点,投票决定。更新节点。发现异常节点,开始计数,计数到阈值,则状态设置成【失败状态】。ProxyServer 会自动删除异常节点,需要人工补入新的节点。



4.分片

允许主节点进行执行写操作,水平扩展能力是个重要指标。每个分片,被分到两个不同的节点,这样一个节点故障之后,另一个节点可以使用。

ProxyServer 定期更新相关分片信息,频率不高情况下,用异步定时器,实现代码。

请求转发步骤。(1)提取分片键值;(2)分片键值不存在,通过广播转发;分片键值存在,计算请求得到分片 ID;(3)通过分片ID 选择满足条件的目标节点;(4)将请求转发到实际节点,返回结果。

广播的情况注意,按照 dist 排序选择前 K 个。



第五章小结。主从复制怎么实现?元数据模块能力是什么?代理模块作用是什么?分片策略是什么?



原文链接

长按/扫码,有您的支持,我们会更加努力!







TOP 5 精选
回到顶部   回上一级
写文章

最新资讯




直播笔记


热点话题


精品论文


有你的鼓励
ShoelessCai 将更努力





文档免费。保护知识产权,保护创新。