Jika kamu adalah seseorang yang ikuti film atau cerita fiksi ilmiah, mungkin dapat memikirkan monolith adalah sebuah objek asing berukuran besar dan keberadaannya mencolok sebab berbeda bersama lingkungan sekitarnya. Meskipun ada kemiripan bersama definisi tersebut, tetapi bukan itu yang dapat kami bahas.
Dalam ranah pengembangan proses perangkat lunak, monolith adalah sebuah type arsitektur luxury real estate in israel di mana sebuah proses dibangun dalam satu codebase yang sama. Misalnya pada sebuah situs belanja online terkandung lebih dari satu anggota fitur layaknya otorisasi pengguna, keranjang belanja, pembayaran, pengiriman, dan lainnya. Keseluruhan fitur berikut dibangun secara terintegrasi pada satu codebase yang sama.
Hal berikut berbeda bersama pendekatan arsitektur microservice. Di dalam microservice, masing-masing fitur atau komponen dapat jadi servis yang saling terpisah satu bersama lainnya. Tiap-tiap servis ini nantinya dapat saling berkomunikasi lewat protokol khusus, tidak benar satunya dengan gRPC. Tiap layanan ini sanggup jadi dibangun memakai bahasa pemrograman ataupun basis data yang terpisah.
Kelebihan Arsitektur Monolith
Nah, dari lebih dari satu perbedaan tersebut, apa yang jadi berlebihan disaat menerapkan pendekatan microservice?
1. Pengembangan lebih ringan
Pendekatan monolith sanggup dibilang sebagai langkah tradisional dalam mengembangkan sebuah perangkat lunak. Sebuah tim sanggup bersama cepat membangun fitur baru sebab tidak banyak stack atau peralatan yang kudu dipelajari. Misalnya stack yang dikuasai mayoritas anggota tim selagi ini adalah PHP maka tim berikut sanggup menentukan untuk membangun aplikasi monolith berbasis PHP. Proses transfer data antar-anggota tim sanggup lebih ringan sebab aplikasi dibangun memakai satu stack yang sama.
2. Testing dan debugging lebih ringan
Arsitektur monolith juga terlalu mungkin kami untuk sanggup mengetes proses bersama lebih mudah. Hal ini sebab fitur dan komponen aplikasi berada dalam satu codebase agar sanggup berkomunikasi secara segera tanpa butuh protokol khusus. Ini berbeda bersama microservice yang kudu mempersiapkan servis-servis berkenaan dan juga memikirkan langkah komunikasi pada servis satu bersama lainnya.
3. Deployment lebih simple
Proses deployment aplikasi monolith jauh lebih simple sebab seluruh fitur/komponen berada pada satu codebase yang sama. Hal ini berbeda bersama pendekatan microservice yang kudu memikirkan strategi deployment untuk masing-masing layanan yang dijalankan.
Batasan disaat Menerapkan Monolith
Selain kelebihan-kelebihan di atas, arsitektur ini juga miliki lebih dari satu keterbatasan yang sanggup kamu simak di bawah ini.
1) Usaha ekstra untuk menjaga kode agar tetap bersih
Seiring berjalannya waktu, codebase aplikasi monolith tentu dapat makin tambah besar dan kompleks. Hal ini tentu jadi tantangan tersendiri dalam menjaga kode agar tetap bersih, ringan dibaca, dan dipahami. Belum lagi disaat ada seorang engineer baru yang berhimpun dalam tim. Jika belum miliki kebiasaan bekerja bersama codebase besar, sanggup jadi mereka dapat jadi terintimidasi sebab banyaknya faktor dan komponen yang kudu dipelajari.
2) Skalabilitas
Ketika aplikasi tidak sanggup mengatasi kebutuhan sebab lonjakan pengguna, opsi yang ada adalah meningkatkan sumber energi keseluruhan ( vertical scaling ) atau membawa dampak lebih dari satu instance dari aplikasi ( horizontal scaling ). Pada aplikasi monolith, kami tidak sanggup menyesuaikan skalabilitas di level fitur/komponen. Hal ini sebab tiap komponen bukanlah servis yang berlangsung secara independen.
3) Perubahan
Mengubah kode pada aplikasi monolith sanggup jadi satu perihal yang menakutkan. Bisa jadi kode yang diubah jadi dependensi di banyak daerah oleh lebih dari satu komponen yang berbeda. Satu pergantian kecil sanggup berpengaruh besar pada keseluruhan aplikasi. Tugas ini sanggup jadi tambah sulit jika kami tidak mendesain dan pelihara kode aplikasi bersama baik.
Memilih Arsitektur yang Tepat
Oke, saat ini kami telah sedikit sadar tentang karakteristik aplikasi monolith secara umum. Beberapa berlebihan di atas mungkin tidak 100% relevan di tiap tiap tim. Hal ini sebab pilih arsitektur aplikasi bukan cuma perkara teknis saja, tetapi juga ada faktor lain yang kudu diperhatikan, sekiranya ukuran tim dan ketersediaan sumber daya. Pendekatan monolith sesuai digunakan jika kamu sedang menjalani sebuah startup, di mana cuma terkandung lebih dari satu engineer saja yang bertugas membangun aplikasi.
Pada skala organisasi yang lebih besar, sanggup jadi pendekatan monolith jadi tidak cukup relevan sebab keterbatasan dalam berkolaborasi. Di step ini, lebih dari satu perusahaan mungkin dapat berubah ke pendekatan microservice sembari merestrukturisasi organisasinya. Namun, ada juga perusahaan layaknya Basecamp yang tetap pilih bertahan bersama monolith bersama segala konsekuensinya. Mereka apalagi bersama bangga dan sadar pilih untuk memaksimalkan pendekatan ini; kemudian menyebutnya Majestic Monolith .
Keterbatasan yang dimiliki aplikasi monolith sesungguhnya sanggup diakali bersama menerapkan praktik-praktik engineering lainnya. Misalnya untuk menjaga kode agar tetap bersih, kami sanggup memasang linter atau pun **menerapkan praktik code review. Lebih lanjut lagi, kami sanggup memakai pendekatan Domain-Driven Design (DDD) untuk memodelkan proses usaha jadi bentuk kode agar lebih ringan dipahami. Kemudian kami juga sanggup menerapkan automated testing untuk mengurangi kegelisahan disaat membawa dampak pergantian pada kode.