Serverless Intro

Meskipun secara bahasa arti serverless adalah tanpa server, tapi kenyataanya teknologi serverless masih menggunakan server, bedanya server dikelola oleh pihak lain (cloud provider) dan kita tinggal menggunakannya tanpa perlu melalui proses setup yang terkadang rumit.

Jika ada yang menyebut serverless, maka yang dimaksud bisa berarti Serverless Computing, Serverless Architecture, Serverless Application, Serverless Framework atau Function as a Service (FaaS)

  • Serverless Computing, adalah model penggunaan teknologi cloud dimana cloud provider bertanggung jawab untuk mengelola server dan menyediakan resource server secara dinamis
  • Serverless Architecture, adalah cara membuat dan menjalankan aplikasi tanpa harus mengelola infrastruktur server
  • Serverless Application, adalah aplikasi yang menerapkan konsep atau menggunakan teknologi serverless
  • Serverless Framework, nama sebuah framework untuk memudahkan kita menggunakan teknologi serverless
  • Function as a Service, layanan yang disediakan oleh cloud provider untuk mengeksekusi baris code dengan cara mengalokasikan resource yang bersifat dinamis, baris code tersebut dieksekusi dalam bentuk function

OK mungkin terlalu banyak definisi, intinya teknologi serverless adalah teknologi yang membuat kita tidak perlu lagi memikirkan pengelolaan server sehingga bisa fokus ke pengembangan aplikasi.

Kenapa Serverless?

Simple

Serverless membuat pengelolaan server yang sebelumnya rumit dan terkadang membutuhkan keahlian khusus menjadi lebih mudah dan simple, karena pihak cloud provider menjadi pihak yang bertanggung jawab akan hal tersebut.

Cost Saving

Biaya alokasi server bisa ditekan menjadi sangat murah karena serverless menggunakan sistem pembayaran pay-per-use, yang artinya kita hanya membayar resource yang kita pakai.

Sebagai contoh pada AWS Lambda, untuk penggunaan memory 512 MB selama 1ms harga yang harus dibayar adalah $0.0000000083 (tergantung lokasi). Atau jika dikonversi ke rupiah maka kita hanya harus membayar Rp 0.12 ($1=Rp 14000) untuk 1 detik pemakaian AWS lambda.

Jika kita menggunakan AWS lambda selama 1 menit maka harga yang dibayar adalah Rp 7.

Dan kita tahu umumnya sebuah function dalam aplikasi dieksekusi dalam hitungan microsecond atau second dan bukan hitungan menit.

Dengan menggunakan serverless, meskipun aplikasi yang kita miliki tersedia setiap saat atau 24x7, ada kalanya aplikasi kita dalam kondisi idle, dan dalam kondisi tersebut kita tidak perlu membayar apapun.

Berbeda dengan server biasa, dimana kita harus membayar resource untuk periode tertentu (biasanya per bulan) terlepas apakah aplikasi kita digunakan atau tidak.

Time Saving

Waktu yang dibutuhkan untuk membuat atau mengembangkan aplikasi menjadi relatif lebih cepat dengan menggunakan serverless.

Karena kita hanya fokus pada aplikasi dan bukan infrastruktur. Kita tidak perlu lagi menentukan besar memory, hard drive atau spesifikasi lain dari server yang kita butuhkan untuk menjalankan aplikasi.

Auto Scaling

Scalability adalah sesuatu yang harus diperhatikan dalam mengembangkan sebuah aplikasi. Dengan serverless, scalability dari suatu aplikasi bukan lagi suatu masalah.

Karena resource server akan menyesuaikan beban aplikasi (Auto Scaling). Semakin tinggi beban aplikasi, resource untuk menghandle beban tersebut secara otomatis akan diperbesar. Begitu juga sebaliknya, di saat beban aplikasi semakin rendah, resource pada server akan menyesuaikan (resource yang dipakai kecil).

Cloud Service Trend

Market dari cloud computing service terus meningkat.

Menurut salah satu laporan, pada tahun 2027 market dari cloud service diperkirakan menyentuh angka lebih dari 900 milyar dollar, sebuah angka yang fantastis.

Itu artinya tingkat adopsi teknologi cloud computing akan semakin meningkat, semakin banyak perusahaan baik besar atau kecil yang akan menggunakan cloud computing untuk menunjang bisnisnya.

Dan serverless menjadi salah satu bagian penting di dunia cloud computing yang diperkiraan penggunaannya akan terus meningkat.

Kekurangan Serverless

Meskipun serverless memiliki banyak kelebihan, namun bukan berarti tanpa kekurangan.

Selalu ada trade-off atau opportunity cost. Ada yang harus dikorbankan untuk mendapatkan suatu keuntungan.

Vendor lock-in

Karena kita harus memilih cloud provider, pilihan kita menjadi terbatas.

Proses development sangat bergantung pada service yang disediakan oleh cloud provider tersebut. Meskipun kita bisa menintegrasikan service selain milik cloud provider tetapi butuh banyak usaha untuk melakukannya.

Berpindah dari satu cloud provider ke cloud provider yang lain juga bukanlah sesuatu yang mudah.

Security

Keamanan data tidak bisa dijamin. Oleh karena itu banyak yang menggunakan pendekatan hybird khusus untuk masalah keamanan data.

Unpredictable Cost

Hal ini bisa terjadi jika kurang cermat dalam mendesain arsitektur aplikasi.

Jika jumlah resource yang akan digunakan tidak diperhitungkan dan pengetahuan akan service yang digunakan kurang, maka biaya serverless bisa jauh lebih tinggi dibanding menggunakan server biasa.

Cloud Provider

Semakin banyak cloud provider yang menyediakan layanan serverless bahkan beberapa diantaranya telah berinvestasi besar-besaran untuk mendukung perkembangan teknologi ini.

Daftar Cloud Provider tersebut adalah:

Saat tulisan ini dibuat tiga cloud provider yang menempati urutan paling atas dalam daftar tersebut yaitu AWS, Microsoft Azure dan GCP adalah yang menguasai sebagian besar market share dari teknologi cloud computing.

Serverless Computing Services / Solutions / Platform

Awalnya serverless hanya terbatas pada FaaS, seperti AWS Lambda, Google Cloud Functions, Azure Function dsb.

Tetapi saat ini tiga besar Cloud Provider yaitu AWS, Microsoft Azure dan GCP memperkenalkan apa yang mereka sebut dengan Serverless Computing Services/Solutions/Platform (setiap cloud provider memiliki nama masing-masing untuk layanan serverless computing mereka).

Yaitu kumpulan service yang bisa digunakan untuk mengembangkan aplikasi serverless.

Kita tidak mungkin menyebut service tersebut satu per satu, untuk detailnya bisa dilihat pada link dibawah ini:

Application Development

Mengembangkan aplikasi menggunakan serverless memiliki pendekatan yang berbeda dibandingkan dengan menggunakan server biasa (traditional server).

Aplikasi serverless mengkombinasikan antara client (biasanya Front End), FaaS dan third party service.

Server vs Serverless

Kita akan bandingkan proses membuat aplikasi menggunakan server biasa dengan serverless.

Server

Untuk membuat suatu aplikasi maka yang harus dilakukan adalah membuat front end & back end kemudian kita deploy ke suatu server. Sama seperti yang sudah kita lakukan pada materi Build App.

traditional server architecture

Serverless

Sedangkan untuk membuat aplikasi serverless, kita harus membuat front end dan memilih service yang akan kita integrasikan langsung ke front end.

Misalnya, jika kita memilih menggunakan cloud provider AWS maka untuk database kita bisa gunakan AWS DynamoDB atau AWS Aurora, untuk proses autentikasi kita gunakan AWS Cognito, untuk API kita gunakan AWS API Gateway atau AWS AppSync, untuk storage kita gunakan AWS S3. Semua backend function dalam aplikasi dieksekusi menggunakan AWS lambda.

serverless architecture

Untuk menghindari 100% vendor lock-in kita bisa gunakan solusi dari vendor lain, seperti untuk database kita gunakan MongoDB Atlas, autentikasi kita gunakan Auht0, sedangkan untuk eksekusi function kita tetap gunakan AWS Lambda.

Tetapi yang perlu diperhatikan adalah integrasi AWS lambda bersamaan dengan service non-AWS bisa dibilang tricky (membutuhkan lebih banyak usaha karena tingkat kesulitannya).

Hal ini juga berlaku tidak hanya pada AWS tapi juga berlaku pada cloud provider yang lain.

FaaS

FaaS atau Function as a Service adalah salah satu implementasi dari serverless. Kita perlu pelajari FaaS lebih jauh karena seringnya istilah serverless digunakan untuk menyebut FaaS.

Beda On Premise, IaaS, PaaS, FaaS & SaaS

faas difference

Karakteristik FaaS

  • independent

Code dieksekusi sebagai suatu function yang berdiri sendiri.

  • event-driven

Function dieksekusi karena suatu event. Meskipun kita bisa panggil function secara langsung.

  • autoscaling

Memiliki kemampuan autoscaling.

  • temporary / ephemeral

FaaS memiliki lifetime yang sebentar, function akan dimatikan setelah selesai eksekusi.

  • stateless

Function tidak memiliki persisten storage, yang artinya data yang diperlukan dalam proses eksekusi harus disimpan di tempat lain(database atau storage).

  • pay only what you use

Bayar untuk setiap resource yang benar-benar dipakai.

Kesimpulan

Serverless adalah teknologi yang dapat kita gunakan untuk membuat aplikasi tanpa perlu memikirkan infrastruktur server yang dibutuhkan untuk menjalankan aplikasi tersebut.

Serverless dapat menekan biaya server dan waktu development jika dilakukan dengan tepat.

Mendesain aplikasi serverless memiliki tantangan tersendiri dibandingkan mendesain aplikasi biasa.