Αν έχετε διαβάσει οτιδήποτε για την ασφαλή εκτέλεση κώδικα που παρήγαγε η AI, θα έχετε δει τη λέξη microVM, συνήθως δίπλα στο Firecracker. Εξηγείται είτε ως «ελαφριά VM» (αλήθεια, αλλά δεν βοηθά) είτε με ένα διάγραμμα των εσωτερικών του πυρήνα. Αυτή είναι η ενδιάμεση εκδοχή.
Δύο παλαιότερες επιλογές, και γιατί καμία δεν ταιριάζει
Ξεκινήστε από τα δύο πράγματα ανάμεσα στα οποία βρίσκεται μια microVM.
Ένα container είναι μια ομάδα κανονικών διεργασιών στο μηχάνημά σας στις οποίες ο πυρήνας έχει δεχτεί να λέει ψέματα. Τα namespaces τους δείχνουν δικό τους σύστημα αρχείων, δική τους λίστα διεργασιών και δικό τους δίκτυο· τα cgroups περιορίζουν πόση CPU και μνήμη μπορούν να χρησιμοποιήσουν. Ξεκινά σε χιλιοστά του δευτερολέπτου επειδή δεν εκκινείται τίποτα καινούργιο. Όμως όλα τα containers σε έναν host μιλούν με τον ίδιο πυρήνα. Ένα σφάλμα του πυρήνα προσβάσιμο από ένα container είναι διέξοδος από όλα.
Μια εικονική μηχανή φέρνει τον δικό της πυρήνα. Η CPU του host, μέσω της εικονικοποίησης υλικού (KVM στο Linux), εκτελεί τον φιλοξενούμενο σαν να είχε δικό του υπολογιστή. Το όριο είναι ο hypervisor, που εκθέτει πολύ λιγότερα από τις εκατοντάδες κλήσεις συστήματος ενός πυρήνα. Το τίμημα είναι το βάρος. Μια κλασική VM εξομοιώνει ολόκληρο PC: firmware, δίαυλο PCI, ελεγκτές USB, κάρτα γραφικών, μερικές φορές κάρτα ήχου. Ξεκινά περνώντας από όλα αυτά, χρειάζεται από δευτερόλεπτα ως λεπτά, και κάθε στιγμιότυπο κουβαλά δεκάδες ή εκατοντάδες megabyte επιβάρυνσης.
Μια αναλογία που στέκει αρκετά καλά: τα containers είναι διαμερίσματα στην ίδια πολυκατοικία, με κοινά θεμέλια, σωληνώσεις και καλωδιώσεις. Οι VM είναι χωριστά σπίτια. Τα σπίτια είναι ασφαλέστεροι γείτονες, αλλά κανείς δεν χτίζει σπίτι για μια επίσκεψη 20 δευτερολέπτων.
Τι αφαιρεί το Firecracker
Το Firecracker είναι ένας virtual machine monitor (το πρόγραμμα που στήνει και τρέχει μια VM πάνω στο KVM), γραμμένος σε Rust και ανοιχτού κώδικα από το 2018. Φτιάχτηκε για μία δουλειά: να τρέχει τεράστιο αριθμό βραχύβιων φορτίων που δεν εμπιστεύονται το ένα το άλλο, σε κοινό υλικό. Το πετυχαίνει κυρίως αφαιρώντας πράγματα:
- Χωρίς firmware, χωρίς ανίχνευση υλικού. Ο πυρήνας φορτώνεται απευθείας στη μνήμη και ξεκινά. Κανείς δεν ψάχνει συσκευές που δεν υπάρχουν.
- Μικροσκοπικό μοντέλο συσκευών. Μια κάρτα δικτύου, μια συσκευή block, μια σειριακή κονσόλα και λίγες ακόμη, όλες virtio (συσκευές σχεδιασμένες για εικονικές μηχανές αντί για μιμήσεις φυσικών). Χωρίς USB, χωρίς γραφικά, χωρίς PCI.
- Μικρή βάση κώδικα με ασφάλεια μνήμης. Λιγότερος κώδικας που εξομοιώνει συσκευές σημαίνει λιγότερα σημεία για ένα σφάλμα που επιτρέπει στον φιλοξενούμενο να φτάσει τον host.
- Ένα κλουβί γύρω από τον ίδιο τον VMM. Κάθε διεργασία Firecracker τρέχει μέσα σε chroot, με φίλτρα seccomp στις δικές της κλήσεις συστήματος και cgroups στους πόρους της. Αν κάτι ξέφευγε από τον φιλοξενούμενο, θα κατέληγε σε κλουβί, όχι στον host.
Τα νούμερα που δημοσιεύει το ίδιο το έργο: user space σε μόλις 125 ms και κάτω από 5 MiB επιβάρυνση μνήμης ανά microVM. Είναι οι καλύτερες τιμές εργαστηρίου· ένα πραγματικό sandbox χρειάζεται επίσης να στηθεί δίσκος και δίκτυο και έναν πράκτορα μέσα έτοιμο να δεχτεί εντολές, γι' αυτό το δικό μας είναι έτοιμο σε περίπου ένα δευτερόλεπτο. Αυτό είναι ακόμη αρκετά κοντά στην ταχύτητα container ώστε να δημιουργείτε ένα ανά εργασία και να το πετάτε μετά.
Container και microVM στην πράξη
| Container | MicroVM Firecracker | |
|---|---|---|
| Πυρήνας | κοινός με τον host | δικός της |
| Όριο με τον host | κλήσεις συστήματος σε κοινό πυρήνα | hypervisor + μικρός VMM |
| Χρόνος εκκίνησης | χιλιοστά του δευτ. | ~0.1–1 δ. |
| Επιβάρυνση ανά στιγμιότυπο | πολύ μικρή | μερικά MiB |
| Συσκευές | ό,τι εκθέτει ο host | δίκτυο, δίσκος, κονσόλα |
| GPU | δυνατή | όχι |
| Κατάλληλο για | δικό σας κώδικα, πακετάρισμα εφαρμογών | μη έμπιστο κώδικα, φορτία πολλών μισθωτών |
Η γραμμή που μετράει είναι η δεύτερη. Με ένα container, το ερώτημα «μπορεί αυτός ο κώδικας να ξεφύγει;» γίνεται «υπάρχει κάπου στον πυρήνα του host ένα προσβάσιμο σφάλμα;». Με μια microVM, γίνεται «υπάρχει σφάλμα στον hypervisor ή σε μια χούφτα εικονικών συσκευών;». Η δεύτερη επιφάνεια είναι πολύ μικρότερη, και είναι αυτή που οι πλατφόρμες cloud ήδη υπερασπίζονται για τη δική τους φιλοξενία πολλών μισθωτών.
Τι θυσιάζετε
Μια microVM δεν είναι δωρεάν αναβάθμιση.
- Χωρίς GPU και χωρίς οθόνες. Είναι για εκτέλεση κώδικα, όχι για επιφάνειες εργασίας ή γραφικά.
- Λιγότερες συσκευές, λιγότερη ευελιξία. Ό,τι περιμένει πραγματικό υλικό ή μια μακριά λίστα αρθρωμάτων πυρήνα δεν θα νιώσει σαν στο σπίτι του.
- Τα όρια χρειάζονται ακόμη πολιτική. Μια microVM με ανοιχτή εξερχόμενη κίνηση μπορεί ακόμη να στέλνει κίνηση που δεν θέλετε· μια με τα κλειδιά API σας μέσα μπορεί ακόμη να τα διαρρεύσει. Η απομόνωση προστατεύει τον host από τον φιλοξενούμενο, όχι τα μυστικά σας από τον κώδικα στον οποίο τα δώσατε.
Πώς τη χρησιμοποιούν τα sandboxes μας
Κάθε sandbox της EQVPS είναι μία microVM Firecracker με δικό της πυρήνα, από 0.25 vCPU και 512 MB έως 8 vCPU και 16 GB. Περιλαμβάνει Python 3.12, Node.js 22, bash, git και curl, έχει εξερχόμενο internet και καμία εισερχόμενη θύρα. Τα προσωρινά sandboxes διαγράφονται όταν τελειώσετε· τα persistent κρατούν τον δίσκο τους, και η παύση γράφει ένα στιγμιότυπο της microVM στον δίσκο, ώστε να μην κοστίζει τίποτα μέχρι να συνεχίσει. Τα snapshots σε παύση φυλάγονται 14 ημέρες. Μετά το sandbox διαγράφεται και το id του απαντά 410 sandbox_deleted.
Επιλέξαμε microVM αντί για containers για έναν λόγο: ο κώδικας που τρέχει σε ένα sandbox είναι εξ ορισμού κώδικας που κανείς δεν έχει ελέγξει. Η έξοδος ενός πράκτορα AI, το pull request ενός αγνώστου, ένα benchmark χιλίων προγραμμάτων γραμμένων από μοντέλο. Γι' αυτά, ένας δικός της πυρήνας είναι το όριο που αξίζει να πληρώσει κανείς. Οι λεπτομέρειες όσων χτίσαμε γύρω του — τιμολόγια, όρια, το όριο των 55 δευτερολέπτων για σύγχρονες εντολές — βρίσκονται στην τεκμηρίωση των sandboxes.
Αν θέλετε να συγκρίνετε αυτό το όριο με τις άλλες επιλογές σε μεγαλύτερο βάθος, τα επίπεδα απομόνωσης για μη έμπιστο κώδικα βάζουν δίπλα δίπλα διεργασίες, containers, microVM και πλήρεις VM. Και αν σας τράβηξε την προσοχή η τιμή ανά δευτερόλεπτο, το πώς λειτουργεί πραγματικά η χρέωση ανά δευτερόλεπτο δείχνει τους υπολογισμούς.
Σχόλια
Δεν υπάρχουν ακόμη σχόλια. Γίνετε ο πρώτος.