Invocation trong Lambda (Cách Lambda được gọi)
Lambda có nhiều cách gọi (Invoke) function, phụ thuộc vào event source:
Synchronous Invocation
- Caller (API Gateway, user request) chờ kết quả từ Lambda.
- Ví dụ: API Gateway → Lambda → trả response cho client
- Phù hợp cho request/response model (web, mobile backend).
Asynchronous Invocation
- Caller không chờ kết quả.
- Lambda sẽ lưu event, retry nếu thất bại (tối đa 2 lần theo default).
- Ví dụ: S3 event upload file → Lambda xử lý ở background.
- Phù hợp cho job xử lý bất đồng bộ (background tasks).
Event Source Mapping
- Dùng cho Stream-based Services như SQS, Kinesis, DynamoDB Streams.
- Lambda đọc message từ Stream/Queue và xử lý liên tục.
- Cơ chế polling tự động do AWS quản lý.
Lambda Triggers (Event Sources)
Lambda không tự chạy, nó chỉ chạy khi có Event đến từ Trigger.
- S3: trigger khi upload, update, hoặc xóa object.
- API Gateway / ALB: gọi Lambda khi có HTTP request.
- DynamoDB Streams: xử lý thay đổi dữ liệu theo thời gian thực.
- EventBridge (CloudWatch Events): trigger theo lịch hoặc sự kiện hệ thống.
- SNS: xử lý message theo mô hình pub/sub.
- SQS: xử lý message hàng đợi.
- Kinesis: xử lý stream dữ liệu lớn theo thời gian thực.
Concurrency trong Lambda
Concurrency là số lượng function có thể chạy đồng thời. Mỗi khi Lambda được gọi, AWS sẽ tạo một instance mới nếu chưa có instance “Warm”.
⚠️
Cơ chế hoạt động của Lambda, cách Lambda có thể tự động Scale:
- Mỗi event = 1 execution environment độc lập.
- AWS Scale bằng cách tạo nhiều environment song song khi có nhiều event.
- Giới hạn Concurrency mặc định = 1000 executions/region
Loại Concurrency
- Unreserved Concurrency
- Lambda scale tự động dựa trên request.
- Giới hạn tổng số concurrency trên tài khoản.
- Reserved Concurrency
- Giới hạn số lượng instance tối đa cho một function cụ thể.
- Giúp tránh việc function dùng hết tài nguyên tài khoản.
- Provisioned Concurrency
- Giữ sẵn một số instance “Warm” để tránh cold start.
- Dùng cho workload yêu cầu Low-latency.
Scaling trong Lambda
- Lambda tự động scale theo số lượng event đến.
- Mỗi function có thể mở rộng đến hàng nghìn instance song song.
- Với event source như SQS/Kinesis, tốc độ scale còn phụ thuộc vào số lượng message & partition/shard.
Ví dụ:
- API Gateway gửi 1000 requests cùng lúc → Lambda scale ra 1000 instance.
- SQS queue có 1000 messages, Lambda sẽ scale nhưng tốc độ xử lý phụ thuộc vào batch size & concurrency limit.
Throttling trong Lambda
Nếu vượt quá concurrency limit:
- Với synchronous invocation: request bị từ chối (
429 TooManyRequests). - Với asynchronous invocation: event được retry với backoff.
- Với event source mapping: Lambda tạm dừng đọc thêm dữ liệu cho đến khi có tài nguyên.
Ví dụ:
- Account có limit = 1000 concurrency.
- API Gateway bắn 1,000,000 request trong 1 giây.
- Kết quả: → 1000 request đầu → được xử lý | 999,000 request → bị từ chối (
429 TooManyRequests).
Tổng kết
- Lambda có 3 mô hình invocation: synchronous, asynchronous, event source mapping.
- Concurrency cho phép Lambda scale tự động, với các tùy chọn Reserved & Provisioned để kiểm soát.
- Lambda tích hợp nhiều trigger (S3, API Gateway, DynamoDB, SQS, SNS, Kinesis, EventBridge).
- Throttling xảy ra khi vượt concurrency limit, cần thiết kế retry và error handling hợp lý.