我想要让我的 AWS Lambda 函数保持幂等性,以防止我的应用程序中出现不一致和数据丢失。
简短描述
在编程中,幂等性是指应用程序或组件识别重复事件并防止数据重复、不一致或丢失的能力。要使您的 AWS Lambda 函数保持幂等性,需要通过函数逻辑设计来正确处理重复的事件。
幂等函数逻辑有助于减少以下问题:
- 不必要的 API 调用
- 代码处理时间
- 数据不一致
- 限制
- 延迟
解决方法
要使您的函数保持幂等性,函数代码必须能够正确验证输入事件并确定之前是否已经处理过该事件。应用程序的功能决定了编写代码的最佳方式。
请参阅下面的示例函数逻辑和最佳实践作为指导。
幂等 Lambda 函数逻辑示例
**注意:**以下示例 Lambda 函数逻辑适用于大多数使用场景。
1. 提取输入事件的唯一属性值。(例如,交易或购买 ID。)
2. 检查控制数据库中是否存在该属性值。(例如,Amazon DynamoDB 表。)
3. 根据结果,完成以下步骤:
如果存在唯一值,则结束操作,而不产生错误。
-或-
如果不存在唯一值,则执行您最初设计的操作。
**注意:**将 AWS 服务添加到您的架构可能会产生额外费用。有关更多信息,请参阅 Amazon DynamoDB 定价和 AWS 定价。
4. 如果函数工作完成后不存在唯一值,则将该记录包含在控制数据库中。
5. 完成操作。
**注意:**如果您的函数使用 Java 或 Python 运行时,请查看 AWS Lambda Powertools GitHub 页面上的 Python 和 Java 幂等性模块。
Lambda 函数幂等性最佳实践
- 在开发应用程序之前就计划好幂等性特征。
- 在您的 Lambda 代码处理重复事件时,确保它可以在不产生错误的情况下终止。
**注意:**抛出错误可能会导致 Lambda 或者调用函数的其他服务不断重试。
- 更改 Lambda 函数超时设置,以便正确处理完整的运行时。
**注意:**如果使用单独的服务来保存数据和控制重复事件,可能需要对 HTTPS 端点的 API 调用。对 HTTPS 端点的 API 调用所需的运行时可能会超过默认的 3 秒。
- 请尽可能测试和优化函数。模拟真实场景和请求速率。
**注意:**测试和优化幂等函数逻辑对于帮助防止潜在的副作用(如超时、过长延迟或瓶颈)至关重要。
- 使用 DynamoDB 等可以轻松扩展并提供高吞吐量的服务来存储会话数据。
**注意:**在对 Amazon Elastic Compute Cloud (Amazon EC2) 进行 API 调用时,该服务会提供 clientToken 参数。此参数可确保变异 API 请求只能成功完成其工作流一次,即使您使用同一 clientToken 发起多次重试。
相关信息
Lambda 编程模型
使用控制台创建 Lambda 函数
使用幂等 API 确保重试安全