概要
- クラウドブラウザ の高速起動、強力な 分離性、低コスト化の実現
- Firecracker による軽量VM採用と EC2上でのネスト仮想化 運用
- Unikraft からの移行理由と 自動スケーリング制御プレーン の開発
- メモリ管理・CPU割り当て・ステルス性向上 によるパフォーマンス最適化
- 運用コスト削減 と ユーザー体験向上 の両立
クラウドブラウザ基盤の再構築
- 高速起動、 分離性、 低コスト の同時実現が課題
- 新セッション開始が 1秒未満、コストが $0.02/時間 に削減(従来の1/3)
- ブラウザごとに Chromium・ファイルシステム・クッキー・キャッシュ・プロキシ設定 等を個別管理
- VM(仮想マシン) による完全分離を採用、情報漏洩リスクの低減
- 通常VMは重いため、 Firecracker ベースの軽量VMを選択
FirecrackerとEC2によるネスト仮想化
- 各ブラウザセッションを 独立したFirecracker VM で実行
- Firecrackerは通常 ベアメタルサーバ で利用されるが、コスト削減のため EC2上で運用
- EC2自体がVM であるため、 VM in VM 構成で運用
- ネスト仮想化は レイテンシ増加 の懸念があるが、 高速化技術 で克服
UnikraftからFirecrackerへの移行理由
- 以前は Unikraft のユニカーネルで運用、起動は早いが 自動スケーリング に課題
- トラフィック急増時に エンジニアの手動対応 が必要で、障害発生リスク
- Firecracker +独自制御プレーンで 自動スケーリング を実現
- 制御プレーンが リアルタイム監視 で適切なVM数を自動調整
- CloudWatch よりも素早い反応で柔軟なリソース運用
ネスト仮想化のトレードオフと最適化
- .metalインスタンス ではなく 通常EC2 を採用、 迅速なスケールアップ と低コストを優先
- ホスト起動から 30秒以内 でサービス提供開始
- ネスト仮想化での ページフォールトコスト増 を 2MBページ割当 と userfaultfdカスタムハンドラ で最適化
- メモリ復元 の高速化で、ブラウザ起動時間を 9.8秒→3.1秒 に短縮
- 不要なデバイスチェックの無効化 や vsockによる高速通知 で追加最適化
Chromium起動とCPUリソース管理
- Chromium起動時 はCPU負荷が高いが、起動後は 待機時間が大半
- 起動フェーズは vCPUをunpinned で分散、起動完了後に pinned で安定配置
- ハイパースレッド の競合を避け、各ブラウザに 物理コアの両スレッド を割当
- リアルタイム優先度 設定で、VMの即時実行を保証
- これらの工夫で セッション失敗率を大幅削減
ステルス性(検知回避)とヘッドレス運用
- ヘッドレスブラウザ は通常、Webサイトの ボット検知 に弱い
- 従来のヘッドレスChromiumは 2% しかブロック回避できなかったが、 ヘッドフル では 50% 回避
- 独自Chromiumフォーク でステルスパッチを低レイヤーで適用
- JavaScriptインジェクションではなく、 ブラウザ本体で自動化検知情報を隠蔽
- GPUやディスプレイサーバ不要 で、完全ヘッドレスかつ高いステルス性を実現
まとめと今後の展望
- Firecracker+EC2ネストVM の組み合わせで 高速・分離・低コスト を達成
- 自動スケーリング制御プレーン による柔軟な運用
- メモリ・CPU・ステルス性 の最適化で ユーザー体験 と セキュリティ を両立
- 今後も パフォーマンス改善 と コスト最小化 を追求