AWS SQS+Lambda 实现订单异步处理

Serverless 事件驱动架构通过解耦组件提升系统弹性。以下使用 AWS SQS(消息队列)Lambda(无服务器计算) 实现订单异步处理流程:


架构流程
  1. 订单提交

    • 用户提交订单后,应用将订单数据封装为 JSON 消息发送至 SQS 队列。
    • 示例消息结构:
      {
        "order_id": "ORD-2023-001",
        "items": [{"id": "A1", "quantity": 2}],
        "total_price": 29.99
      }
      

  2. 消息队列(SQS)

    • SQS 作为缓冲层,存储消息并确保至少一次投递(at-least-once delivery)。
    • 关键配置:
      • 可见性超时(Visibility Timeout):控制消息重新投递间隔(默认 30 秒)。
      • 死信队列(DLQ):处理连续失败的消息。
  3. 事件触发 Lambda

    • SQS 自动触发 Lambda 函数(事件源映射)。
    • Lambda 从队列拉取消息并执行订单处理逻辑(如库存扣减、支付验证)。
  4. 异步处理(Lambda 函数)

    • Python 示例代码:
      import json
      def lambda_handler(event, context):
          for record in event['Records']:
              message = json.loads(record['body'])
              order_id = message['order_id']
              # 核心处理逻辑(伪代码)
              deduct_inventory(message['items'])
              send_confirmation_email(order_id)
              print(f"Processed order: {order_id}")
      


优势
  1. 弹性扩展
    • Lambda 根据队列深度自动扩容(例如突发流量下启动数百实例)。
  2. 解耦与容错
    • 订单提交与处理分离:前端服务无需等待处理完成。
    • SQS 重试机制保障消息不丢失(配合 DLQ 处理异常)。
  3. 成本优化
    • 按实际执行时间计费(Lambda 的 100ms 粒度计费)。

部署步骤
  1. 创建 SQS 标准队列(例如 orders-queue)。
  2. 编写 Lambda 函数(Python/Node.js),配置 SQS 为事件源。
  3. 设置权限:Lambda 执行角色需包含 sqs:ReceiveMessage 权限。
  4. 测试:通过 AWS CLI 发送测试消息:
    aws sqs send-message --queue-url https://sqs.us-east-1.amazonaws.com/123456789/orders-queue \
    --message-body '{"order_id":"TEST-001", "items":[]}'
    

注意事项

  • 消息幂等性:Lambda 函数需支持重复消息处理(例如通过 order_id 去重)。
  • 批处理大小:调整 BatchSize(单次拉取消息数,默认 10)以平衡吞吐与延迟。

此方案适用于电商、物流等高并发场景,兼顾可靠性与开发效率。

更多推荐