Membedah kapan serverless tepat dan kapan justru mahal: model biaya FaaS yang dihitung presisi, arsitektur event-driven dengan Lambda dan event bus, pola saga untuk proses bisnis panjang, serta orkestrasi workflow tanpa mengorbankan observability

Setelah di episode 12 kalian bisa merancang migrasi berbasis 6R dan solusi hybrid dengan konektivitas andal, episode ini membahas gaya solusi yang paling menonjol dalam brief klien beberapa tahun terakhir: serverless dan event-driven. Permintaannya hampir selalu sama — "kata orang serverless lebih murah" — dan tugas SA adalah menjawabnya dengan angka, bukan mode.
Mengapa perlu kehati-hatian? Karena serverless adalah trade-off yang nyata: ia menghilangkan manajemen server dan menyala otomatis saat trafik datang, tetapi memperkenalkan cold start, batas eksekusi, dan model biaya yang bisa melampaui container pada throughput tinggi. Keputusannya harus turun dari karakter workload — persis seperti kerangka episode 4.
FaaS (Function as a Service) dibayar dua dimensi: jumlah invokasi dan GB-detik (memori × durasi eksekusi). Mari hitung skenario konkret:
Workload A : 2 juta request/bulan, rata 200 ms @ 512 MB
Lambda : 2 jt x ($0.20/jt) + 2 jt x 0.2 s x 0.5 GB x $0.0000166667/s/GB
= $0.40 + $3.33 ~= $3.73/bulan -> serverless JAUH murah
Container: 1 instance kecil 24/7 ~= $8-15/bulan -> serverless menang
Workload B : 300 juta request/bulan konstan, rata 200 ms @ 512 MB
Lambda : $60 + $500 ~= $560/bulan
Container: 4 instance medium + autoscaling ~= $180-250/bulan -> container menangKesimpulan desainnya tegas:
Pola solusi serverless yang sehat selalu berbentuk event chain: sesuatu terjadi → event diterbitkan → fungsi bereaksi. Untuk studi kasus tiket, modul penerbitan e-tiket cocok direpresentasikan begini:
Keunggulan bentuk ini pada lonjakan trafik: saat sale membuka 50.000 user serentak, antrean menyerap tekanan dan fungsi scale-out otomatis — tidak ada kapasitas yang harus disiapkan manual. Ini persis NFR-02 studi kasus kita.
Aturan-aturan desain yang menjaga arsitektur tetap waras:
Contoh definisi fungsi dengan guardrail eksplisit:
Resources:
TicketIssuer:
Type: AWS::Serverless::Function
Properties:
Runtime: nodejs22.x
MemorySize: 512
Timeout: 30
ReservedConcurrentExecutions: 100
Events:
PaymentConfirmed:
Type: EventBridgeRule
Properties:
Pattern:
source: [payments]
detail-type: [payment.confirmed]
Policies:
- DynamoDBCrudPolicy: { TableName: !Ref ProcessedEvents }Baris ReservedConcurrentExecutions penting: membatasi fungsi agar storm retry dari satu consumer tidak menghabiskan kuota akun dan menenggelamkan fungsi lain.
Di arsitektur event-driven, transaksi ACID lintas service tidak lagi tersedia. Penggantinya adalah pola saga: rangkaian transaksi lokal dengan compensating action jika salah satu langkah gagal.
Untuk alur pembelian tiket:
Langkah : lock kursi -> charge kartu -> issue tiket -> kirim email
Kompensasi: release kursi <- refund <- void tiket <- (tidak perlu)
Gagal di charge? -> jalankan release kursi, status order = FAILED_PAYMENT
Gagal di issue ? -> refund otomatis + release kursi, status = REFUNDEDDua varian implementasi:
| Varian | Cara Kerja | Cocok |
|---|---|---|
| Choreography | Tiap service bereaksi ke event, tanpa koordinator | Saga pendek, langkah sedikit |
| Orchestration | Satu orchestrator memandu langkah & kompensasi | Alur panjang, butuh visibilitas status |
Untuk saga 4+ langkah seperti di atas, saya rekomendasikan orchestration via workflow engine (Step Functions, Durable Functions, Workflows) karena status proses terlihat, retry dan compensasi terdefinisi deklaratif, dan debugging tidak bergantung pada membaca log lima service.
Note
Workflow engine modern (Step Functions dsb.) juga menggantikan pola cron-server: scheduler memicu fungsi periodik tanpa VM yang harus tetap hidup. Banyak "server kecil penganggur" di data center lama bisa diganti cara ini saat migrasi dari episode 12.
Harga dari decoupling adalah kesulitan melihat alur end-to-end. Tiga kontrol wajib di solusi event-driven:
Tambahkan metrik bisnis di pipeline (tiket terbit per menit, lag email) — di serverless, indikator paling awal masalah sering bukan error rate, melainkan lag antar-event yang merayap naik.
Inti yang harus dibawa pulang:
Di episode 14 selanjutnya kita akan membahas container & Kubernetes solutions — strategi containerization untuk aplikasi lama maupun baru, kapan K8s layak diambil (dan kapan overkill), serta mendesain platform container yang operasional oleh tim kalian. Sampai jumpa di episode 14!