Pola Arsitektur Serverless
Serverless bukan hanya Lambda. Ini adalah mindset: decompose aplikasi menjadi fungsi kecil yang event-driven.
Common Patterns
1. API Composition
// Setiap route = satu Lambda
POST /users → createUser Lambda
GET /users/:id → getUser Lambda
POST /orders → createOrder Lambda
// API Gateway routes ke Lambda yang tepat
2. Fan-out / Fan-in
// Upload video → trigger 3 Lambda parallel:
// 1. Generate thumbnail
// 2. Transcode ke HLS
// 3. Extract metadata
// Semua selesai → update database
3. Event-Driven Pipeline
// S3 upload → Lambda (validate) → SQS → Lambda (process) → DynamoDB
// Setiap step independen, bisa retry sendiri
Cold Start Deep Dive
- Init phase — Download code, start runtime, run global scope
- Node.js — ~200-500ms cold start
- Python — ~200-400ms
- Java — ~1-3s (JVM startup)
- .NET — ~500ms-1s
Optimization Tips
// ❌ Import semuanya
import AWS from "aws-sdk"; // 30MB+ package
// ✅ Import hanya yang dibutuhkan
import { DynamoDBClient } from "@aws-sdk/client-dynamodb"; // ~1MB
// ✅ Inisialisasi di luar handler (reuse antar invocations)
const db = new DynamoDBClient({});
export const handler = async (event) => {
// db sudah siap, tidak perlu init ulang
};
Kapan TIDAK Serverless?
- Long-running processes (> 15 menit)
- Consistent low-latency requirements (cold start tidak acceptable)
- Stateful applications (WebSocket, game server)
- High-throughput processing (cost bisa lebih mahal dari container)