如何使我的 Lambda 函数保持幂等性,以防止我的应用程序中出现不一致和数据丢失?
最近更新时间:2019 年 5 月 28 日
我听说,我应该使我的 AWS Lambda 函数代码保持幂等性。该如何操作?
简短描述
在编程中,幂等性是指应用程序或组件识别重复事件并进行相应响应,以防止重复、不一致或数据丢失的能力。
要使您的 AWS Lambda 函数保持幂等性,需要通过函数逻辑设计来正确处理重复的事件。幂等函数逻辑减少下列情况的可能性更高:
- 不必要的 API 调用
- 代码处理时间
- 数据不一致
- 限制
- 延迟
解决方法
要使您的函数保持幂等性,函数代码必须能够正确验证输入事件并确定之前是否已经处理过相关事件。应用程序的工作原理决定了实现这一目的的最佳方式。请参阅下面的示例函数逻辑和最佳实践,以了解相关指导意见。
示例函数逻辑
此示例 Lambda 函数逻辑适用于大多数情况:
- 提取输入事件的唯一属性值。(例如,交易或购买 ID。)
- 检查控制数据库(例如 Amazon DynamoDB 表)中是否已经存在该属性值。
注意:将 AWS 服务添加到您的架构可能会产生额外的成本。有关更多信息,请参阅 Amazon DynamoDB 定价或 AWS 定价。 - 如果已经存在某个唯一值(表明存在重复事件),则会从容地终止执行(即不会引发错误)。如果不存在某个唯一值,则继续正常执行。
- 函数成功完成工作后,将在控制数据库中包含一条记录。
- 完成执行。
最佳实践
在设计 Lambda 函数时请注意以下有关幂等性的最佳实践:
- 在开发应用程序之前就计划好幂等性功能。
- 确保您的 Lambda 代码在处理重复事件时从容终止。抛出错误可能会导致 Lambda 或者调用函数的其他服务不断重试。
- 需要时更改 Lambda 函数超时设置,以便正确处理完整的执行。如果使用单独的服务来保存数据和控制重复事件,可能需要对 HTTPS 终端节点的 API 调用。因此需要的时间可能会超过默认的三秒。
- 测试并尽可能优化您的函数,模拟真实场景和请求速率。这对于帮助防止幂等性逻辑产生超时、过长延迟或瓶颈等副作用至关重要。
- 使用 DynamoDB 等可以轻松升级并且提供高吞吐量的服务来存储会话数据。
相关信息
编程模型(AWS Lambda 开发人员指南)