概要
Netlifyは毎日約10億回のEdge Functionsを稼働 新アーキテクチャで パフォーマンス5倍向上 と 高い可用性 を実現 Firecracker MicroVMとUnikraft協力による 高速・安全な実行基盤 既存のEdge Functionsの書き方や運用方法は 変更不要 今後も 更なる機能拡張と制限緩和 を予定
Netlify Edge Functionsの新アーキテクチャ概要
- Netlify上で毎日 約10億回 のEdge Functions実行
- Sunwebによるページパーソナライズ、Loto-Québecのトラフィックルーティングなど多様な用途
- 完全なJavaScriptランタイム でお客様ごとにスケール
- 低遅延を追求し、 ミリ秒単位 での処理を実現
- Unikraftチームと連携 し、インフラを全面刷新
- 旧構成では外部実行サービス利用→ 現在は自社エッジネットワーク内のMicroVMで処理
- これにより 中央値で5倍高速化、セキュリティと信頼性も向上
- Edge Functionsの 書き方や利用方法は従来通り (URLインポート、npmパッケージ、Node組み込み、netlify.toml、ローカル開発等)
パフォーマンス指標と可用性
- ウォームインボケーション (既存MicroVM利用時)
- 中央値5〜6ms(従来25〜40ms)
- p99で 47.4%高速化
- 99.998%の可用性
- ログ配信5倍高速化
- コールドインボケーション (新規リージョン等)
- 全体の約1.2%で発生
- 平均9ms
リクエスト処理フロー
- リクエストは 最寄りのNetlifyエッジノード に到達
- TLS終端後、Edge Functionsのルートと照合
- マッチしない場合は通常通りキャッシュ・オリジンへ
- マッチ時は 自社ネットワーク内の計算ノード へ転送
- 計算ノードで サービスID確認・MicroVM管理
- サービスごとに複数MicroVMを割当
- リクエスト数制限 でスケールイン・アウト制御
- 必要なイメージがなければエッジノードから取得・保存
サービス仕様と分離性
- エッジノードが 実行用スペック(ランタイム、プラットフォーム、Edge Functionイメージ)を生成
- CPU・メモリ・接続数も指定
- スペックの ハッシュ+サイト固有情報でサービスID生成
- 異なるデプロイ・環境変数は 完全に分離されたMicroVM で実行
- V8 isolate では実現できない強力な分離性
コンピュートノード選定とキャッシュ戦略
- 各リージョンで 複数のコンピュートノード を運用
- ランデブーハッシュ でリクエストごとに同じノードへ割当
- ウォーム状態維持・キャッシュヒット率向上
- ホットスポット回避のため 一定閾値超過で分散
- 初回のみイメージ取得・以降はキャッシュ利用
Firecracker MicroVMによる高速起動
- 各Edge Functionは Firecracker MicroVM 上で実行
- MicroVMは 1ms未満で生成、p99で2ms起動
- EROFイメージをメモリマッピング し、必要部分のみ読み込み
- MicroVM起動時に スナップショット取得
- 未稼働時は スケールゼロ、次回はスナップショットから高速起動
- Unikraft製品 によるVMライフサイクル管理
運用・デバッグ・信頼性対策
- ローカルDNSリゾルバ 搭載でDNS関連の問題を低減
- 起動時間、ポートオープン、ユーザーコード開始時間 など詳細なメトリクス収集
- 各種 サーキットブレーカー で迅速な再ルーティング・ノード廃止に対応
- 全工程で外部ネットワークに出ず、自社で制御
レジリエントな基盤設計
- エンドユーザー体験 と ロールアウトの安全性 を両立
- コンピュートノードは Unikraftのベースイメージ+パッケージ で構築
- エッジノードと分離し、 軽量・高速化、独立スケール を実現
- コントロールプレーンで ノードの存在・健康状態を管理
- 新旧フリートの並行展開・ヘルシー後の切替 で安全なデプロイ
今後の展望・新たな可能性
- 新アーキテクチャは 速度向上だけでなく拡張性も向上
- npmパッケージサポートが正式リリース予定
- ネイティブバイナリやランタイムファイルインポート制限が大幅緩和
- CPU・メモリ・コードサイズ等の制限緩和 も視野
- 旧モデル(isolate)由来の制限を見直し
- ネットワーク制御型の新機能 も自社基盤上で実現可能
- 既存プロジェクトは 追加作業・価格変更なしで恩恵享受
- 今後も 制限やラフエッジの改善を継続予定
これ、ちょっと理解しづらいし信じがたいな。Cloudflare Workersもv8アイソレートだし、Netlifyが言ってる25-40msよりずっと速く動くはずなのに…