Episode ini membedah arsitektur Firecracker: model satu proses satu microVM, perbandingan VMM Rust melawan QEMU, keluarga device virtio (net, block, vsock, balloon, entropy), rate limiter token bucket, komponen jailer, API endpoint, dan metadata service MMDS.

Di episode 1 kita memahami mengapa Firecracker ada: isolasi hardware untuk serverless dengan boot kilat dan overhead minimal. Sekarang saatnya membuka kap mesin dan melihat bagaimana desain itu diwujudkan. Episode 2 membedah konsep dasar dan arsitektur utama Firecracker — model proses, perbandingan dengan QEMU, perangkat virtio, rate limiter, jailer, dan API.
Mengapa episode ini penting? Karena seluruh series ini — networking, storage, snapshot, scaling, hingga observability — adalah konsekuensi dari keputusan arsitektur yang dibahas di sini. Satu proses untuk satu microVM menjelaskan kenapa densitas ribuan VM per host mungkin; keluarga virtio device menjelaskan kenapa device hanya bisa ditambahkan sebelum boot; rate limiter menjelaskan bagaimana satu host bisa melayani banyak penyewa tanpa saling berebut bandwidth.
Model mental paling penting tentang Firecracker adalah: satu proses Firecracker = satu microVM. Tidak ada daemon pusat yang mengelola banyak VM. Setiap firecracker yang berjalan adalah VM yang independen, dengan memori, API socket, dan siklus hidupnya sendiri.
Analoginya, anggap container Docker: satu daemon mengelola banyak container. Firecracker justru sebaliknya — seperti menjalankan satu proses nginx untuk satu situs. Konsekuensinya:
Firecracker memang mendukung menjalankan lebih dari satu microVM per proses dalam konfigurasi tertentu (misalnya dengan vmgenid atau multiple API), tapi model kanonik dan praktik produksi AWS adalah satu proses per VM, diperkuat oleh jailer di episode 7.
Pendekatan Firecracker berbeda fundamental dari QEMU:
Satu detail arsitektural penting: Firecracker tidak melakukan device emulation di userspace untuk perangkat utama. Ia memanfaatkan KVM dan virtio sedemikian rupa sehingga lalu lintas data perangkat mengalir langsung antara guest dan host tanpa interpretasi CPU yang mahal. Inilah alasan kenapa overhead-nya bisa ditekan jauh di bawah QEMU.
Proses Firecracker memuat beberapa thread: thread VMM utama, thread API, thread vCPU (satu per vCPU), dan thread untuk setiap device. Threading ini menjaga isolasi — kesalahan di thread device tidak langsung menjatuhkan seluruh VM.
Semua perangkat I/O microVM Firecracker menggunakan spesifikasi virtio: standar device paravirtualisasi yang dikenali kernel guest melalui driver bawaan. Karena driver sudah ada di kernel, guest tidak butuh driver tambahan dari vendor. Keluarga device yang didukung Firecracker:
Perangkat hanya bisa ditambahkan sebelum VM di-start. Setelah InstanceStart, konfigurasi device terkunci — konsekuensi dari desain boot sekali, lalu tidak berubah. Perubahan berarti membuat VM baru atau memakai snapshot (episode 9).
Setiap device virtio-net dan virtio-block bisa dibungkus rate limiter berbasis token bucket. Konsepnya sederhana: sebuah bucket berisi token; setiap paket atau byte yang lewat mengonsumsi token; bucket diisi ulang dengan kecepatan tertentu. Dua dimensi yang bisa dibatasi: bandwidth (bytes/sec) dan ops (ops/sec), masing-masing dengan parameter size (kapasitas bucket), refill_time (interval isi ulang), dan one_time_burst (lonjakan awal).
Ini bukan fitur sekunder — ini jantung model multi-tenant. Tanpa rate limiter, satu microVM bisa memonopoli bandwidth host dan merusak pengalaman semua tetangganya. Dengan rate limiter, SLA bandwidth per VM bisa dijanjikan secara kontraktual, persis seperti yang dilakukan AWS untuk layanan berbasis Firecracker. Detail konfigurasinya kita praktikkan di episode 5.
Arsitektur Firecracker terpusat pada beberapa komponen kunci:
firecracker binary — VMM itu sendiri. Membaca konfigurasi, mengekspos API, menjalankan vCPU, dan mengelola device.jailer — pembungkus keamanan. Membungkus proses Firecracker dalam namespace, cgroup, seccomp, rootfs read-only, dan user non-root. Detail di episode 7.PUT /boot-source, PUT /machine-config, PUT /drives, PUT /network-interfaces, PUT /snapshot/create, dan InstanceStart via /actions.API adalah satu-satunya cara mengelola microVM — tidak ada perintah firecracker start. Orchestrator seperti firecracker-containerd atau Flintlock pada dasarnya adalah client API yang cerdas.
MicroVM sering butuh konfigurasi dinamis: alamat IP sendiri, kredensial, atau metadata workload. Untuk ini Firecracker menyediakan MMDS (MicroVM Metadata Service) — server metadata yang diekspos ke guest di alamat 169.254.169.254, mirip dengan metadata service EC2.
Host menulis data JSON ke MMDS lewat PUT /mmds, lalu guest membacanya lewat HTTP GET di alamat tersebut. Karena IP-nya reserved link-local, data ini tidak pernah keluar ke jaringan luar — cocok untuk mendistribusikan secret atau konfigurasi boot tanpa mengan: data sudah tersedia sebelum aplikasi di guest dijalankan. Kita akan memakai MMDS di episode 6.
Tip
Pahami API Firecracker sebagai "control plane dalam satu proses": curl ke Unix socket, kirim JSON, dan proses Firecracker merespons. Semua perintah yang dipakai AWS Lambda internal pada dasarnya adalah varian dari API ini — jadi menguasai API berarti menguasai cara kerja seluruh platform serverless di atas Firecracker.
Sebuah microVM melewati siklus yang jelas:
InstanceStart memuat kernel dan mulai mengeksekusi; perangkat terkunci.Setiap tahap memiliki API dan tooling sendiri. Memahami siklus ini membuat episode-episode berikutnya — yang sebagian besar adalah variasi dari tahap-tahap ini — jauh lebih mudah diikuti.
Inti yang harus dibawa pulang:
firecracker, jailer, API Unix socket, dan MMDS.Di episode 3 selanjutnya kita akan berhenti berteori dan mulai menyalakan mesin: setup dan instalasi — mengunduh binary v1.16.x, menyiapkan kernel dan rootfs, verifikasi KVM dan cgroup, menjalankan firecracker --api-sock, serta memahami perbedaan mode --no-api (fast boot lewat command line) melawan mode API. Bersiaplah untuk microVM pertama kalian!