一句话:提出 Phoenix 容错协议,使分布式图分析无需检查点即可恢复并保证正确结果,且无故障时无额外开销。
Phoenix 解决分布式内存图分析应用的 fail-stop 故障恢复问题。传统检查点方法需将整个计算回滚到故障前状态,可能带来开销或只能得到近似结果。Phoenix 的核心洞察是无需完整回滚,只需把状态调整到最终能产生正确结果的状态;它用薄 API 让程序员指定必要调整,并实现为通信与同步基础。无故障执行时它无可观测开销,且能容忍任意数量故障并保证结果正确。作者将其集成到 D-Galois,在两个生产集群评估:无故障时比 GraphX 快约 24 倍;相比 D-Galois 的检查点重启,Phoenix 无故障无额外开销而检查点有 31% 开销,发生故障时通常也更优,尤其少量主机同时故障时。
This paper presents Phoenix, a communication and synchronization substrate that implements a novel protocol for recovering from fail-stop faults when executing graph analytics applications on distributed-memory machines. The standard recovery technique in this space is checkpointing, which rolls back the state of the entire computation to a state that existed before the fault occurred. The insight behind Phoenix is that this is not necessary since it is sufficient to continue the computation from a state that will ultimately produce the correct result. We show that for graph analytics applications, the necessary state adjustment can be specified easily by the programmer using a thin API supported by Phoenix. Phoenix has no observable overhead during fault-free execution, and it is resilient to any number of faults while guaranteeing that the correct answer will be produced at the end of the computation. This is in contrast to other systems in this space which may either have overheads even during fault-free execution or produce only approximate answers when faults occur during execution. We incorporated Phoenix into D-Galois, the state-of-the-art distributed graph analytics system, and evaluated it on two production clusters. Our evaluation shows that in the absence of faults, Phoenix is ~24x faster than GraphX, which provides fault tolerance using the Spark system. Phoenix also outperforms the traditional checkpoint-restart technique implemented in D-Galois: in fault-free execution, Phoenix has no observable overhead, while the checkpointing technique has 31% overhead. Furthermore, Phoenix mostly outperforms checkpointing when faults occur, particularly in the common case when only a small number of hosts fail simultaneously.