Xử lý vòng đời sự kiện: retry, DLQ và destinations

Ứng dụng Serverless với AWS Lambda

Claudio Canales

Senior DevOps Engineer

Tổng quan vòng đời sự kiện

  • Lambda gọi handler của bạn.
  • Handler hoặc thành công hoặc thất bại.
  • Khi thất bại, retry và định tuyến quyết định bước tiếp theo.

Luồng vòng đời sự kiện

Ứng dụng Serverless với AWS Lambda

Hai cách lỗi xuất hiện

Đồng bộ

  • Caller chờ và nhận phản hồi lỗi.

Bất đồng bộ

  • Caller được xác nhận trước.
  • Lambda retry trong nền.
  • Xử lý lỗi phụ thuộc chế độ gọi.

Đường lỗi: đồng bộ vs bất đồng bộ

Ứng dụng Serverless với AWS Lambda

Retry là bình thường

  • Retry thường là tính năng, không phải lỗi.
  • Lỗi tạm thời có thể thành công ở lần sau.
  • Retry có thể gây xử lý trùng; handler phải tính đến.

Ẩn dụ gọi lại nhiều lần

Ứng dụng Serverless với AWS Lambda

Retry theo thời gian

  • Retry có thể khắc phục lỗi tạm thời.
  • Nhưng cùng một sự kiện có thể chạy nhiều lần.
  • Cần idempotency và xử lý lỗi rõ ràng.

Dòng thời gian thử lại

Ứng dụng Serverless với AWS Lambda

Khi retry nguy hiểm

  • Retry rủi ro khi công việc không idempotent.
  • Ví dụ: trừ thẻ, gửi email.
  • Dùng khóa idempotency và cập nhật an toàn để tránh hại do trùng lặp.

Mục tiêu idempotency

Ứng dụng Serverless với AWS Lambda

DLQ (Dead-Letter Queue)

  • Nơi an toàn cho sự kiện vẫn lỗi sau retry.
  • Thường là hàng đợi SQS, dịch vụ hàng đợi của AWS.
  • Kiểm tra payload, sửa lỗi, rồi re-drive.

Ẩn dụ đồ thất lạc của DLQ

Ứng dụng Serverless với AWS Lambda

DLQ và destinations

Ẩn dụ đồ thất lạc của DLQ

  • Thu nhận sự kiện lỗi sau retry.
  • Dùng để điều tra.

Sơ đồ định tuyến Destinations

  • Định tuyến kết quả khi thành công hoặc thất bại.
  • Xây dựng luồng thành công và thất bại rõ ràng.
Ứng dụng Serverless với AWS Lambda

Destinations: tuyến thành công và thất bại

  • Khi thành công, gửi kết quả tới onSuccess.
  • Khi thất bại, gửi chi tiết tới onFailure.
  • Khiến bước tiếp theo rõ ràng.

Sơ đồ định tuyến Destinations

Ứng dụng Serverless với AWS Lambda

Tinh chỉnh chính sách retry

  • Tinh chỉnh số lần Lambda retry.
  • Giới hạn tuổi sự kiện để tránh xử lý dữ liệu cũ.
  • Retry nhiều tăng độ tin cậy nhưng tăng trùng lặp và độ trễ.

Điều khiển chính sách retry

Ứng dụng Serverless với AWS Lambda

Tuổi sự kiện tối đa: hạn dùng

  • Tuổi tối đa của sự kiện là một chính sách hết hạn.
  • Nếu sự kiện quá cũ, xử lý có thể vô nghĩa.
  • Đánh đổi: ít sự kiện muộn hơn, hành vi kịp thời hơn.

Ẩn dụ hết hạn tuổi sự kiện

Ứng dụng Serverless với AWS Lambda

Observability: xem ở đâu

  • Logs trả lời chuyện gì đã xảy ra.
  • Metrics trả lời tần suất xảy ra.
  • Alarms giúp bắt đột biến nhanh.

Logs vs metrics

Ứng dụng Serverless với AWS Lambda

Xử lý sự kiện thất bại

  • Kiểm tra payload và lỗi.
  • Sửa nguyên nhân gốc.
  • Re-drive sự kiện, rồi theo dõi lỗi và thông lượng.

Chu trình khôi phục sự kiện lỗi

Ứng dụng Serverless với AWS Lambda

Điểm chính

  • Độ tin cậy đến từ retry, định tuyến và observability.
  • Lỗi đồng bộ quay về caller.
  • Lỗi bất đồng bộ cần retry kèm DLQ hoặc destinations.
  • Giúp thất bại luôn hiển thị.

Sơ đồ công thức độ tin cậy

Ứng dụng Serverless với AWS Lambda

Ayo berlatih!

Ứng dụng Serverless với AWS Lambda

Preparing Video For Download...