幂等性

通过在调用Durable functions时提供执行名称来实现幂等性(idempotency)。这可以防止在多次调用相同请求时产生重复执行。

当我们调用Durable functions时,我们可以提供一个执行名称Durable execution name )作为幂等性键。如果我们不提供,Lambda 会自动生成一个随机执行 ID。

在 Lambda 控制台中,并使用 Test 选项卡创建带有执行名称的测试事件。将 Execution name 设置为test-execution-1

image-20260301094602239

测试名称命名为test-idempotency-1, 使用以下 JSON payload:

{
    "itemName": "Charger",
    "customerId": "customer-456"
}

image-20260301094711356

保存,并点击 Test 并记录执行结果, 使用相同的执行名称再次选择 Test

观察到我们获得了相同的结果 - 没有创建新的执行

接下来,使用不同的执行名称进行测试:

Execution name 更改为test-execution-2, 使用相同的载荷选择 Test, 观察到我们获得了一个新的执行,结果可能有所不同

最后,使用相同的执行名称但不同的载荷进行测试, 将 Execution name 改回test-execution-1

使用不同的 JSON 载荷:

{
    "itemName": "Laptop"
    "customerId": "customer-999"
}

选择 Test, 观察到我们收到了一个错误 - Lambda 阻止使用相同名称但不同的payload启动新的执行。

image-20260301095033260

  • 相同执行名称 + 相同载荷 = 返回现有执行(幂等)
  • 相同执行名称 + 不同载荷 = 错误(防止数据不一致)
  • 不同执行名称 = 启动新执行

查看执行历史

导航到 Durable executions 选项卡以查看所有执行记录。注意:

  • 具有相同名称的执行只显示一条记录
  • 不同的执行名称会创建独立的条目
  • 每个执行维护其自己的状态和结果

image-20260301095104827

保留期

执行名称仅在保留期内是唯一的。执行完成后,Lambda 会在配置的保留期内保留其历史记录和检查点数据(默认:24 小时,最长:14 天)。

一旦保留期到期:

  • 执行历史记录将被删除
  • 执行名称将重新可用
  • 使用相同名称的新调用将启动全新的执行

根据我们的幂等性需求配置保留期。如果我们需要在更长时间内防止重复处理,请增加保留期

此幂等性功能对于构建可靠系统至关重要,在这些系统中,我们需要安全地多次调用操作而不产生重复。