Monolith dan Microservices
Memahami perbedaan dan pilihan antara monolith dan microservices
Monolith
- Satu aplikasi besar menangani semua fitur
- Semua kode dalam satu codebase
- Deploy sebagai satu unit
Keuntungan
- Sederhana untuk develop dan deploy awal
- Testing lebih mudah, semua kode tersedia
- Tidak perlu infrastruktur komunikasi antar service
- Debugging lebih mudah
Kekurangan
- Sulit scale bagian tertentu
- Tim bisa bentrok dalam satu codebase
- Tech stack terkunci
- Deploy harus seluruh aplikasi
Microservices
- Aplikasi dipecah menjadi service kecil independen
- Setiap service punya database dan logic sendiri
- Berkomunikasi via API atau message queue
Keuntungan
- Tiap service di-scale independen
- Tim pakai tech stack berbeda per service
- Deploy satu service tanpa mempengaruhi lainnya
- Tim kerja paralel lebih mudah
Kekurangan
- Kompleksitas infrastruktur lebih tinggi
- Distributed system lebih sulit debug
- Latency antar service jadi masalah
- Butuh orkestrasi dan monitoring canggih
Kapan Monolith
- Tim kecil kurang dari 10 developer
- Aplikasi masih sederhana
- Butuh cepat ke market
Kapan Microservices
- Tim besar dengan banyak developer
- Fitur butuh scale yang jauh berbeda
- Ingin deploy independen per fitur
Modular Monolith
- Kode tetap satu aplikasi tapi dipisah modul jelas
- Setiap modul punya boundary tegas
- Mudah dipindah ke microservices di masa depan
Service Communication
Synchronous (HTTP/gRPC)
- Service memanggil service lain dan menunggu response
- Lebih sederhana tapi membuat dependency antar service
Asynchronous (Message Queue)
- Service kirim pesan dan tidak perlu menunggu
- Lebih loose coupling, lebih scalable