Mengenal Quarkus : Framework Java Untuk Aplikasi Cloud Native
Spring Boot dapat dibilang sebagai sebuah framework yang sudah menjadi standar de-facto di dalam pengembangan perangkat lunak berbasis Java. Kemudahan yang ditawarkan dibandingkan framework java yang lain dan ekosistem yang sudah besar da cukup stabil, membuat framework ini sangat populer. Namun Spring Boot, bukannya tidak memiliki kelemahan, banyaknya java reflection yang terlibat pada framework ini, membuat aplikasi yang dibangun spring boot akan memakan waktu yang cukup lama.
Sebenarnya proses startup time yang memakan waktu di dalam kisaran 30 detik bukanlah suatu masalah, jika itu dibangun di dalam lingkungan on premise ataupun pada data center di mana aplikasi diharapkan untuk berjalan secara kontinu. Namun masalah tersebut muncul di saat era cloud datang, di mana perusahaan akan ditagih sesuai dengan resource cloud yang digunakan, entah itu resource tersebut di-utilisasi atau tidak.
- Masalah Pada Framework Tradisional
Berdasarkan definisi aplikasi cloud-native yang telah saya sebutkan pada tulisan yang lalu. Maka menjalankan aplikasi yang secara tradisional berjalan di lingkungan on-premises tidak serta merta menjadikan aplikasi tersebut bersifat cloud native. Aplikasi cloud-native, memerlukan pemahaman terhadap produk – produk yang disediakan oleh penyedia cloud, sehingga sedari awal aplikasi java yang dibangun dapat memanfaatkan segala kelebihan yang ada pada lingkungan cloud. Sedangkan pendekatan yang umumnya engineer lakukan terhadap aplikasi mereka adalah hanya menggunakan VPS (Virtual Private Server), dengan hanya memindahkan VM yang awalnya ada pada baremetal ke VM yang disediakan oleh penyedia cloud. Maka tak jarang jika tak hati – hati, pendekatan tersebut akan membuat tagihan cloud malah lebih besar, ketimbang menggunakan pada lingkungan on-premises
Salah satu pendekatan yang murah meriah, yang ada pada lingkungan cloud, misalnya adalah menjalankan aplikasi pada Cloud Run yang disediakan oleh GCP. Di mana ketika aplikasi tersebut dijalankan pada Cloud Run, pengguna hanya akan ditagihkan sejumlah request yang diterima (ini belum terhitung sekian request pertama yang masuk free tier). Karena jika aplikasi mengalami idle selama beberapa waktu, aplikasi tersebut akan dimatikan, dan akan dinyalakan kembali begitu menerima request.
Nah, di sinilah masalahnya. Aplikasi Spring Boot yang memakan startup time berkisar 30-detik, tentu tidak ideal jika di jalankan pada lingkungan seperti misalnya pada Google Cloud Run. Sehingga diperlukan pendekatan yang berbeda yang memungkinkan aplikasi mampu memiliki startup time yang seketika begitu menerima request dari User. Solusinya adalah dengan menghilangkan JVM, dan me-compile aplikasi java ke dalam native image dengan menggunakan GraalVM. Namun Spring Boot, meskipun memiliki dukungan terhadap GraalVM, masih sering menemui masalah karena tidak semua starter yang ada pada Spring Boot mampu diubah menjadi native, tanpa tweaking yang cukup menguras waktu.
Salah satu framework java alternatif selain Spring Boot untuk membangun aplikasi dengan startup time sangat pendek adalah Quarkus.
- Apa itu Quarkus?
Lalu apa itu Quarkus ? Menurut situs resminya, Quarkus adalah :
A Kubernetes Native Java stack tailored for OpenJDK HotSpot and GraalVM, crafted from the best of breed java libraries and standards
Kubernetes Native Java Stack, maksudnya adalah Quarkus adalah framework yang memang sedari awal dirancang untuk dapat dijalankan pada environment yang dikontainerisasi seperti halnya Kubernetes. Jika aplikasi java anda dijalankan pada lingkungan kubernetes, tentu aplikasi tersebut harus dapat dijalankan dengan startup time sesingkat mungkin. Karena pod di dalam kubernetes akan dapat dengan mudah dihancurkan dan dibuat ulang. Namun definisi tersebut bukan berarti aplikasi Quarkus hanya dapat dijalankan pada Kubernetes. Anda juga dapat menjalankan Quarkus pada lingkungan lain yang memiliki pendekatan serupa, yaitu menjalankan aplikasi yang dikontainerisasi, seperti misalnya pada Google Cloud Run.
Tailored for OpenJDK HotSpot and GraalVM. Maksudnya, framework yang dibangun menggunakan Quarkus, dirancang untuk dapat dijalankan secara optimal baik itu pada JVM HotSpot dan dapat dicompile menjadi native, dengan GraalVM, sehingga menghasilkan aplikasi dengan startup time lebih cepat dan mengurangi penggunaan memori secara signifikan. Di mana penggunaan pendekatan terakhir ini, ideal untuk aplikasi cloud native.
Best of Breed Java Libraries and Standard. Definisi ini adalah salah satu definisi penting berikutnya, di mana Quarkus mengintegrasikan library – library dan framework yang sudah teruji di ekosistem java, sehingga memudahkan programmer java untuk dapat beralih ke Quarkus. Mempelajari sebuah teknologi baru bisa dibilang sebagai sebuah investasi, dan tentu kita tidak ingin dengan mempelajari framework baru, maka kita harus mempelajari teknologi yang sepenuhnya berbeda yang membuat programmer menghabiskan waktunya untuk mempelajari teknologi tersebut ketimbang mengerjakan project yang memiliki nilai ekonomi bagi sebuah perusahaan.
Bandingkan ketimbang anda harus beralih ke sebuah bahasa pemrograman baru seperti Rust, atau Go, yang juga digadang – gadang bahwa aplikasi yang dibangun dengan teknologi tersebut memiliki waktu startup time lebih cepat daripada aplikasi Java tradisional. Maka investasi yang dibuat akan jauh lebih mahal, dimana selain harus mempelajari bahasa pemrogramannya, juga perlu mempelajari ekosistem-nya, baik itu library, ataupun framework – framework lain yang diperlukan. Dan tentu itu akan menguras waktu. Cost of learning, akan jauh lebih murah jika kita hanya mempelajari framework Quarkus, dengan teknologi – teknologi yang sudah kita kenal sebelumnya, dengan standar Jakarta EE yang biasanya sudah umum dipelajari oleh programmer java,