上一篇(L14)

下一篇(L16)

FaRM(分布式内存计算系统)

概述

FaRM 是一个高性能的分布式内存计算系统,其主要特点包括:

  • 高性能:在 90 台机器上实现 1.4 * 10^8 TPS;
  • 运行环境:仅在一个数据中心内运行,确保数据中心不能出现故障;
  • 串行化支持:支持可串行化的事务处理;
  • 数据分片;
  • 非易失性 DRAM;
  • 内核旁路技术:利用 Kernel Bypass 技术,解决 CPU 和网络瓶颈,避免操作系统与网卡的交互;
  • RDMA:通过 RDMA 允许网卡从远程服务器读取内存;
  • 乐观并发控制;

神奇的Farm(FaRM)系统:同时实现CAP特性

在内存中运行事务,确保所有数据一致性;

通过配置管理器(CM)和 Zookeeper,保存区域编号及主/备机的映射;

通过区域(可比作字节数组,2G)存储对象,并提供唯一 ID(区域号 + 偏移量)来实现分区容忍性;

每个对象的头部包含一个 64 位数,表示锁和版本号(1 + 63)。

内核旁路技术

FaRM 通过内核旁路技术:分离控制层和数据层,将数据包处理、内存管理、处理器调度等任务转移到用户空间,内核仅负责部分控制指令;

数据包进入后,通过一个 goroutine 轮询接收,避免触发中断,从而降低上下文切换的消耗;网卡有排序队列、接收和发送队列,这些队列直接映射到应用层的地址空间;

发送 RDMA 包实际上类似于远程调用;

挑战:事务中使用rdma

乐观并发控制解决:

  1. 加锁(写):在事务提交前对所有涉及的资源加锁(Test and Set);
  2. 验证(读):读取验证数据的一致性;
  3. 提交备份:向备份节点提交事务;
  4. 提交主节点:向主节点提交事务;
  5. 截断(Truncate):清理已完成的事务;

通过 RDMA 发送数据后,CM 要求主节点对所有涉及的资源加锁,成功后返回 ACK。此阶段进行冲突检测;

无锁化只读事务

只读事务可以无锁化,仅使用单边 RDMA,从而将锁和验证分成两个阶段,实现严格串行化(乐观并发控制);

容错机制:为了保证事务的持久化,FaRM 利用多副本(或其他存活的节点)来恢复数据;

CM 会更新配置,将数据区域映射到正常工作的节点,直到节点恢复;

总结

FaRM 系统具备以下优势:

  • :使用乐观并发控制,数据存储在内存中,复制仅发生在一个数据中心;
  • 硬件要求:节点硬件必须支持 RDMA 的网络接口卡(NIC)和非易失性 RAM(核心需要断电后仍能保存数据,易失性内存加备用电源也可行);
  • 原子读写 + 事务乐观并发控制 + 两阶段提交