𝗦𝗲𝗿𝘃𝗲𝗿𝗹𝗲𝘀𝘀 𝗔𝗻𝗱𝗮 𝗕𝗲𝗿𝗯𝗼𝗵𝗼𝗻𝗴 𝗸𝗲𝗽𝗮𝗱𝗮 𝗔𝗻𝗱𝗮 𝗧𝗲𝗻𝘁𝗮𝗻𝗴 𝗦𝗸𝗮𝗹𝗮𝗯𝗶𝗹𝗶𝘁𝗮𝘀
Komputasi serverless menjanjikan skala tak terbatas dan tanpa overhead. Platform seperti AWS Lambda atau Google Cloud Run menskalakan lapisan komputasi Anda secara instan.
Namun, backend Anda tetap saja crash.
Masalahnya bukan pada komputasi Anda. Masalahnya ada pada database Anda.
Saat fungsi-fungsi Anda berskala naik (scale up), mereka menciptakan badai koneksi (connection storm). Setiap instansi fungsi baru mencoba membuka koneksi baru ke database Anda. Jika Anda memiliki 1.000 fungsi, Anda memiliki 1.000 permintaan koneksi yang menghantam instansi Postgres atau MySQL Anda secara bersamaan.
Database relasional memiliki batasan yang kaku. Begitu Anda mencapai batasan tersebut, koneksi baru akan gagal. Hal ini menyebabkan latensi tinggi dan error 5xx. Komputasi Anda sudah siap, tetapi database Anda kewalahan.
Anda dapat mengatasi hal ini dengan tiga strategi:
Gunakan Connection Proxy Jangan hubungkan fungsi secara langsung ke database Anda. Gunakan proxy seperti AWS RDS Proxy atau Google Cloud SQL Proxy. Lapisan ini berada di antara fungsi dan database Anda. Ia mengelola kumpulan kecil koneksi persisten dan membagikannya ke berbagai fungsi Anda.
Implementasikan Lapisan Data Proxy Proxy tingkat lanjut melakukan lebih dari sekadar mengelola koneksi. Mereka dapat:
- Memisahkan operasi baca (read) dan tulis (write) ke instansi database yang berbeda.
- Melakukan cache pada kueri yang sering digunakan untuk mengurangi beban database.
- Mengoptimalkan kueri sebelum mencapai database.
- Beralih ke Penulisan Asinkron (Asynchronous Writes) Berhentilah membuat setiap tindakan pengguna menjadi penulisan database yang sinkron. Banyak tugas yang tidak memerlukan konsistensi instan.
Alih-alih seperti ini: Tindakan Pengguna -> Fungsi -> Penulisan DB Sinkron -> Respon
Coba ini: Tindakan Pengguna -> Fungsi -> Kirim Event ke Antrean -> Respon Cepat
Fungsi terpisah kemudian dapat mengambil event tersebut dan menulis ke database di kemudian waktu. Hal ini melindungi database Anda dari lonjakan trafik yang tiba-tiba.
Skalabilitas sejati membutuhkan lebih dari sekadar menskalakan komputasi. Anda harus merancang akses data yang elastis. Berhentilah melakukan provisioning untuk angka maksimum teoretis. Mulailah membangun buffer antara fungsi Anda yang mengalami lonjakan (bursting) dan data Anda.
Sumber: https://dev.to/prabashanadev/your-serverless-is-lying-to-you-about-scale-4cga