AWS Lambda là nền tảng tính toán lý tưởng cho nhiều kịch bản ứng dụng, cung cấp cho bạn môi trường ở những ngôn ngữ đang được hỗ trợ từ AWS ( Java, Node.js, Python ).Khi sử dụng AWS Lambda, bạn cần chắc chắn về phần code của mình, phần việc còn lại bao gồm quản lý cân bằng bộ nhớ, CPU, mạng và các tài nguyên khác sẽ do AWS Lambda đảm nhiệm. Nó khá linh hoạt, có thể thực hiện và hoạt động các công việc với quyền cao nhất của mình, bao gồm lập dự phòng và hiệu năng, theo dõi các tài nguyên, bảo mật, deploy code.
So sánh EC2 và Lambda
EC2 | Lambda |
---|---|
Là server ảo trên cloud | Là các functions |
Giới hạn về RAM và CPU | Giới hạn về thời gian chạy |
Thường sẽ chạy liên tục | Sẽ chỉ chạy khi được request (thường sẽ ngắn) |
Chỉ có thể scale bằng cách tăng giảm số lượng (scale theo chiều ngang) – Cần setup thủ công | Cho phép chạy song song (tự có phần scale mà ko cần setup) |
- Giá rất rẻ: tiền được tính theo số lần invoke và thời gian thực hiện yêu cầu
- Free 1M request đầu và 400K GBs thời gian tính toán trong
FREE TIER
- Thương thích với các services khác một cách dễ dàng
- Với mỗi 1GB RAM thì sẽ tăng thêm 1 CPU ảo ⇒ tăng khả năng xử lý
Synchronous Invocations
- Các request được tạo bởi CLI, SDK, API Gateway, ALB
- Kết quả sẽ được trả về ngay lập tức sau khi được tính toán xong
- Phía client sẽ cần phải handle các lỗi
Asynchronous Invocations
- Các request được tạo bởi S3, SNS, Cloudwatch Event, Event Bridge…..
- Các request được đưa vào trong
event queue
- Có thể áp dụng cơ chế
retry on error
⇒ có thể dẫn tới việc một request được xử lý 2 lần - Có thể tích hợp thêm DLQ (cần config IAM role cho hợp lý)
- Tăng tốc quá trình xử lý ⇒ xử lý đồng thời nhiều request
mà KHÔNG cần chờ result
Event và Context
Event | Context |
---|---|
Chứa các thông tin về service đã invoke lambda | Chứa các thông tin về invocation của lambda, runtime env, các thông số cái đặt của lambda |
Chứa các thông tin về input, arguments, …. |
Destination
- Kết quả của một lambda có thể được chuyển tới một thực thể nào đó khác
- Chỉ hoạt động với Async Invocation hoặc Stream Invocation
- Có thể là:
- SQS
- SNS
- Một lambda khác
- Event bridge
- DLQ cho các request lỗi
Execution Role
- Cấp quyền để lambda có thể access đến các service khác trong AWS như là (S3, Cloudwatch, SQS, SNS)
- Có thể sử dụng các policy trong các service để thay thế – tuỳ trường hợp
Cold start
- Khi một lambda instance mới được khởi tạo, sẽ mất thời gian để load code, load các dependencies, SDK, ……
- Sau khi một lambda được invoke, lambda sẽ bị ‘cold’ sau khoảng 45’ nếu ko được invoke lại
- Các giải pháp có thể được sử dụng:
- Pinging lambda: qua event bridge
- Sử dụng Provisoned Concurrency: luôn có một số lượng lambda instance được tạo sẵn, nên có một số các requests đầu sẽ không rơi vào Cold start
Lambda dependencies
- Có thể zip file cùng với code lambda để push thẳng lên lambda (NẾU dung lượng file nhỏ hơn 50 MB)
- Nếu dung lượng file code quá lớn sẽ cần push lên S3 ⇒ thường sẽ dùng CloudFormation để update lambda
- SDK mặc định là sẽ có trong mỗi lambda function
Một số giới hạn
- RAM: từ 128GB tới 10GB (càng nhiều RAM thì có càng nhiều vCPU)
- Có thể có tối đa 6 vCPU
- Timeout: tối đa 900 secs – 15 phút
- Env variables: max 4 kbs
- /tmp space: 512 MBs to 10GBs
- Concurrencies: 1000 (có thể tăng thêm, cần liên hệ AWS supports)
Ưu và nhược điểm
Ưu điểm
- Khả năng scale dựa theo số lượng request/invoke.
- Không cần phải quản lý hạ tầng bên dưới vì nó đã được quản lý bởi AWS.
- Chỉ phải trả phí dựa trên thời gian Lambda xử lý.
Nhược điểm
- Thời gian xử lý tối đa là 300 giây (5 phút).
- Dung lượng ổ cứng tối đa có thể sử dụng là 512 MB.
- Dung lượng memory giới hạn trong mức 128-10240 MB.
- Không xử lý các request có dung lượng “body” lớn hơn 128 KB.
- Log chỉ được ghi vào CloudWatch của AWS.
- Đối với API, thời gian phản hồi sẽ chậm hơn đôi chút đối với những request đầu tiên vì “cold start” – thời điểm function trigger lần đầu tiên.
Tham khảo thêm: https://aws.amazon.com/lambda/?p=pm&c=la&z=4