Serverless - Lambda Function

Tổng quan
- Serverless là một mô hình (paradigm) mới, trong đó các lập trình viên không còn phải quản lý server nữa...
- Họ chỉ cần deploy code, deploy... các function!
- Ban đầu... Serverless đồng nghĩa với FaaS (Function as a Service).
- Serverless được tiên phong bởi AWS Lambda, nhưng hiện nay nó còn có ý nghĩa bao gồm bất kỳ thứ gì được quản lý sẵn (managed): "databases, messaging, storage, etc."
- Serverless không có nghĩa là không có server...
Nó chỉ đơn giản là bạn không cần phải quản lý / cấp phát (provision) / nhìn thấy chúng.
Các Serverless Service trong AWS
- AWS Lambda
- DynamoDB
- AWS Cognito
- AWS API Gateway
- Amazon S3
- AWS SNS & SQS
- AWS Kinesis Data Firehose
- Aurora Serverless
- Step Functions
- Fargate
Tại sao dùng AWS Lambda
Amazon EC2
- Máy chủ ảo trên nền tảng đám mây
- Bị giới hạn bởi RAM và CPU
- Luôn chạy liên tục
- Việc scale (mở rộng) yêu cầu can thiệp thủ công để thêm/bớt server
Amazon Lambda
- Hàm ảo – không cần quản lý server
- Bị giới hạn theo thời gian – chạy ngắn hạn
- Chạy theo yêu cầu (on-demand)
- Scale tự động!
Lợi ích của AWS Lambda
- Chi phí đơn giản:
- Tính phí theo số lần gọi và thời gian thực thi (compute time)
- Miễn phí 1.000.000 request AWS Lambda và 400.000 GBs thời gian thực thi mỗi tháng
- Tích hợp với toàn bộ hệ sinh thái dịch vụ của AWS
- Tích hợp với nhiều ngôn ngữ lập trình
- Node.js (JavaScript)
- Python
- Java
- C# (.NET Core) / PowerShell
- Ruby
- Custom Runtime API (được cộng đồng hỗ trợ, ví dụ như Rust hoặc Golang)
- Lambda Container Image
- Image container phải implement Lambda Runtime API
- Đối với các Docker image tùy ý (arbitrary), ECS / Fargate là lựa chọn phù hợp hơn
- Dễ dàng giám sát thông qua AWS CloudWatch
- Dễ dàng mở rộng tài nguyên cho từng hàm (lên đến 10GB RAM!)
- Tăng RAM đồng thời cũng tăng cả CPU và băng thông mạng
- Tích hợp với các AWS Service khác:

Ví dụ
Tạo ảnh Thumbnail

- Người dùng upload ảnh lên S3
- Một hình ảnh mới được upload vào một S3 bucket.
- Bucket này được cấu hình để trigger một Lambda function khi có đối tượng mới (
ObjectCreatedevent).
- Lambda được kích hoạt bởi sự kiện mới
- Lambda nhận sự kiện từ S3 bao gồm các metadata cơ bản như tên file, bucket, key,...
- Lambda function được viết để thực hiện các tác vụ xử lý ảnh (resize, crop, compress,...).
- Trong ví dụ này, Lambda tạo ảnh thumbnail từ ảnh gốc.
- Lambda xử lý và push kết quả
- Sau khi xử lý xong, Lambda thực hiện hai thao tác song song:
- Lưu ảnh thumbnail vào một bucket S3 khác hoặc thư mục khác
- Lambda ghi ảnh đã xử lý (thumbnail) vào một S3 bucket (hoặc folder) riêng biệt.
- Lưu metadata ảnh vào DynamoDB
- Lambda ghi lại metadata như:
image_name: tên ảnh gốcthumbnail_size: kích thước thumbnailcreated_at: thời gian tạo- Các thông tin khác (nếu cần: user, IP upload, ảnh gốc,...)
- Lambda ghi lại metadata như:
- Lưu ảnh thumbnail vào một bucket S3 khác hoặc thư mục khác
- Sau khi xử lý xong, Lambda thực hiện hai thao tác song song:
Serverless CRON Job

Bạn thấy bài này thế nào?