GeminiDB的计存分离架构及ACID
一、存算分离架构的实现
1. 架构分层
GeminiDB的存算分离架构由两个核心层组成:
-
计算层(无状态节点):
- 功能:负责SQL解析、事务处理、查询优化、执行引擎、锁管理、缓存(MemTable)等逻辑运算。
- 节点类型:
- 主节点:处理写请求与事务协调。
- 只读节点:处理读请求,通过共享存储同步数据。
- 特点:无本地持久化数据,节点故障可秒级重建,支持弹性扩缩容。
-
存储层(DFV分布式存储系统):
- 功能:持久化数据文件(SST文件)、WAL日志、元数据;管理多副本同步、数据修复、压缩(Compaction)等。
- 核心组件:
- 共享存储池:所有计算节点访问同一份数据文件,避免数据冗余拷贝。
- 多副本引擎:默认三副本,基于Paxos/Raft协议实现多数派强一致。
- 特点:EB级容量扩展、跨AZ/Region容灾、数据自动修复。
2. 数据流与协作机制
-
写入流程:
- 计算层主节点接收写请求,生成WAL日志并写入存储层(需至少两个副本确认)。
- 数据变更暂存于内存MemTable,定期刷盘(Flush)到存储层的SST文件。
- 元数据变更(如新增SST文件记录)通过VersionEdit日志同步至所有计算节点。
-
读取流程:
- 计算节点从共享存储加载SST文件,结合内存MemTable合并最新数据视图。
- 只读节点直接访问存储层数据,通过回放WAL日志保持内存状态与主节点一致。
二、ACID特性的保障机制
1. 原子性(Atomicity)
- WAL日志与事务回滚:
- 事务的所有操作均记录到WAL日志。若事务未提交时发生故障,通过WAL中的Undo日志回滚已执行操作。
- 存储层确保WAL日志的原子写入:事务的完整日志要么全部持久化,要么全部丢弃。
- 分布式事务协调:
- 跨分片事务通过优化版两阶段提交(2PC)实现:
- Prepare阶段:各分片预提交并持久化WAL日志。
- Commit阶段:协调者收到所有分片确认后,提交事务并释放锁。
- 跨分片事务通过优化版两阶段提交(2PC)实现:
2. 一致性(Consistency)
- 多副本强一致协议:
- 存储层使用Paxos/Raft协议,写入需多数派副本确认(如三副本需至少两个确认),确保数据全局一致。
- 计算层通过全局快照隔离(SI)保证读取一致性:所有读操作基于同一逻辑时间戳的数据视图。
- 数据校验与修复:
- 定期对比副本间数据一致性,异常时触发自动修复(如基于WAL日志差异补全)。
3. 隔离性(Isolation)
- 多版本并发控制(MVCC):
- 每条数据记录包含版本号(由全局递增的LSN生成),读操作仅访问已提交的版本。
- 写操作不会阻塞读操作,避免锁竞争,提升并发性能。
- 锁管理优化:
- 行级锁:细粒度锁减少冲突,结合死锁检测机制(超时或等待图算法)自动解除死锁。
- 乐观锁:适用于低冲突场景(如计数器更新),通过版本号校验避免写冲突。
4. 持久性(Durability)
- WAL日志先行持久化:
- 事务提交前,其WAL日志必须持久化到存储层的多数派副本。
- 存储层数据文件(SST)通过Append-Only模式写入,避免数据覆盖损坏。
- 多级容灾:
- 数据副本跨AZ/Region分布,单机房故障不影响数据持久性。
- 存储层自动修复损坏副本,确保数据冗余度始终满足要求。
三、关键技术优化
1. 计算层性能优化
- 无锁架构与并行处理:
- 查询执行引擎采用多线程模型,并行处理JOIN、聚合等操作。
- 利用SIMD指令加速数据扫描(如列式存储场景)。
- 内存管理:
- MemTable分层缓存(LRU策略),热点数据常驻内存,减少存储层IO压力。
- 动态内存分配,避免OOM(Out Of Memory)导致节点崩溃。
2. 存储层效率优化
- LSM-Tree优化:
- 分层存储(L0到Ln),冷热数据分离,降低Compaction开销。
- 异步Compaction:由独立服务调度,不阻塞计算层读写操作。
- 智能索引:
- 自适应索引选择(如Bitmap索引、倒排索引),基于查询模式动态优化。
3. 弹性扩缩容
- 计算层秒级扩容:
- 新增只读节点无需数据迁移,启动后从共享存储加载元数据并同步WAL日志。
- 存储层透明扩容:
- 存储容量不足时自动扩容,业务无感知,数据分片(Shard)动态均衡。
四、典型场景与ACID验证
场景1:金融转账(跨行事务)
- 原子性:转账操作(扣款A、入账B)通过2PC保证全部成功或回滚。
- 一致性:事务提交后,A、B账户余额总和不变。
- 隔离性:MVCC确保其他事务在转账过程中看到的是提交前的余额。
- 持久性:WAL日志跨AZ持久化,即使主节点宕机,数据不丢失。
场景2:电商库存扣减
- 隔离性:行级锁防止超卖,同时MVCC支持高并发读库存。
- 持久性:库存变更日志实时写入存储层,保障秒杀活动数据安全。
五、与传统架构的对比
特性 | 传统数据库(如MySQL) | GeminiDB存算分离架构 |
---|---|---|
扩展性 | 垂直扩展(Scale-Up)为主 | 水平扩展(Scale-Out),计算与存储独立扩容 |
故障恢复 | 主从复制,分钟级切换 | 计算节点无状态,秒级切换(RTO<10秒) |
数据一致性 | 异步/半同步复制,最终一致 | 多副本强一致(Paxos/Raft) |
资源利用率 | 存储与计算耦合,易出现资源浪费 | 按需分配计算与存储资源,成本优化 |
总结
华为云GeminiDB通过存算分离架构实现了计算与存储资源的解耦,结合分布式一致性协议、WAL日志与MVCC等技术,在弹性扩展的同时保障了ACID特性。其核心优势包括:
- 高可用:计算节点无状态,故障秒级切换;存储层多副本跨AZ容灾。
- 强一致:基于Paxos/Raft的多数派写入,数据零丢失。
- 高性能:并行处理、内存优化与LSM-Tree设计支撑高并发场景。
- 低成本:存储与计算独立伸缩,避免资源浪费。
该架构尤其适用于金融、物联网、电商等对一致性、弹性与性能要求严苛的场景,是云原生分布式数据库的典型实践。