Cloud Run vs Lambda — so sánh & use cases
GCP Cloud Run vs AWS Lambda: so sánh 7 tầng, use-cases nên dùng cái nào, và decision guide nhanh.
Cloud Run vs Lambda
So sánh GCP Cloud Run và AWS Lambda theo 7 tầng, kèm use-cases và decision guide nhanh để chọn đúng nền tảng serverless.
GCP Cloud Run vs AWS Lambda
| Tiêu chí | Cloud Run GCP | Lambda AWS |
|---|---|---|
| ⬛ Infrastructure Layer | ||
| Runtime isolation | Container-based, OCI image. Tự build image → full control môi trường | Micro-VM (Firecracker). AWS quản lý runtime, bạn chỉ pack code + deps |
| Concurrency model | 1 instance xử lý nhiều request đồng thời (mặc định 80, max 1000). Giảm cold start đáng kể | 1 instance = 1 request. Scale out tuyến tính → nhiều cold start hơn |
| Cold start | Thấp hơn vì instance được tái dùng nhiều. Min instances = 0 cold start | Cao hơn ở workload burst. SnapStart (Java) giảm được nhưng chỉ một số runtime |
| Timeout | Max 60 phút (HTTP request timeout). Phù hợp long-running jobs | Max 15 phút. Không phù hợp với task dài |
| Resource limits | CPU: 8 vCPU, RAM: 32GB. Cấu hình linh hoạt hơn | CPU: 6 vCPU, RAM: 10GB. Đủ cho hầu hết use case |
| VPC & networking | Direct VPC egress. Cấu hình đơn giản hơn | VPC Lambda, nhưng lịch sử có vấn đề về cold start khi attach VPC (đã cải thiện nhiều) |
| 📦 Application Layer | ||
| Deployment unit | Docker image. Giống hệt local dev → production. Không bị lock vào runtime version | ZIP package hoặc container. ZIP đơn giản hơn nhưng kém linh hoạt |
| Global state / in-memory cache | Tận dụng được vì một instance phục vụ nhiều request. Connection pool, cache sống lâu hơn | Có thể dùng global scope nhưng không đảm bảo được reuse. Khó predictable |
| Concurrency config | Tùy chỉnh được (1 → 1000). Muốn Lambda behavior thì set --concurrency=1 |
Không thể config concurrency per-instance. Chỉ có reserved concurrency ở function level |
| HTTP/gRPC native | Native HTTP server. Bất kỳ web framework nào cũng chạy được không cần adapter | Cần Lambda adapter hoặc API Gateway mapping. Thêm một layer phức tạp |
| Dependency size | Không giới hạn (image-based). Build image bao nhiêu cũng được | 250MB unzipped (ZIP), 10GB nếu dùng container image |
| 🔗 Event & Integration Layer | ||
| Trigger ecosystem | HTTP trigger, Pub/Sub, Eventarc. Ít native trigger hơn | S3, SQS, SNS, DynamoDB Streams, Kinesis, EventBridge, API Gateway... Rất phong phú |
| Event-driven patterns | Cần thêm Pub/Sub hoặc Eventarc. Thêm hop | Event source mapping native. SQS → Lambda không cần middleware |
| Async invocation | Qua Pub/Sub hoặc Task Queue | Native async invoke với retry, DLQ, destination |
| 📊 Observability Layer | ||
| Logging | Cloud Logging auto. Stdout/stderr → log tự động | CloudWatch Logs auto. Cấu hình retention cần làm thủ công |
| Metrics | Cloud Monitoring: request count, latency, instance count. Nhưng ít granular hơn | CloudWatch: invocations, duration, errors, throttles, concurrent executions. Chi tiết hơn |
| Tracing | Cloud Trace tích hợp. OpenTelemetry dễ setup | X-Ray tích hợp. Nhưng cấu hình phức tạp hơn OTel |
| Alerting | Cloud Monitoring alerting. Tích hợp với PagerDuty, Slack qua Notification Channels | CloudWatch Alarms. Kết hợp SNS → Lambda → bất kỳ target nào |
| Cost observability | GCP Cost Management. Ít granular hơn theo function | Cost Explorer tag theo function. Dễ track cost per workload hơn |
| 💰 Cost Layer | ||
| Billing unit | CPU + RAM × thời gian xử lý thực tế. Concurrency → ít instance hơn → rẻ hơn | Request count + GB-seconds. Scale out nhiều → tổng GB-seconds cao hơn |
| Free tier | 2M requests/tháng, 360,000 vCPU-seconds, 180,000 GB-seconds | 1M requests/tháng, 400,000 GB-seconds |
| Idle cost | Min instances = 0 → không tốn khi idle. Min > 0 thì tốn ít hơn Lambda warm instances | Provisioned concurrency tốn tiền ngay cả khi idle |
| 🔒 Security Layer | ||
| IAM model | Service Account + Cloud IAM. Khá tương đồng | IAM Role + resource policy. Hai lớp → flexible nhưng phức tạp hơn |
| Auth built-in | Cloud IAP tích hợp sẵn. Dễ restrict access không cần custom code | Cần API Gateway + Cognito hoặc custom authorizer |
| Secret management | Secret Manager mount as env hoặc volume | Secrets Manager hoặc SSM Parameter Store |
| 🛠 DevOps / Operations Layer | ||
| Local dev experience | Docker container → chạy local y chang production. Không cần emulator | SAM local hoặc LocalStack. Không hoàn toàn giống production |
| CI/CD | Push image → deploy. Cloud Deploy hoặc bất kỳ pipeline nào | SAM/CDK/Serverless Framework. Nhiều lựa chọn nhưng thêm tooling |
| Rollback | Container tag → rollback bằng cách point lại image cũ | Lambda version + alias. Cần quản lý thêm |
| Ecosystem & tooling | Nhỏ hơn. Ít third-party tooling hơn | Powertools, Lambda Layers, Extensions, SAR. Ecosystem rất trưởng thành |
| Tổng kết | ✓ Thắng rõ về execution model, cost, dev experience | ✓ Thắng về event ecosystem, tooling maturity |
REST / gRPC API backend
Framework bất kỳ (FastAPI, Express, Go HTTP). Container chạy thẳng, không cần adapter. Concurrency cao → ít instance → rẻ hơn.
ML inference / AI serving
Model load 1 lần vào memory, phục vụ nhiều request. Lambda thì load lại mỗi instance → chậm, tốn tiền.
Long-running task (> 15 phút)
Export dữ liệu lớn, generate report nặng, video processing. Lambda bị giới hạn 15 phút cứng.
Connection pooling
DB connection pool sống xuyên suốt instance. Lambda scale out → N instance = N connection riêng → dễ exhausted pool.
Migrate từ container / K8s
App đang chạy Docker/K8s → deploy Cloud Run gần như không đổi code. Lambda đòi refactor sang handler pattern.
High-throughput, cost-sensitive
Traffic cao liên tục. Concurrency model → ít instance hơn Lambda → tổng chi phí thấp hơn rõ rệt.
Event-driven AWS native
Trigger từ S3, SQS, DynamoDB Streams, Kinesis, SNS. Không cần thêm bất kỳ middleware nào. Glue của AWS ecosystem.
Sporadic, unpredictable traffic
Traffic cực thưa, không đều. Lambda scale từ 0 không cần warm instance. Cloud Run vẫn làm được nhưng cấu hình phức tạp hơn.
AWS-heavy stack đã có sẵn
Đang dùng Step Functions, EventBridge, API Gateway, Cognito. Lambda tích hợp native, ít configuration hơn.
Strict isolation requirement
Multi-tenant code execution, mỗi request phải hoàn toàn cô lập memory. Untrusted code, third-party plugin runtime.
Scheduled jobs đơn giản
Cron job nhỏ, chạy vài phút, triggered bởi EventBridge. Lambda + EventBridge Rule là combo gọn nhất.
Cần cost granularity cao
Track chi phí chính xác theo từng function/team bằng tag. CloudWatch + Cost Explorer granular hơn Cloud Monitoring.
Webhook handler
GitHub, Stripe, Slack webhook. Traffic thưa, latency không cực kỳ critical. Cả hai giải quyết tốt như nhau.
Light data transformation
Parse, validate, transform payload đơn giản. Không phụ thuộc framework phức tạp. Chọn theo cloud đang dùng.
Notification service
Gửi email, push notification, SMS. Logic đơn giản, stateless. Cả hai fit tốt — quyết định bởi cloud stack hiện tại.