Ако сте чели каквото и да е за безопасното изпълнение на код, генериран от AI, сте срещали думата microVM, обикновено до Firecracker. Обяснява се или като „олекотена VM“ (вярно, но безполезно), или с диаграма на вътрешностите на ядрото. Ето версията по средата.
Два по-стари варианта и защо нито един не пасва
Започнете от двете неща, между които стои microVM.
Контейнерът е група обикновени процеси на машината ви, на които ядрото се е съгласило да лъже. Namespaces им показват собствена файлова система, списък с процеси и мрежа; cgroups ограничават колко CPU и памет могат да ползват. Стартира за милисекунди, защото нищо ново не се зарежда. Но всички контейнери на един хост говорят с едно и също ядро. Бъг в ядрото, достъпен от един контейнер, е изход от всички.
Виртуалната машина носи собствено ядро. Процесорът на хоста чрез хардуерна виртуализация (KVM в Linux) изпълнява госта, сякаш той има собствен компютър. Границата е хипервайзорът, който излага много по-малко от стотиците системни извиквания на едно ядро. Цената е тежестта. Класическата VM емулира цял PC: фърмуер, PCI шина, USB контролери, видеокарта, понякога звукова карта. Стартира, минавайки през всичко това, отнема от секунди до минути и всеки екземпляр носи десетки или стотици мегабайта допълнителна памет.
Аналогия, която издържа доста добре: контейнерите са апартаменти в една сграда, със споделени основи, тръби и окабеляване. VM са отделни къщи. Къщите са по-безопасни съседи, но никой не строи къща за посещение от 20 секунди.
Какво премахва Firecracker
Firecracker е virtual machine monitor (програмата, която подготвя и изпълнява VM върху KVM), написан на Rust и с отворен код от 2018 г. Създаден е за една работа: да изпълнява огромен брой краткоживеещи натоварвания, които не си вярват едно на друго, върху споделен хардуер. Постига го главно като маха неща:
- Без фърмуер, без откриване на хардуер. Ядрото се зарежда директно в паметта и се стартира. Никой не търси устройства, които ги няма.
- Миниатюрен модел на устройствата. Мрежова карта, блоково устройство, серийна конзола и още няколко, всички virtio (устройства, проектирани за виртуални машини, а не имитации на физически). Без USB, без графика, без PCI.
- Малка кодова база с безопасна памет. По-малко код, емулиращ устройства, означава по-малко места за бъг, който позволява на госта да стигне до хоста.
- Клетка около самия VMM. Всеки процес на Firecracker работи в chroot, с филтри seccomp върху собствените си системни извиквания и cgroups върху ресурсите си. Ако нещо все пак избяга от госта, ще попадне в клетка, а не на хоста.
Числата, които публикува самият проект: user space за едва 125 ms и под 5 MiB допълнителна памет на microVM. Това са най-добрите лабораторни стойности; истинският пясъчник има нужда и от подготвени диск и мрежа и от агент вътре, готов да приема команди, затова нашият е готов за около секунда. Това пак е достатъчно близо до скоростта на контейнер, за да създавате по един за всяка задача и да го изхвърляте след това.
Контейнер срещу microVM на практика
| Контейнер | Firecracker microVM | |
|---|---|---|
| Ядро | споделено с хоста | собствено |
| Граница с хоста | системни извиквания към споделено ядро | хипервайзор + малък VMM |
| Време за старт | милисекунди | ~0.1–1 с |
| Допълнителна памет на екземпляр | много малка | няколко MiB |
| Устройства | каквото излага хостът | мрежа, диск, конзола |
| GPU | възможно | не |
| Подходящ за | код, на който вярвате, пакетиране на приложения | недоверен код, натоварвания на много наематели |
Редът, който има значение, е вторият. При контейнер въпросът „може ли този код да избяга?“ се превръща в „има ли някъде в ядрото на хоста достъпен бъг?“. При microVM — в „има ли бъг в хипервайзора или в шепа виртуални устройства?“. Втората повърхност е много по-малка и именно нея облачните платформи вече защитават за собствения си хостинг на много наематели.
Какво губите
MicroVM не е безплатен ъпгрейд.
- Без GPU и без екрани. Тя е за изпълнение на код, не за десктопи или графични натоварвания.
- По-малко устройства, по-малко гъвкавост. Всичко, което очаква истински хардуер или дълъг списък модули на ядрото, няма да се чувства у дома си.
- Границите пак искат политика. MicroVM с отворен изходящ трафик пак може да праща трафик, който не искате; такава с вашите API ключове вътре пак може да ги изтече. Изолацията пази хоста от госта, а не тайните ви от кода, на който сте ги дали.
Как я използват нашите пясъчници
Всеки пясъчник на EQVPS е една Firecracker microVM със собствено ядро, от 0.25 vCPU и 512 MB до 8 vCPU и 16 GB. Идва с Python 3.12, Node.js 22, bash, git и curl, има изходящ интернет и няма входящи портове. Временните пясъчници се изтриват, когато приключите; persistent пазят диска си, а паузата записва моментна снимка на microVM на диска, така че не струва нищо, докато не продължи. Снапшотите на пауза се пазят 14 дни. След това пясъчникът се изтрива и неговото id отговаря 410 sandbox_deleted.
Избрахме microVM пред контейнери по една причина: кодът, който работи в пясъчник, по замисъл е код, който никой не е прегледал. Изходът на AI агент, pull request от непознат, бенчмарк от хиляда програми, написани от модел. За това собственото ядро е границата, за която си струва да се плати. Подробностите за това, което сложихме около нея — тарифи, квоти, лимитът от 55 секунди за синхронни команди — са в документацията за пясъчниците.
Ако искате да сравните тази граница с другите варианти по-подробно, нивата на изолация за недоверен код поставят един до друг процеси, контейнери, microVM и пълни VM. А ако вниманието ви е привлякла цената на секунда, как всъщност работи таксуването на секунда показва аритметиката.
Коментари
Още няма коментари. Бъди първият.