معماری MicroVM پشت Managed Agents دیجیتالاوشن
خلاصهٔ کاملتر
دیجیتالاوشن تو این مقاله توضیح داده که سرویس Managed Agents (که الان تو پیشنمایش عمومیه) روی چه زیرساختی ساخته شده. مشکل اینه که ایجنتها کار میکنن، منتظر مدل میمونن و بعد دوباره ادامه میدن. اگه ماشین رو روشن نگه داری منابع هدر میره، اگه پاکش کنی باید همهچی از اول ساخته بشه. راهحلشون اینه که هر سشن یه Firecracker microVM بگیره، یعنی یه ماشین مجازی خیلی سبک با کرنل مخصوص خودش که با KVM ایزوله شده.
کل پلتفرم به cellها تقسیم شده. هر cell یه واحد کامل و مستقل تو یه ریجنه با VPC، کلاستر Kubernetes، دیتابیس PostgreSQL و باکت Spaces خودش. control plane (تصمیمگیری و جایگذاری) روی Kubernetes اجرا میشه و host plane (خود Firecracker) روی Dropletها. اطلاعات کوچیک مثل وضعیت اجرا تو PostgreSQL میمونه و فایلهای سنگین دیسک و حافظه تو Spaces، تا حجم اسنپشات تراکنش دیتابیس رو سنگین نکنه.
یه نکتهٔ جالب اینه که همهٔ ماشینها یه IP دارن: همه 192.168.240.2 رو میبینن با یه MAC ثابت برای gateway. دلیلش اینه که checkpoint (یعنی عکس کامل از وضعیت ماشین) تنظیمات شبکه و کش ARP رو هم نگه میداره. هر ماشین تو یه network namespace جدا روی هاست هست و NAT آدرس بیرونی رو ترجمه میکنه. یعنی بعد از restore یا fork لازم نیست ماشین بفهمه شبکه عوض شده. البته اتصالهای TCP به بیرون حفظ نمیشن و اپ باید دوباره وصل بشه.
برای امنیت شبکه، فقط متغیر HTTP_PROXY کافی نیست چون کد میتونه دورش بزنه. برای همین قوانین nftables جلوی دور زدن پروکسی رو میگیرن و Envoy فقط به دامنههای مجاز اجازه میده. کلیدهای API هم داخل ماشین نمیرن: پروکسی روی هاست خودش هدر احراز هویت رو اضافه میکنه. هزینهش اینه که برای HTTPS باید TLS رو قطع کنن و ماشین به یه CA مخصوص پلتفرم اعتماد کنه، پس رمزنگاری سرتاسری عملاً عوض میشه.
دیسک دو لایه داره: یه پایهٔ تغییرناپذیر که به تکههایی حدود 512 KiB شکسته شده و تو Spaces ذخیره میشه، و یه لایهٔ نوشتنی محلی برای هر اجرا. نوشتنها محلی میمونن و خوندن فقط تکههای لازم رو میگیره. حافظه هم با userfaultfd (یعنی قابلیتی تو لینوکس که اجازه میده یه پروسه صفحههای گمشدهٔ حافظه رو موقع نیاز پر کنه) لود میشه. پس ماشین قبل از اینکه کل RAM دانلود بشه شروع به کار میکنه.
نتیجه اینه که تو مسیر گرم، از درخواست تا جواب دادن به ترافیک زیر ۲۰۰ میلیثانیه در p50 طول میکشه. به گفتهٔ تیم، این سرعت از «کمتر لود کردن» میاد نه «سریعتر لود کردن». checkpoint فعلاً کل حافظه رو میگیره و دیتابیسهای بیرونی و کارهای انجامشدهٔ API جزو اسنپشات نیستن.
نکات کلیدی:
- هر سشن یه Firecracker microVM با کرنل جدا داره.
- همهٔ ماشینها IP 192.168.240.2 و MAC ثابت gateway رو میبینن تا restore و fork راحت باشه.
- کلیدهای API روی هاست و توسط Envoy تزریق میشن، نه داخل ماشین.
- دیسک به تکههای حدود 512 KiB تقسیم شده و حافظه با userfaultfd موقع نیاز لود میشه.
- مسیر گرم زیر ۲۰۰ میلیثانیه در p50 هست، طبق تست داخلی.




