Fault tolerance via idempotence

Fault tolerance via idempotence
复制标题

DOI:
10.1145/2429069.2429100
复制
发表时间:
2013-01
期刊:
--
影响因子:
--
通讯作者:
Ganesan Ramalingam;K. Vaswani
Ganesan Ramalingam;K. Vaswani
中科院分区:
其他
文献类型:
--
作者:
Ganesan Ramalingam;K. Vaswani

文献摘要

被引文献

相似文献

由于分配的陷阱,例如流程和通信失败,构建分布式服务和应用程序都具有挑战性。这些问题的自然解决方案是检测潜在的故障,并重试失败的计算和/或重新发送消息。确保在这种环境中的正确性需要分布式服务和应用程序必须具有责任感。在本文中,我们研究了过程故障,重复消息和持力相关的方面。我们首先引入了一种简单的核心语言(基于受现代分布式计算平台启发的lambda演算。该语言正式化了服务,重复请求,过程失败,数据分区和本地原子交易的概念,这些交易仅限于单个商店。我们然后对用这种语言编写的应用程序进行正式的(通用)正确性标准,包括掌握(捕获所需的安全属性)和失败 - 捕获所需的进度属性语言支持可以用其他有用的结构(例如补偿)来丰富,同时保留了无协调的分散性。在f#和c#中识别monad(及其变体),并利用我们的实现在Windows Azure上构建了现实的应用程序。我们发现,单元的运行时开销较低,并导致更多声明性应用程序。
Building distributed services and applications is challenging due to the pitfalls of distribution such as process and communication failures. A natural solution to these problems is to detect potential failures, and retry the failed computation and/or resend messages. Ensuring correctness in such an environment requires distributed services and applications to be idempotent. In this paper, we study the inter-related aspects of process failures, duplicate messages, and idempotence. We first introduce a simple core language (based on lambda calculus inspired by modern distributed computing platforms. This language formalizes the notions of a service, duplicate requests, process failures, data partitioning, and local atomic transactions that are restricted to a single store. We then formalize a desired (generic) correctness criterion for applications written in this language, consisting of idempotence (which captures the desired safety properties) and failure-freedom (which captures the desired progress properties). We then propose language support in the form of a monad that automatically ensures failfree idempotence. A key characteristic of our implementation is that it is decentralized and does not require distributed coordination. We show that the language support can be enriched with other useful constructs, such as compensations, while retaining the coordination-free decentralized nature of the implementation. We have implemented the idempotence monad (and its variants) in F# and C# and used our implementation to build realistic applications on Windows Azure. We find that the monad has low runtime overheads and leads to more declarative applications.