FaRM(分布式内存计算系统)
概述
FaRM 是一个高性能的分布式内存计算系统,其主要特点包括:
- 高性能:在 90 台机器上实现 1.4 * 10^8 TPS;
- 运行环境:仅在一个数据中心内运行,确保数据中心不能出现故障;
- 串行化支持:支持可串行化的事务处理;
- 数据分片;
- 非易失性 DRAM;
- 内核旁路技术:利用
Kernel Bypass
技术,解决 CPU 和网络瓶颈,避免操作系统与网卡的交互; - RDMA:通过 RDMA 允许网卡从远程服务器读取内存;
- 乐观并发控制;
在内存中运行事务,确保所有数据一致性;
通过配置管理器(CM)和 Zookeeper,保存区域编号及主/备机的映射;
通过区域(可比作字节数组,2G)存储对象,并提供唯一 ID(区域号 + 偏移量)来实现分区容忍性;
每个对象的头部包含一个 64 位数,表示锁和版本号(1 + 63)。
内核旁路技术
FaRM 通过内核旁路技术:分离控制层和数据层,将数据包处理、内存管理、处理器调度等任务转移到用户空间,内核仅负责部分控制指令;
数据包进入后,通过一个 goroutine 轮询接收,避免触发中断,从而降低上下文切换的消耗;网卡有排序队列、接收和发送队列,这些队列直接映射到应用层的地址空间;
发送 RDMA 包实际上类似于远程调用;
挑战:事务中使用rdma
乐观并发控制解决:
- 加锁(写):在事务提交前对所有涉及的资源加锁(Test and Set);
- 验证(读):读取验证数据的一致性;
- 提交备份:向备份节点提交事务;
- 提交主节点:向主节点提交事务;
- 截断(Truncate):清理已完成的事务;
通过 RDMA 发送数据后,CM 要求主节点对所有涉及的资源加锁,成功后返回 ACK。此阶段进行冲突检测;
无锁化只读事务
只读事务可以无锁化,仅使用单边 RDMA,从而将锁和验证分成两个阶段,实现严格串行化(乐观并发控制);
容错机制:为了保证事务的持久化,FaRM 利用多副本(或其他存活的节点)来恢复数据;
CM 会更新配置,将数据区域映射到正常工作的节点,直到节点恢复;
总结
FaRM 系统具备以下优势:
- 快:使用乐观并发控制,数据存储在内存中,复制仅发生在一个数据中心;
- 硬件要求:节点硬件必须支持 RDMA 的网络接口卡(NIC)和非易失性 RAM(核心需要断电后仍能保存数据,易失性内存加备用电源也可行);
- 原子读写 + 事务乐观并发控制 + 两阶段提交