Arsitektur microservice saat ini cukup banyak digunakan diberbagai pengembangan aplikasi. Ditambah lagi dengan kemudahan untuk mengelola microservice dengan adanya containerization menggunakan Docker dan orchestartion menggunakan Kubernetes.
Arsitektur ini digadang-gandang memiliki banyak kelebihan dibandingkan lawannya yakni arsitektur monolitik. Tapi, memang apa sebenarnya sih microservice itu? Dan emang benar bahwa banyak keuntungannya?
Definisi Arsitektur Monolitik dan Microservice
Membicarakan microservice, tentunya tidak akan lengkap jika tidak membawa lawan utamanya yakni arsitektur monolitik. Keduanya tentu memiliki definisi yang berbeda.
Microservice adalah arsitektur yang menekankan kepada banyak service atau aplikasi yang tidak terikat erat satu dengan lainnya (loosely coupled). Service ini memiliki tujuan yang sangat terfokus dan memiliki metode komunikasi antar service yang tidak berat.
Monolith adalah arsitektur dimana keseluruhan kode akan dikompilasi menjadi satu aplikasi (biasanya menjadi satu binary atau artifact) dimana aplikasi tersebut menjalankan seluruh proses yang dibutuhkan. Kebutuhan akan komunikasi kepada aplikasi atau service lain bisa jadi tidak ada, karena aplikasi ini telah mencakup seluruh kode yang dibutuhkan.
Perbedaan Microservice dan Monolitik
Berikut merupakan beberapa perbedaan yang umum pada arsitektur microservice dan monolitik,
Komponen | Monolitik | Microservice |
---|---|---|
Cakupan | Fungsionalitas yang dibutuhkan diimplementasikan secara lengkap dan menyeluruh pada satu codebase | Satu service fokus hanya pada satu fungsi |
Jumlah | Biasanya hanya menjadi satu artifak atau binari atau service | Dibutuhkan banyak service atau aplikasi yang saling berkomunikasi |
Komunikasi antar modul | Melalui function call pada kode tanpa perlu protokol eksternal khusus | Memerlukan protokol komunikasi yang ringan agar komunikasi antar service bisa berjalan baik |
Deployment | Biasanya lebih lambat karena perlu men-deploy kode yang besar pada satu waktu dan tidak fleksibel | Lebih fleksibel dan cepat, deployment dapat dilakukan terpisah untuk masing-masing service |
Perlu dicatat bahwa perbedaan di atas adalah secara umum. Implementasinya dapat berbeda-beda sesuai dengan kebutuhan.
Untuk lebih memahami perbedaan keduanya, coba simak gambar diagram berikut ini.
Perlu diperhatikan bahwa, baik microservice maupun monolitik dapat diimplementasi dengan modul atau package. Keduanya bisa sama-sama modular.
Tujuan Umum Penggunaan Microservice
Suatu aplikasi menggunakan arsitektur microservice biasanya karena tim tersebut ingin dapat membagi-bagi tanggung jawab kepada tim-tim kecil yang ada dengan lebih jelas.
Dengan menggunakan microservice, masing-masing tim dapat diberikan tanggung jawab untuk mengelola satu atau dua microservice yang memiliki fungsionalitas yang terfokus. Contohnya, tim payment hanya mengelola suatu microservice pembayaran yang fungsinya untuk mengintegrasikan berbagai jenis pembayaran dari pihak ketiga.
Tim ini biasanya sejumlah orang yang dibutuhkan untuk menghabiskan 2 loyang pizza. Di populerkan oleh Amazon, two-pizza teams ini menjadi salah satu pedoman (tak wajib) yang berkaitan erat dengan microservice.
Dengan menggunakan microservice ini, diharapkan tim-tim kecil tersebut menjadi lebih mandiri dan fokus dalam mengelola aplikasi yang dibuatnya.
Keuntungan dan Kerugian Penggunaan Microservice
Tentunya penggunaan microservice tidak akan menyelesaikan semua masalah yang ada di dunia ini. Pindah ke microservice bukan berarti aplikasi yang kamu buat menjadi tidak bermasalah sama sekali. Yuk, simak satu-satu kerugian dan keuntungan penggunaan arsitektur microservice ini.
Keuntungan
Mudah untuk mengerti kode suatu service. Karena suatu service hanya terfokus pada satu fungsi, kode yang dihasilkan juga seharusnya lebih mudah dimengerti.
Deployment lebih cepat dan ringan. Berbeda dengan monolitik yang perlu mengkompilasi keseluruhan kode untuk dapat melakukan deployment, microservice hanya tergantung pada satu service. Kamu bisa melakukan deployment hanya pada satu service tertentu tanpa terikat atau menunggu service yang lain.
Kesalahan bisa diisolasi. Ketika satu service bermasalah, service lain bisa tidak terganggu.
Tidak terikat pada satu teknologi. Masing-masing service bisa menggunakan teknologi yang berbeda-beda mulai dari bahasa, hingga hardware dan database yang digunakan.
Kerugian
Komunikasi antar service menjadi masalah kompleks. Beberapa masalah yang muncul mengenai komunikasi adalah: protokol komunikasi yang digunakan antar aplikasi, bagaimana satu service bisa tau letak service lainnya (service discovery), dan masalah yang terjadi jika terdapat perubahan API yang tidak kompatibel dengan versi sebelumnya.
Bisa jadi lebih mahal. Masing-masing service memiliki hardware dan databasenya sendiri dapat membuat ongkos untuk membuat service menjadi lebih mahal dibanding membuat modul baru pada arsitektur monolith.
Testing menjadi lebih sulit. Diperlukan integration testing dan end-to-end testing yang dapat memastikan bahwa setiap service dapat berkomunikasi dengan baik dan menghasilkan output yang diinginkan.
Debugging juga menjadi sulit. Bug bisa berada di salah satu service tetapi error terjadi di service yang lain. Bayangkan jika kamu memiliki banyak service, akan sangat sulit mengetahui dimana letak bugnya. Tracing menjadi salah satu solusi untuk hal ini.
Kapan Microservice dan Monolitik Digunakan
Keduanya sama-sama dibutuhkan dalam membuat suatu aplikasi atau software. Tidak ada yang benar-benar buruk maupun benar-benar baik. Semuanya tergantung dari kebutuhan dan konteks aplikasi yang dibuat.
Jika kamu baru akan membuat proyek, atau sedang membuat proyek yang memiliki cakupan fungsi yang kecil, gunakanlah monolitik. Cakupan yang kecil biasanya adalah aplikasi yang memiliki fungsionalitas yang sedikit.
Jika aplikasi yang kamu buat sudah semakin besar, dan kamu sudah membutuhkan tim kecil baru untuk mengelola aplikasimu, ada baiknya jika memulai menggunakan arsitektur microservice.
Selain itu, monolitik dan microservice juga dapat digabungkan jika memang dibutuhkan. Bisa saja kamu memiliki satu aplikasi utama yang masih monolitik, dan aplikasi-aplikasi pendukung yang menggunakan microservice.
Rangkuman
Jadi, tidak ada yang menang atau kalah diantara microservice dan monolitik! Keduanya digunakan pada kebutuhan yang berbeda.
Microservice adalah suatu arsitektur dimana terdapat banyak service yang saling berkomunikasi satu sama lain, dimana masing-masing service memiliki masing-masing fungsi yang terfokus.
Monolitik bukan berarti tidak modular, ya! Kamu bisa saja memiliki kode modular namun monolitik, karena kodemu berada di suatu codebase dan harus di-compile menjadi satu aplikasi utuh.
Ingat! Karena microservice lagi nge-tren bukan berati kamu harus menggunakannya. Pastikan kebutuhanmu, jika memang aplikasi yang kamu buat kecil, gunakanlah monolitik.