Menelusuri evolusi dari monolith ke SOA lalu microservices, ledakan cloud dan container yang membuat arsitektur ini praktis, mengapa ia populer di 2026, kompleksitas yang menyertainya, dan tren modular monolith sebagai titik awal yang lebih aman

Setelah di episode 0 kita menyiapkan environment — memastikan Bun, Docker, dan tooling lainnya siap — pada episode ini kita menarik napas sejenak dan memahami mengapa microservices ada. Arsitektur bukan sekadar pilihan gaya; ia adalah jawaban atas masalah nyata yang muncul saat aplikasi dan tim berkembang.
Mengapa harus memahami sejarahnya? Karena keputusan arsitektur paling mahal adalah yang dibuat tanpa memahami konteksnya. Kalian akan sering mendengar "pakai microservices saja" — padahal jawaban yang benar sering kali "mulai dari monolith". Memahami perjalanan dari monolith ke microservices akan memberi kalian naluri kapan harus pindah arsitektur, dan kapan tidak.
Aplikasi monolitik adalah cara paling alami membangun software: satu codebase, satu proses, satu deployment, dan (umumnya) satu database. Keunggulannya jelas — deployment simpel, debugging mudah karena semua kode di satu tempat, dan transaksi database tetap ACID.
Masalahnya muncul saat skala bertambah. Aplikasi e-commerce besar menjadi fat monolith: ratusan modul dalam satu codebase. Setiap perubahan kecil memaksa build dan deploy seluruh aplikasi. Tim yang bekerja di modul checkout tidak bisa deploy tanpa menunggu tim modul pembayaran. Satu bug di satu fitur bisa membawa seluruh aplikasi down. Skala per-fitur juga mustahil — kalian tidak bisa "menaikkan" hanya bagian keranjang jika menerima lonjakan traffic; yang bisa dinaikkan hanya seluruh aplikasi.
Sebelum microservices, dunia enterprise mencoba SOA (Service-Oriented Architecture). SOA membawa ide yang sama: pecah aplikasi ke layanan-layanan bisnis yang saling bicara. Tapi implementasi SOA klasik berat: bergantung pada ESB (Enterprise Service Bus) raksasa sebagai middleware terpusat, kontrak XML yang rumit, dan proses governance yang birokratis. Akibatnya, SOA sering terjebak menjadi "pusat kegagalan" baru — satu ESB raksasa yang lambat dan mahal.
| Aspek | Monolith | SOA klasik | Microservices |
|---|---|---|---|
| Granularitas | Satu unit besar | Layanan besar + ESB | Layanan kecil mandiri |
| Komunikasi | Function call | ESB/XML | REST/gRPC/event ringan |
| Database | Satu database | Shared database | Database per layanan |
| Deployment | Satu proses | Terpusat via ESB | Independen per layanan |
Ide memecah aplikasi bukan hal baru, tapi microservices baru praktis diadopsi sekitar 2014-2016. Pemicunya dua hal besar:
Di masa ini Martin Fowler & James Lewis menulis artikel terkenal Microservices (2014), dan nama tersebut menjadi istilah resmi. Kombinasi cloud + container mengubah microservices dari teori mahal menjadi praktik yang bisa dilakukan tim kecil sekalipun.
Layanan bisa dikembangkan, di-deploy, dan diskalakan secara independen. Tim produk tidak perlu menunggu tim pembayaran; fitur baru order-service bisa rilis minggu ini tanpa menyentuh layanan lain. Ini menyelesaikan masalah utama monolith: bottleneck koordinasi.
Setiap layanan bebas memilih stack terbaik untuk masalahnya. Layanan notifikasi yang I/O-heavy bisa pakai Go; layanan katalog yang butuh data kompleks bisa pakai Python; layanan lain cukup TypeScript. Microservices juga memungkinkan migrasi pelan-pelan — satu layanan di-refactor ke bahasa baru tanpa menulis ulang seluruh aplikasi.
Kalian hanya menaikkan layanan yang sibuk. Saat campaign berlangsung, hanya product-service dan api-gateway yang di-scale — payment-service yang jarang dipakai tetap ramping. Ini jauh lebih murah dibanding men-skala seluruh monolith.
Microservices membayar kemudahan operasional dengan kompleksitas sistem yang nyata:
Panggilan antar layanan melewati jaringan — dan jaringan bisa gagal, lambat, atau mengembalikan hasil tidak sesuai urutan. Konsep partial failure menjadi kenyataan: order-service bisa sukses, tapi payment-service down. Debugging lintas node jauh lebih sulit daripada stack trace satu proses: kalian harus menyusuri trace dari gateway ke database dan kembali.
Setiap layanan butuh CI/CD sendiri, monitoring sendiri, dan pipeline observability sendiri. Satu tim dengan 5 layanan = 5 pipeline, 5 guarded deploy, 5 set dashboard. Inilah mengapa observability, orchestration (Kubernetes), dan platform engineering menjadi profesi tersendiri.
Data tersebar di banyak database. Tidak ada join lintas layanan — kalian butuh event, aggregasi, atau duplikasi data yang disengaja (tentang ini di fase 3-4). Transaksi lintas layanan tidak bisa ACID; butuh saga pattern.
Tren penting 2026 adalah modular monolith sebagai langkah pertama yang lebih aman. Idenya: mulai dari satu codebase & satu deployment, tapi dengan batas modul yang tegas — setiap modul punya boundary domain sendiri, database schema terpisah di dalam satu database, dan API internal yang jelas. Saat volume tim dan traffic membenarkan, modul-modul ini bisa "diiris" menjadi microservices mandiri tanpa penulisan ulang besar-besaran.
Modules: [auth] [product] [cart] [order] [payment] [notification]
↓ (split saat volume tim/traffic memadai)
Services: auth → product → cart → order → payment → notificationNote
Di series ini kita bangun langsung sebagai microservices karena tujuannya belajar arsitekturnya. Tetapi prinsip yang sama berlaku: setiap layanan ditulis dengan boundary domain yang jelas seperti modul — kalian sudah membangun fondasi modular monolith sejak episode pertama, hanya terpisah menjadi proses yang berbeda.
Pada episode 1 ini, kalian telah menelusuri perjalanan arsitektur dari monolith, SOA, hingga microservices yang populer karena cloud dan container pada 2014-2016.
Inti yang harus dibawa pulang:
Di episode 2 selanjutnya, kita akan memilih konsep dasar & arsitektur utama microservices — service boundaries dengan DDD/bounded context, database per service, API gateway/BFF, komunikasi sinkron vs asinkron, dan mengenalkan studi kasus utama series: e-commerce tokokita. Sampai jumpa di episode 2!