Brief by evilfactorylabs

Brief by evilfactorylabs • Untuk obrolan makan siangmu seputar dunia pemrograman. Terbit sebelum jam 13.37 WIB setiap hari Senin & Selasa.

Serverless Database

No comment.

Di pembahasan sebelumnya kita sudah membahas sedikit tentang Serverless, pada kesempatan kali ini kita akan membahas tentang database yang memang khusus dirancang untuk lingkungan Serverless.

Data adalah salah satu hal yang paling sulit dalam membuat sebuah software, khususnya untuk menyimpan data yang persisten. Sudah banyak basis data yang handal untuk melakukan operasi terkait data seperti MariaDB, PostgreSQL, SQLite, dsb.

Dan basis data tersebut sudah ada sebelum teknologi Serverless ditemukan. Yang singkatnya, basis data tersebut dapat dipastikan belum/tidak mendukung di lingkungan yang menggunakan arsitektur Serverless.

What's wrong?

Tidak ada yang salah, namun hanya ada sedikit perbedaan di behavior.

Serverless menggunakan model event-driven, yang mana proses terjadi hanya ketika ada event yang masuk. Berbeda dengan aplikasi tradisional yang prosesnya selalu berjalan meskipun tidak ada transaksi yang terjadi.

Basis data biasanya memiliki "fitur" Connection Pooling, karena membuka koneksi ke database relatif "mahal" mengingat banyak proses yang harus dilakukan: Membuat sesi jaringan, autentikasi, otorisasi, dsb.

Connection pooling berguna untuk melakukan caching dalam proses koneksi ke database, jadi client tidak perlu melakukan upacara-upacara lagi selama waktu yang ditentukan karena proses tersebut sudah dilakukan sebelumnya yang intinya tinggal gunakan koneksi dari yang sebelumnya saja.

Basis data yang menggunakan connection pooling ini salah duanya adalah MariaDB dan PostgreSQL.

Karena menggunakan teknik tersebut, basis data perlu membatasi maksimal koneksi yang bisa dibuka (dan di cache) agar penggunaan CPU tidak terlalu tinggi.

Sayangnya, ini menjadi masalah di lingkungan Serverless. Karena koneksi yang dilakukan ke database dilakukan oleh client yang berbeda.

Jika dalam 1 detik terjadi pemanggilan function sebanyak 300x, client ke 100 kemungkinan akan mendapatkan kode error 429 (Too many requests) jika maksimal client yang bisa membuat koneksi ke basis data hanya 100.

What if

Jika dilihat dari kasus diatas, masalah yang paling mencolok adalah di proses membuat koneksi ke basis data. Yang singkatnya, mungkin kita bisa membuat lapisan baru khusus untuk mengatur bagaimana client membuat koneksi ke basis data.

Meskipun bukan silver bullet, namun bisa menjadi solusi sementara sambil menunggu basis data baru yang khusus dibuat untuk lingkungan Serverless.

Beberapa implementasi yang dilakukan ada serverless-mysql, yang tugasnya seperti yang sudah kita bahas sedikit diatas. Selain itu, library tersebut juga bisa melakukan hal-hal lain seperti "membersihkan zombie", melakukan percobaan koneksi ulang dengan algoritma backoff, dsb.

Cloud Serverless native database

Kabar gembiranya, sudah ada vendor yang menyediakan database yang disesuaikan untuk lingkungan Serverless. Seperti Firebase oleh Google, Amazon Aurora Serverless & DynamoDB dari Amazon, serta Azure Cosmos DB dari Microsoft.

Selain itu, ada FaunaDB yang memang dibuat untuk lingkungan Serverless.

Basis data yang dibuat untuk lingkungan Cloud-native™ menawarkan skalabilitas, latensi rendah, dan ketahanan sebagai fitur andalannya. Begitupula dengan Serverless, namun dengan tambahan 1 fitur andalannya: Hanya bayar untuk yang digunakan saja.

Biayanya biasanya dibagi menjadi dua: Untuk membayar disk space (kuota penyimpanan) dan untuk membayar lamanya eksekusi "function" (ya, pada dasarnya Serverless Database adalah model Serverless Computing juga namun untuk operasi seputar basis data, bukan implementasi terhadap aplikasi).

Kita ambil contoh untuk FaunaDB, untuk paket gratisnya, Fauna menawarkan:

  • Penyimpanan sebesar 5GB
  • Operasi baca sebanyak 100k per-hari
  • Operasi tulis sebanyak 50k per-hari
  • Data transfer (keluar) sebanyak 50MB per-hari

Paket diatas sepertinya sudah cukup untuk memenuhi kebutuhan yang bukan untuk "enterprise-grade".

Drawbacks

Yang pertama, seperti biasa, vendor lock-in. Terlebih karena pemainnya masih sedikit, belum memiliki standard, dan belum ada implementasi serupa/setara yang didistribukan sebagai software open source.

Yang kedua, maturitas. Alasan utama mengapa kita lebih menyukai teknologi yang "membosankan" adalah karena sudah ada sejak lama, stabil, dan teruji. Basis data yang dibuat/dikhususkan untuk lingkungan Serverless ini tergolong sangat baru, yang artinya tidak menutup kemungkinan terjadinya masalah-masalah baru terkait dengan lingkungan Serverless ini.

Yang ketiga, latensi. Menggunakan serverless computing berarti kita akan berurusan dengan cold start, karena "proses" hanya berjalan ketika dipanggil saja.

Yang terakhir, ekosistem. Ya, faktor maturitas. Selain itu, juga kapabilitas basis data bergantung dengan vendor yang dipilih. Yang berarti, jatuhnya kita bergantung dengan apa yang mereka tawarkan dan batasi.

Penutup

Meskipun basis data Serverless menjanjikan beberapa keuntungan seperti keamanan, keberadaan, geolokasi, efektivitas biaya, dsb, namun kita harus melihat ke kebutuhan terhadap aplikasi yang kita buat.

Mungkin untuk saat ini basis data Serverless lebih cocok untuk ke hal yang bersifat eksperimen, atau untuk aplikasi (mainan) baru yang ingin coba-coba. Atau bisa juga dimulai dari membuat aplikasi sederhana yang tidak memiliki frekuensi operasi terhadap basis data secara sering.

Kami akan coba eksplorasi lebih lanjut tentang keuntungan khususnya di penggunaan basis data Serverless ini. Dan seperti yang sudah kita bahas, dengan menggunakan arsitektur Serverless ini kita tidak berhadapan dengan hal-hal terkait server khususnya di pemeliharan dan skalabilitas.

Sebagai penutup, saya tutup dengan pertanyaan: Apakah skala aplikasi/basis data kita berada di skala Serverless?

Menikmati tulisan ini?

Blog ini tidak menampilkan iklan, yang berarti blog ini didanai oleh pembaca seperti kamu. Gabung bersama Loading... yang telah membantu blog ini agar terus bisa mencakup tulisan yang lebih berkualitas dan bermanfaat!

Pendukung

Dukung Mengapa saya harus mendukung?
You've successfully subscribed to Brief by evilfactorylabs
Great! Next, complete checkout for full access to Brief by evilfactorylabs
Welcome back! You've successfully signed in
Success! Your account is fully activated, you now have access to all content.