Vercel の Serverless Function は AWS Lambda の上で動いているそうです。そして AWS Lambda の中身は Firecracker という超軽量 VM 技術。
普通の VM は OS まるごと立ち上げて 1〜2 秒かかるところ、Firecracker は 必要最低限のものだけ載せた Linux カーネル を起動するので 100〜500ms に短縮できる、という技術。
AWS が OSS として公開しているので、誰でも仕組みが見られます。中身は Rust 製。
普通のVM (EC2など): ┌─────────────────┐ │ OS + 全デバイス │ 起動 ~数秒 │ + ネットワーク等│ 数百MB └─────────────────┘ Firecracker microVM: ┌─────────────────┐ │ 薄いLinux │ 起動 ~125ms │ 最小デバイス │ ~5MB └─────────────────┘ トレードオフ: + 完全な OS 互換性 + 強い分離 (KVM) − それでも数百ms かかる
V8 は JavaScript エンジン。Chrome や Node.js の心臓部です。1 つの V8 プロセスの中で、複数のメモリ空間を分けて持つ仕組みが Isolate。
Chrome では「タブ A の JS が、タブ B の変数を覗けない」ようにするのに使われています。これをサーバーに持ち込んで「ユーザー A の関数が、ユーザー B のメモリを見られない」を実現したのが Edge Function。
VM ごと立ち上げる必要がない(V8 プロセスは常駐)ので、Cold Start が一気に ~5ms 以下になる。
V8 Process (常駐): ┌──────────────────────────┐ │ ┌────────┐ ┌────────┐ │ │ │Isolate A│ │Isolate B│ │ │ │あなたの│ │他人の │ │ │ │ JS │ │ JS │ │ │ │heap+gc │ │heap+gc │ │ │ └────────┘ └────────┘ │ │ │ │ ┌────────┐ ┌────────┐ │ │ │Isolate C│ │Isolate D│ │ │ │別の人 │ │また別 │ │ │ └────────┘ └────────┘ │ └──────────────────────────┘ ※ 1プロセスに数千の isolate が同居 ※ 起動はメモリ確保だけ → 数ms
| 段階 | AWS Lambda (Firecracker) | Edge Function (V8 Isolate) |
|---|---|---|
| VM の確保 | 必要 ~50-200ms | 不要(V8 は常駐済み) |
| OS ブート | Linux kernel 起動 | 不要 |
| ランタイム起動 | Node.js プロセス起動 | 不要(V8 常駐) |
| コード読み込み | npm依存含めて全部 | 軽量な JS のみ |
| Isolate 作成 | — | ~数ms(メモリ確保のみ) |
| 合計 | ~100-500ms+ | ~5ms 以下 |
fs, net, child_process などは存在しない。fetch などの Web 標準 API のみ。| 項目 | Edge Function (V8 Isolate) | Serverless Function (Firecracker) |
|---|---|---|
| 裏側の技術 | V8 Isolate | AWS Lambda / Firecracker |
| Cold Start | ~5ms 以下 | ~100-500ms |
| 使える API | Web 標準 (fetch など) | Node.js フル |
| ネイティブ依存 | 不可 | 可 |
| 実行時間上限 | 短い | 長い (最大15分) |
| 地理的配置 | 世界中の PoP | 選択した1〜数リージョン |
| 得意な用途 | 認証チェック / リダイレクト / A/Bテスト / 軽量API | DBアクセス / 画像処理 / 重い計算 / SSR |