Jika kamu adalah seseorang yang mengikuti film atau cerita fiksi ilmiah, mungkin akan membayangkan monolith adalah sebuah objek asing berukuran besar dan keberadaannya mencolok karena berbeda dengan lingkungan sekitarnya. Meskipun ada kemiripan dengan definisi tersebut, tetapi bukan itu yang akan kita bahas.
Dalam ranah pengembangan sistem perangkat lunak, monolith adalah sebuah model arsitektur di mana sebuah sistem dibangun dalam satu codebase yang sama. Misalnya pada sebuah situs belanja online terdapat beberapa bagian fitur seperti otorisasi pengguna, keranjang belanja, pembayaran, pengiriman, dan lainnya. Keseluruhan fitur tersebut dibangun secara terintegrasi pada satu codebase yang sama.
Hal tersebut berbeda dengan pendekatan arsitektur microservice. Di dalam microservice, masing-masing fitur atau komponen akan menjadi servis yang saling terpisah satu dengan lainnya. Tiap-tiap servis ini nantinya akan saling berkomunikasi melalui protokol khusus, salah satunya dengan gRPC. Tiap service ini bisa jadi dibangun menggunakan bahasa pemrograman ataupun basis data yang terpisah.
💻 Mulai Belajar Pemrograman
Belajar pemrograman di Dicoding Academy dan mulai perjalanan Anda sebagai developer profesional.
Daftar SekarangKelebihan Arsitektur Monolith
Nah, dari beberapa perbedaan tersebut, apa yang menjadi kelebihan ketika menerapkan pendekatan microservice?
1. Pengembangan lebih mudah
Pendekatan monolith bisa dibilang sebagai cara tradisional dalam mengembangkan sebuah perangkat lunak. Sebuah tim bisa dengan cepat membangun fitur baru karena tidak banyak stack atau peralatan yang perlu dipelajari. Misalnya stack yang dikuasai mayoritas anggota tim saat ini adalah PHP maka tim tersebut dapat memutuskan untuk membangun aplikasi monolith berbasis PHP. Proses transfer knowledge antar-anggota tim bisa lebih mudah karena aplikasi dibangun menggunakan satu stack yang sama.
2. Testing dan debugging lebih mudah
Arsitektur monolith juga memungkinkan kita untuk dapat mengetes sistem dengan lebih mudah. Hal ini karena fitur dan komponen aplikasi berada dalam satu codebase sehingga dapat berkomunikasi secara langsung tanpa memerlukan protokol khusus. Ini berbeda dengan microservice yang perlu menyiapkan servis-servis berkaitan serta memikirkan cara komunikasi antara servis satu dengan lainnya.
3. Deployment lebih sederhana
Proses deployment aplikasi monolith jauh lebih sederhana karena semua fitur/komponen berada pada satu codebase yang sama. Hal ini berbeda dengan pendekatan microservice yang perlu memikirkan strategi deployment untuk masing-masing service yang dijalankan.
Batasan ketika Menerapkan Monolith
Selain kelebihan-kelebihan di atas, arsitektur ini juga memiliki beberapa keterbatasan yang dapat kamu simak di bawah ini.
1) Usaha ekstra untuk menjaga kode agar tetap bersih
Seiring berjalannya waktu, codebase aplikasi monolith pasti akan bertambah besar dan kompleks. Hal ini tentu menjadi tantangan tersendiri dalam menjaga kode agar tetap bersih, mudah dibaca, dan dipahami. Belum lagi ketika ada seorang engineer baru yang bergabung dalam tim. Jika belum terbiasa bekerja dengan codebase besar, bisa jadi mereka akan merasa terintimidasi karena banyaknya aspek dan komponen yang perlu dipelajari.
2) Skalabilitas
Ketika aplikasi tidak mampu menangani kebutuhan karena lonjakan pengguna, opsi yang tersedia adalah menaikkan sumber daya keseluruhan (vertical scaling) atau membuat beberapa instance dari aplikasi (horizontal scaling). Pada aplikasi monolith, kita tidak bisa mengatur skalabilitas di level fitur/komponen. Hal ini karena tiap komponen bukanlah servis yang berjalan secara independen.
3) Perubahan
Mengubah kode pada aplikasi monolith bisa menjadi satu hal yang menakutkan. Bisa jadi kode yang diubah menjadi dependensi di banyak tempat oleh beberapa komponen yang berbeda. Satu perubahan kecil bisa berpengaruh besar terhadap keseluruhan aplikasi. Tugas ini bisa menjadi semakin sulit jika kita tidak mendesain dan memelihara kode aplikasi dengan baik.
Memilih Arsitektur yang Tepat
Oke, sekarang kita sudah sedikit paham tentang karakteristik aplikasi monolith secara umum. Beberapa kelebihan di atas mungkin tidak 100% relevan di setiap tim. Hal ini karena memilih arsitektur aplikasi bukan hanya perkara teknis saja, tetapi juga ada faktor lain yang perlu diperhatikan, misalnya ukuran tim dan ketersediaan sumber daya. Pendekatan monolith cocok digunakan jika kamu sedang merintis sebuah startup, di mana hanya terdapat beberapa engineer saja yang bertugas membangun aplikasi.
Pada skala organisasi yang lebih besar, bisa jadi pendekatan monolith menjadi kurang relevan karena keterbatasan dalam berkolaborasi. Di tahap ini, beberapa perusahaan mungkin akan beralih ke pendekatan microservice sembari merestrukturisasi organisasinya. Namun, ada juga perusahaan seperti Basecamp yang tetap memilih bertahan dengan monolith dengan segala konsekuensinya. Mereka bahkan dengan bangga dan sadar memilih untuk memaksimalkan pendekatan ini; kemudian menyebutnya Majestic Monolith.
Keterbatasan yang dimiliki aplikasi monolith sebenarnya bisa diakali dengan menerapkan praktik-praktik engineering lainnya. Misalnya untuk menjaga kode agar tetap bersih, kita dapat memasang linter atau pun **menerapkan praktik code review. Lebih lanjut lagi, kita bisa menggunakan pendekatan Domain-Driven Design (DDD) untuk memodelkan proses bisnis menjadi bentuk kode agar lebih mudah dipahami. Kemudian kita juga bisa menerapkan automated testing untuk mengurangi kekhawatiran ketika membuat perubahan pada kode.
Akhir kata, kita perlu berdiskusi dan memikirkan baik-baik sebelum memutuskan akan menggunakan arsitektur seperti apa. Jangan sampai keputusan yang diambil hanya berdasar pada jargon-jargon atau tren di luar sana, tanpa memahami konteks kebutuhan, juga keadaan tim saat ini.