Edge Functions نتلیفای حالا روی MicroVMهای Firecracker اجرا میشه
خلاصهٔ کاملتر
نتلیفای تو این پست توضیح میده که زیرساخت Edge Functions (یعنی کدهایی که قبل از رسیدن درخواست به سایت، روی سرورهای لبهٔ شبکه اجرا میشن) رو کامل از نو ساخته. روزانه حدود یک میلیارد Edge Function روی نتلیفای اجرا میشه. قبلاً درخواستها از شبکهٔ نتلیفای خارج میشدن و به یه سرویس اجرای بیرونی میرفتن. حالا همهچی داخل شبکهٔ خودشون و روی MicroVMها اجرا میشه، با همکاری تیم Unikraft.
عددها اینان: اجرای warm (یعنی وقتی ماشین از قبل آمادهست) تو میانه حدود ۵ تا ۶ میلیثانیه طول میکشه، در حالی که قبلاً ۲۵ تا ۴۰ میلیثانیه بود. p99 حدود ۴۷.۴ درصد سریعتر شده، دسترسپذیری ۹۹.۹۹۸ درصده و لاگها هم پنج برابر سریعتر میرسن. اجرای cold (وقتی یه منطقه هنوز اون تابع رو ندیده) حدود ۱.۲ درصد درخواستها رو شامل میشه و بهطور میانگین ۹ میلیثانیه طول میکشه.
مسیر درخواست اینجوریه: درخواست به نزدیکترین edge node میرسه و اگه مسیرش با یه Edge Function جور باشه، edge node یه spec برای ماشین مینویسه. این spec سه تا image رو مشخص میکنه (runtime، پلتفرم نتلیفای و کد تابع) و محدودیت CPU و حافظه رو هم تعیین میکنه. از hash این spec یه service ID ساخته میشه، پس دو deploy با کد یا متغیرهای محیطی متفاوت هیچوقت یه MicroVM مشترک ندارن. به گفتهٔ نتلیفای، V8 isolateها این سطح از جداسازی رو نمیدن.
برای انتخاب compute node از rendezvous hashing استفاده میشه، یعنی یه سرویس همیشه روی همون node میافته تا ماشین گرم بمونه و کد از قبل روی دیسک باشه. ولی اگه یه سرویس خیلی پرترافیک بشه، این چسبندگی شل میشه و بار بین چند node پخش میشه. اینجوری یه مشتری پرترافیک بقیه رو اذیت نمیکنه.
هر تابع توی یه Firecracker MicroVM جدا اجرا میشه که زیر یک میلیثانیه ساخته میشه و تو p99 حدود ۲ میلیثانیه طول میکشه تا بالا بیاد. فایلهای تابع بهصورت یه image از نوع EROFS مپ میشن، پس فقط بخشهایی که لازمه خونده میشه. وقتی سرور جاوااسکریپت آماده شد، از ماشین snapshot گرفته میشه. اگه تابع صدا زده نشه ماشینها به صفر میرسن و دفعهٔ بعد از همون snapshot برمیگردن.
نتلیفای میگه برای توسعهدهندهها هیچی عوض نشده و URL importها، پکیجهای npm، ماژولهای داخلی Node و netlify.toml همه مثل قبل کار میکنن. حالا که اجرا دست خودشونه، میخوان پشتیبانی npm رو از بتا دربیارن و محدودیتهای فعلی (۵۰ میلیثانیه CPU، ۵۱۲ مگابایت حافظه و ۲۰ مگابایت کد فشرده) رو هم دوباره بررسی کنن.
نکات کلیدی:
- میانهٔ اجرای warm از ۲۵ تا ۴۰ میلیثانیه رسیده به حدود ۵ تا ۶ میلیثانیه.
- اجرای cold حدود ۱.۲ درصد درخواستهاست و بهطور میانگین ۹ میلیثانیه طول میکشه.
- هر deploy توی Firecracker MicroVM جدای خودش اجرا میشه و ماشینها با snapshot برمیگردن.
- انتخاب node با rendezvous hashing انجام میشه و برای سرویسهای پرترافیک بین چند node پخش میشه.
- کد، قیمت و نحوهٔ استفاده هیچ تغییری نکرده و مهاجرتی لازم نیست.




