Meningkatnya pengguna internet dalam kehidupan sehari-hari berimbas pada meningkatnya kebutuhan akan pelayanan bersifat daring. Hal ini memaksa para penyedia layanan untuk mengembangkan aplikasi berbasis microservices yang mendukung horizontal scaling. Tentunya dalam hal ini kode-nya dapat direplikasi dan ditempatkan di banyak server agar dapat melayani pengguna yang luar biasa banyaknya dalam satu satuan waktu. Bagi para pengembang aplikasi yang biasa bekerja dengan paradigma monolithic, data selalu menjadi tantangan utama baik config file, basis data, upload file, maupun asset-asset lain yang mendukung layanan tersebut. Kebingungan sering ditemukan tentunya bagi para pemula dalam memigrasi aplikasi monolothic mereka untuk membangun aplikasi microservices pertama-nya.
Monolithic Application
Sesuai namanya Monolithic application merupakan aplikasi yang berdiri sendiri dalam memberikan seluruh layanannya. Sekat antara bagian Frontend, Backend, Data Access Object (DAO), dan Application Programming Interface (API), hanyalah sebuah abstraksi di dalam lautan kode mereka sendiri. WordPress, Yii, dan Codeigniter, merupakan salah satu contoh Content Management System (CMS) yang bersifat monolithic.
Tantangan klasik dalam mengelola aplikasi monolithic yaitu kompleksitas dan error propagation. Saat kompleksitas suatu layanan meningkat, jumlah kode bertambah, maka aplikasinya semakin gemuk, dan besar. Naas-nya error pada satu file dapat menjalar ke tempat lainnya dan tidak menutup kemungkinan menyebabkan satu layanan down. Hampir seluruh website yang dibangun pada tahun 2010 ke bawah menggunakan paradigma ini.
Secara pribadi tidak ada yang salah dalam pengembangan aplikasi berbasis monolithic, bahkan saya menganjurkan untuk “start small”. Mulai dengan aplikasi berbasis monolithic, dan secara perlahan ditingkatkan untuk menggunakan aplikasi berbasis microservices.
Kelahiran Docker & Microservices Application
Kelahiran docker pada tahun 2013 membawa semangat baru dalam pengembangan aplikasi yang melahirkan konsep microservices. Aplikasi yang sebelumnya sangat besar dapat dipecah-pecah dan dapat direplikasi dengan mudah dengan teknologi container yang ditawarkan oleh docker. Dengan konsep ini pemisahan Frontend, dan Backend menjadi sangat jelas karena biasanya terpisah secara kontainer. Bahkan dewasa ini sudah banyak website yang Frontend dari tiap-tiap produknya sudah terpisah secara kode. Hal ini tentunya membuat pengembang aplikasi cukup berfokus pada satu titik saja yang memang sedang mereka kerjakan tanpa takut error pada titik tersebut terpropagasi pada layanan-layanan lainnya.
Mempersiapkan Migrasi ke Aplikasi Microservices
Saat anda yakin untuk melakukan migrasi Aplikasi Monolothic Anda ke Microservices, saya ucapkan selamat. Artinya layanan anda sudah cukup kompleks, atau ramai pengunjung. Anda akan memasuki babak baru dari pengembangan aplikasi anda. Berikut beberapa hal yang dapat saya berikan masukan untuk membantu proses migrasi tersebut.
1. Dokumentasi Arsitektur Layanan
Berbeda dengan saat anda hanya memiliki satu server, suatu layanan yang terdiri dari beberapa aplikasi yang ditempatkan dalam beberapa server, wajib memiliki dokumentasi arsitektur layanan yang baik. Layaknya seorang mandor bangunan yang menggunakan cetak biru bangunan dalam menelusuri suatu kerusakan, Solution Architect anda akan menggunakan cetak biru layanan untuk menelusuri permasalahan server anda. Usahakan untuk mendokumentasikannya lengkap dengan Network Zone, IP Server, Port yang terbuka, Layanan yang tersimpan di dalam server, dan OS masing-masing server.
2. Deployment dan Provisioning
Dengan banyaknya jumlah server, cara-cara lama anda dalam melakukan deployment atau provisioning perlu diperbaharui dengan rolling deployment. Misal anda memiliki tiga server, satu server ditarik dari layanan untuk diperbaharui software-nya dan secara bergantian dilakukan hal serupa untuk kedua server lainnya. Hal ini bertujuan agar layanan tidak terganggu saat anda melakukan Deployment. Banyak CI/CD tools seperti Gitlab Runner, Jenkins, Github Actions yang dapat disambungkan dengan Kubernetes, Docker Swarm dan Ansible untuk melakukan Rolling Deployment.
3. Secret & Environment Variable
Jika sebelumnya anda cukup memasukkan satu Environment Variable, kini anda perlu memasukkannya sebanyak jumlah server / layanan yang anda miliki. Sebaiknya anda menggunakan tools untuk provisioning Environment Variable serta secret dengan tools seperti Vault dari Hashicorp. Teknologi macam ini biasanya akan selalu mengecek perubahan environment variable server dengan yang tersimpan di sistem setiap 30 detik. Bila ada perubahan, mereka akan secara langsung mengubahnya.
4. Basis Data
Meskipun penambahan jumlah server tidak mengharuskan menambahkan jumlah basis data, namun perlu dipastikan bahwa tidak terjadi racing condition antara request dari server ke-1 dan request dari server ke-2 dalam menciptakan data transaksi khususnya pada basis data yang bersifat BASE (Basically Available, Soft State, and Eventually Available) seperti MongoDB, dan kebanyakan basis data NoSQL lainnya.
5. Asset
Asset tidak lagi dapat disimpan atau diunggah secara lokal, melainkan di layanan S3 (Simple Storage Service), bucket, blobstorage atau sejenisnya untuk menghindari asset not found. Misal suatu penggantian foto profil ditangani oleh server ke-1 dan disimpan secara lokal, maka server ke-2 yang melayani get profile tidak dapat menampilkan foto tersebut. Hal ini juga sebaiknya diimplementasikan pada asset-asset yang bersifat statis.
6. Log & Monitoring
Tentunya saat kita bicara log dan monitoring akan lebih mudah untuk melihatnya pada satu tempat. Dengan bertambahnya jumlah server, file log pun tersebar dan menjadi tantangan dalam melakukan monitoring. Di sinilah tools-tools untuk meramu log dari berbagai server untuk terkumpul jadi satu wajib digunakan. Splunk, Grafana, dan produk-produk elastic search dapat dengan mudah membantu anda meramukan semua log anda menjadi satu untuk siap dipantau.
Tentunya masih banyak lagi hal-hal yang perlu diperhatikan dalam membangun aplikasi berbasis microservices. Khususnya untuk teknologi spesifik, maupun spesifik bidang-nya. Namun enam pillar ini dapat menjadi pintu masuk anda dalam memigrasi dan membangun aplikasi microservices pertama kalian. Happy Coding.