为什么在分布式系统中我们关心幂等性

3

我对RESTful API有一个问题 - 为什么在分布式系统中我们要关注幂等性。请问您能告诉我吗?

2个回答

5

如果一个服务是幂等的,那么当你多次调用该服务时,它会产生相同的最终结果。

在分布式系统中,当你调用某个服务/API时,服务可能会失败(更糟糕的是,它可能会超时并且没有向你返回失败响应)。在这种情况下,如果服务是幂等的,你可以简单地再次调用它(任意次数),而不用担心多次调用会产生负面影响。

如果服务不是幂等的,你就不能简单地再次调用它。你必须先检查前一次调用所采取的操作,然后根据其进行操作。


1
即使首先检查之前发生了什么也不一定在所有情况下都足够,因为两个并发进程可能同时查询现有状态,确定应该重试操作,然后重试,导致操作执行两次。您需要一些锁定机制或其他协议来确保不存在这样的竞争条件。 - Phil Frost

0

幂等性在分布式系统中尤为重要(也就是需要关注的事情)。通常,分布式系统包括大量的部件/组件,其中许多部件/组件将超出一个开发者对另一个开发者的控制。

Benefits include:
 * improved thread safety
 * minimize complexity
 * easier to document (thus consume)
 * easier to test
 * data and state integrity will generally be easier to manage

利用纯/幂等功能在某些情况下非常有用,特别是当您不知道调用方代码是否可能会垃圾邮件发送到您的接口之一,这可能会导致系统处于糟糕状态。此外,它使消费者文档更易于理解,并最小化了一些固有的复杂性,这些复杂性来自本质上不能保证线程安全的环境。

如果您需要更多或更具体的用例或示例,说明分布式系统为什么应该将幂等性视为其架构的一部分,请告诉我/我们。

干杯


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接