[TOCS13'] CORFU: A Distributed Shared Log

[TOCS13'] CORFU: A Distributed Shared Log

文章概况

这篇文章来自微软硅谷研究院和加州大学圣迭戈分校。

1. motivation

  • 现在的数据库系统为了能让数据库扩展到大规模集群上,通常使用数据划分的方法。然而他们采用开销很高的机制比如 two-phase locking两阶段锁 或者 centralized concurrency manager方法。同时为了构建可靠的分布式系统,通常核心会采用Paxos协议。
  • 这些实现方法都具有为了安全以及正确性牺牲了性能。

2. innovation

这篇文章提出CORFU,一种共享的全局日志,来在保证安全的前提下提升系统的性能。

一方面,CORFU构建的系统能够扩展到支持成百上千个客户端请求每秒。另一方面还能保证在故障发生或者异步操作情况下保证系统的强一致性(对标Paxos)。

3. implementation

CORFU是一个共享的日志,分布在多个存储节点中。主要优势是可扩展性,并且不会被单个主机的IO瓶颈限制。可以在不需要数据划分的情况下,保证可扩展性以及全局的数据一致性。

在CORFU中,共享日志中的每个位置对应到不同存储单元上的存储页集合中。这个映射关系存储在每个client上。为了读一个log中的特定位置,客户端使用自己本地存储的映射来确定它对应的物理存储页,然后直接向存储了对应存储页的存储单元发出读请求。为了APPEND数据,客户端首先确定共享日志中下一个可用的位置,(使用sequcencer节点来避免竞争),然后直接写到对应的物理单元中。

主要构成部件是一个sequencer,在log中,存储节点被划分为簇,然后簇之间采用链式复制方法进行数据传播。每个簇用来存储log地址的一个子集。每个客户端把一个全局的地址解析成一个节点的集合,然后解析到一个逻辑地址。每个客户端使用局部存储的全局地址空间中的映射来找到对应的节点集合,以及这些节点集合对应的逻辑地址。复制被写到一个客户端驱动的链式复制中,对每个复制的写都有确定的顺序,每个写直到存储节点通知操作成功才能继续。这样写延迟和复制的个数成线性可扩展关系。相比之下,基于大多数的协议,比如Raft, Paxos以及VRR在正常情况下对一个写操作的复制时间大概是一个RTT还回时间,并且和节点数目无关,但是这些协议为了容f个错需要2f+1个节点,而不是f+1个节点。

发布于 2017-03-28