问题
分布式快照是一类经典的协议,用于捕获机器间因果状态的一致视图。捕获一致全局状态的经典方法是Chandy-Lamport快照算法及其后续变体[11,26,33–35,41,57,60]。这些协议在整个系统中启动快照消息,触发了对每个节点的状态的本地捕获,从而保证了记录值的因果一致性。某些版本还支持捕获快照时正在运行的消息,即通道状态。
但现有的协议假定了一个孤立的进程来进行快照,并需要所有硬件的协调。这种假设与当今的云服务不符——协调所有相关流程的硬件并不总是可行的,假设机器与外部世界没有交互也不现实。
本文方法
本文提出了Beaver,一个实用的部分快照协议,可确保外部流量干扰下的因果一致性。提供了与其他快照协议相同的基本抽象——对于在快照中观察到其影响的任何事件,还包括“之前发生”的所有其他事件。
通过利用以下方式:
-
依赖于云数据中心中的两个功能:(a)插入入站流量子集的第4层软件负载均衡器(SLB)[15,28,49,50];(b)具有低时间层或其他稳定时钟的服务器[13,25,29,36,38,42,44,45]。
-
避免强制执行因果一致性,转而简单地检测何时可能发生了违规行为,称之为乐观网关标记(OGM)。
Beaver基于以下观察,在检查快照的因果一致性时,只有入站流量是相关的,而且只有其中的一小部分。更具体地说,将入站流量分为“因果无关”的消息(例如,异步触发,不是任何可传递因果关系的一部分)和“因果相关”的消息(例如,由快照后出站流量触发,但可能不携带任何该事实的标记)。Beaver的OGM机制是因果相关流量的近似但完全召回检测器。
Beaver利用现有基础设施软件负载均衡器(SLB)作为网关转发外部系统的请求,在转发时Beaver会修改负载均衡器以在快照过程中标记传入消息,确保系统中的节点可以识别它们是在检查点启动之前还是之后到达的。随后通过OGM识别快照因果一致的充分条件,若满足则得到快照,若不满足则拒绝并随后重试快照。
开源代码:https://github.com/eniac/Beaver
Beaver将协议与底层数据中心环境的规律紧密结合,利用软件负载平衡器在公共云中的放置及其相关的通信模式,只需要对当今的数据中心运营进行少量更改,而且消除了对现有通信的阻塞,对用户流量几乎没开销。通过广泛的试验台实验和新的用例证明了Beaver的有效性。
总结
针对公有云环境中实现分布式快照,现有方法需要所有节点参与快照协议,但云服务中由于客户端节点不可控,难以实现因果一致性快照。本文提出Beaver,实现部分快照。利用现有云服务中的软件负载均衡器(SLB),在转发请求时标记快照传入消息,确保系统识别快照顺序。在获取快照后,通过乐观网关标记(OGM)识别快照因果一致的充分条件,若满足则得到快照,若不满足则重试快照。