Apa Itu Aplikasi Cloud Native? (Bagian 1)
Sekarang ini, kita sering mendengar istilah Cloud Native sering dipergunakan dan menjadi buzzword di setiap event tentang teknologi cloud computing, namun dikarenakan istilah ini merupakan istilah yang relatif baru, maka banyak diantara para pelaku IT sendiri tidak memahami tentang Cloud Native? Dalam tulisan ini kita akan dikusikan tentang apa itu Cloud Native, dan karakteristik apa yang perlu diperhatikan dari aplikasi Cloud Native
- Definisi Aplikasi Cloud Native
Ketika mengulas terkait aplikasi cloud native, adalah penting untuk memiliki kesamaan pemahaman terkait apa itu Cloud Native. Jika kita ingin merujuk kepada kapan istilah itu pertama kali digunakan, maka kita sampai pada sebuah blog post dari Paul Freemantle pada 25 Mei 2010 yang menuliskan tentang cloud native sebagai berikut
No matter how much better a highway is as a road, there is a limit to how much a cart can transport and how quickly.
You need vehicles that are designed for driving on a highway
Dalam tulisannya, Paul Freemantle menggunakan analogi jalan raya untuk menggambarkan konsep komputasi awan, sedangkan aplikasinya adalah kendaraan yang bergerak di atas jalan tersebut. Seberapa baik kualitas dari jalan raya dibangun, pada akhirnya akan bergantung pada jenis kendaraan yang melintasinya. Jika hanya pedati yang melintasi jalan tersebut, maka potensi maksimal jalan tersebut tidak dapat dimaksimalkan sepenuhnya. Namun, jika jalan tersebut digunakan oleh kendaraan bermotor yang dapat mencapai kecepatan 60km/jam (seperti yang umumnya terjadi di jalan raya perkotaan), maka potensi maksimal jalan dapat dioptimalkan oleh kendaraan-kendaraan tersebut.
Dari analogi ini, kita dapat menyimpulkan bahwa aplikasi cloud-native adalah jenis aplikasi yang dirancang khusus untuk berfungsi dengan baik dalam lingkungan awan dan dapat mengambil keuntungan penuh dari model komputasi awan. Membangun aplikasi cloud-native bukan hanya tentang memindahkan aplikasi yang biasanya berjalan di data center konvensional ke lingkungan cloud. Sebaliknya, membangun aplikasi cloud-native melibatkan perancangan aplikasi dari awal agar dapat berfungsi secara optimal dalam lingkungan cloud.
Jika ingin menggunakan definisi yang lebih formal, dapat digunakan definisi dari CNCF (Cloud Native Computing Foundation), yang menyebutkan bahwa:
Teknologi cloud native memperlengkapi organisasi-organisasi untuk membangun dan menjalankan aplikasi-aplikasi yang dapat diskalakan di dalam lingkungan yang modern dan dinamis seperti layanan cloud publik, privat, maupun hibrida. Kontainer, jaringan layanan (service mesh), layanan mikro (microservice), infrastruktur yang tidak dapat diubah (immutable), dan API-API yang deklaratif merupakan contoh-contoh pendekatan ini.
Teknik-teknik tersebut memungkinkan sistem-sistem yang terhubung secara longgar (loosely coupled) yang tahan banting, dapat dikelola, dan dapat dipantau. Dikombinasikan dengan automasi yang baik, mereka memungkinkan para rekayasawan (engineer) untuk membuat perubahan-perubahan yang berdampak besar secara sering dan dapat diprediksi dengan usaha yang minimal.
Apabila kita memeriksa definisi dari CNCF tersebut dengan lebih cermat, akan ditemukan bahwa aplikasi cloud native sebenarnya tidak secara eksklusif terkait dengan teknologi tertentu atau implementasi khususnya. Meskipun istilah seperti container dan microservices muncul dalam penjelasannya, namun teknologi tersebut hanya dijadikan sebagai contoh. Terkadang, terjadi kebingungan di antara cloud-native dan microservices, yang membuat sebagian orang menganggap bahwa menerapkan arsitektur cloud native setara dengan menggunakan arsitektur microservices, mengemasnya dalam container, dan mendeploynya dengan Kubernetes.
Pemahaman tersebut tidak sepenuhnya salah, namun juga tidak sepenuhnya benar. Bahkan Fremantle sendiri dalam postingannya pada tahun 2010 tidak pernah secara spesifik menyebutkan jenis teknologi yang harus digunakan untuk aplikasi cloud native. Karena istilah cloud native telah ada sejak sebelum munculnya teknologi seperti Container, microservices, dan Kubernetes. Oleh karena itu, mengembangkan aplikasi cloud-native tidak harus selalu melibatkan penggunaan container Docker. Pengembang memiliki opsi lain, seperti menggunakan solusi komputasi serverless di AWS Lambda atau mendeploy aplikasi di Heroku, yang masih dapat dianggap sebagai aplikasi cloud-native.
- Point Utama di dalam Cloud Native
Jika merujuk kepada definisi fdisebutkan oleh CNCF, Cloud Native dapat diidentifikasi ke dalam 3 point utama yaitu sebagai berikut
- Platform. Pada kalimat pertama dari definisi cloud native disebutkan bahwa
… di dalam lingkungan yang modern dan dinamis seperti layanan cloud publik, privat, maupun hibrida. ..
Dari potongan definisi tersebut, dapat disimpulkan bahwa salah satu poin utama dari Cloud Native adalah platform yang digunakan tempat aplikasi tersebut berjalan adalah pada lingkungan Cloud (baik cloud publik, private, ataupun hibrida)
- Properties.Sifat – sifat dari cloud native, dapat diambil dari definisi Cloud Native sebagai berikut
.. aplikasi-aplikasi yang dapat diskalakan …. memungkinkan sistem-sistem yang terhubung secara longgar (loosely coupled) yang tahan banting, dapat dikelola, dan dapat dipantau…
Berdasarkan definisi tersebut, CNCF mengidentifikasi 5 sifat utama dari aplikasi cloud-native yaitu scalability, loosely coupled, resilience, observability dan manageability. Karakteristik tersebut perlu diperhatikan agar aplikasi dapat memaksimalkan keseluruhan potensi dari model cloud computing.
- Practices. Praktek – praktek dari aplikasi cloud native dapat diidentifikasi dari bagian terakhir definisi teknologi cloud-native yang disebutkan CNCF sebagai berikut
Dikombinasikan dengan automasi yang baik, mereka memungkinkan para rekayasawan (engineer) untuk membuat perubahan-perubahan yang berdampak besar secara sering dan dapat diprediksi dengan usaha yang minimal.
Dari definisi tersebut, secara implisit dapat diambil 3 konsep practice dari teknologi cloud native yaitu automation, continuous delivery, and DevOps