3 poin oleh GN⁺ 2023-12-08 | 1 komentar | Bagikan ke WhatsApp

Pola FLAME: Pendekatan baru untuk penskalaan elastis aplikasi

  • Serverless/FaaS (Function as a Service) menawarkan keunggulan berupa penskalaan elastis dan pembayaran berbasis penggunaan, tetapi dalam praktiknya justru menimbulkan lebih banyak kompleksitas.
  • Jika kode aplikasi yang ada dapat dibungkus sebagai fungsi lalu dijalankan pada salinan aplikasi sementara, penskalaan otomatis menjadi mungkin.
  • Pola FLAME (Fleeting Lambda Application for Modular Execution) memperlakukan seluruh aplikasi seperti lambda dan menjalankan bagian-bagian modular pada infrastruktur berumur pendek.

Pola FLAME

  • Pola FLAME menginginkan penskalaan elastis yang halus dan berbasis permintaan untuk bagian tertentu dari kode aplikasi, tanpa pengelolaan server.
  • Tidak perlu menulis ulang aplikasi yang sudah ada atau menulis sebagian aplikasi pada runtime proprietari.
  • Library flame untuk Elixir mengimplementasikan pola FLAME dan menyertakan adaptor backend Fly.io, tetapi dapat digunakan di cloud mana pun yang menyediakan API untuk menjalankan kode aplikasi.

Backend FLAME

  • Pada infrastruktur Fly.io, FLAME.FlyBackend dapat menyalakan Machine baru dan menghubungkannya ke pekerjaan induk dalam waktu sekitar 3 detik.
  • FLAME menyediakan LocalBackend dan FlyBackend secara bawaan, tetapi host mana pun yang menyediakan API untuk memprovisikan server dan menjalankan kode aplikasi dapat berfungsi sebagai backend FLAME.
  • Karena Fly.io menjalankan aplikasi yang dikemas sebagai image Docker, cukup menyalakan Machine baru dengan image yang sama.

Elixir di luar FLAME

  • Elixir sangat cocok dengan model FLAME karena menyediakan fitur seperti supervisi proses dan messaging terdistribusi secara bawaan.
  • Jika sebuah bahasa memiliki primitive konkurensi yang masuk akal, pola ini dapat dimanfaatkan.
  • Ada juga contoh implementasi pola FLAME pada aplikasi JavaScript, dengan memindahkan eksekusi modular ke file baru untuk dijalankan.

Tentang pemroses pekerjaan latar belakang

  • FLAME bekerja dengan baik di dalam pemroses pekerjaan latar belakang, tetapi itu adalah persoalan yang terpisah dari library pekerjaan yang memperluas pool pekerjaan.
  • Penting untuk memisahkan pekerjaan yang menjamin durabilitas dari eksekusi elastis.

Pooling untuk penskalaan elastis

  • Melalui implementasi FLAME di Elixir, runner untuk pool elastis dapat didefinisikan, sehingga server FLAME dapat diskalakan secara elastis hingga nol dan dengan batas konkurensi maksimum.

Penempatan proses

  • Di Elixir, bagian aplikasi yang memiliki state dibangun dengan berpusat pada primitive proses, dan bekerja baik saat dibungkus dengan FLAME.call atau FLAME.cast.

Pemantauan jarak jauh

  • Saat induk melakukan spin up runner, runner harus mengelola idle-nya sendiri ketika tidak ada pekerjaan, dan harus berhenti dengan aman jika koneksi ke node induk terputus.

Opini GN⁺

Hal terpenting dari artikel ini adalah bahwa pola FLAME dapat menyederhanakan penskalaan elastis aplikasi sekaligus mengurangi kompleksitas pendekatan serverless/FaaS yang ada. Pola ini memungkinkan pengembang memperluas hanya bagian yang diperlukan dengan cepat tanpa banyak mengubah kode yang sudah ada, sehingga bisa menjadi solusi yang menarik bagi banyak software engineer yang menggunakan infrastruktur cloud. Pola FLAME dapat menjadi alat yang sangat kuat terutama di bahasa seperti Elixir, dan karena kemungkinan implementasinya di bahasa lain juga sedang dieksplorasi, penerapannya di berbagai lingkungan pengembangan patut dinantikan.

1 komentar

 
GN⁺ 2023-12-08
Komentar Hacker News
  • Setelah menangani aplikasi yang terdiri dari lebih dari 100 fungsi Lambda selama 4 tahun, tulisan ini dengan baik menyoroti rasa sakit dan kompleksitas dari arsitektur serverless FaaS.

    • Pada awalnya, kekurangan seperti ini tidak terlalu terlihat, dan ada kelebihan yang jelas seperti gratis saat penggunaan rendah serta hampir tidak memerlukan pemeliharaan.
    • Namun seiring waktu, ketergantungan antarbagian membuat alur kerja Lambda menjadi semakin kaku dan kacau, sehingga muncul pemikiran bahwa mungkin akan lebih baik memilih pendekatan monolitik yang dikelola sendiri dan membayar sedikit biaya tambahan.
  • Sebagai penulis artikel, ia berharap dapat membangkitkan minat orang-orang yang ingin mengimplementasikan pola FLAME dalam bahasa lain seperti JavaScript dan Go, dan ia siap menjawab pertanyaan.

  • Layanan PiCloud dulu menggunakan model yang secara transparan meneruskan pekerjaan ke worker, yang menunjukkan bahwa pendekatan serupa juga dapat diterapkan pada bahasa selain Elixir.

  • Dengan FLAME, kode aplikasi yang ada bisa dibungkus sebagai fungsi lalu dijalankan dalam salinan aplikasi sementara, mirip seperti melakukan fork proses di lingkungan serverless.

  • Windmill.dev mempertimbangkan unit abstraksi pada level kode sumber, lalu mem-parsing fungsi utama dan import untuk mengekstrak argumen dan dependensi, kemudian menjalankan kode di runtime yang diinginkan.

  • Dengan FLAME, runner pengembangan dan pengujian berjalan di backend lokal, sehingga memberikan pengalaman pengembangan lokal yang baik dalam lingkungan serverless.

  • Setiap kali menggunakan Flame.call, sistem memulai proses aplikasi baru dan menyalin konteks eksekusi; ini adalah solusi sederhana untuk scaling, tetapi perlu mempertimbangkan latensi tambahan pada waktu startup aplikasi dan penggunaan memori.

  • Disertai kritik terhadap penggunaan huruf kapital pada headline Hacker News, ada juga harapan agar yang dipikirkan ulang adalah perusahaan serverless.com, bukan prinsip serverless itu sendiri.

  • Inngest.com menawarkan pendekatan serupa yang memungkinkan kode yang ada digunakan sebagai fungsi serverless, mengelola state kode dari luar, dan menekankan pentingnya monitoring serta observability.

  • Ada yang membuat sistem bernama "Long Lambda"; jika Lambda bisa berjalan lebih dari 15 menit, maka semua pekerjaan dapat ditangani di Lambda, sekaligus bisa dijalankan dan di-debug secara lokal.

Ringkasan ini menyampaikan pokok isi tiap komentar secara ringkas dan ditulis agar mudah dipahami oleh software engineer pemula. Penjelasan latar belakang yang diperlukan dibuat seminimal mungkin, dengan tetap menjaga sikap netral dan tidak menyimpang dari topik.