Apache Traffic Server (ATS) は、エッジサーバーにおけるプロキシサーバーとして、ユーザーのリクエストをアプリケーションサーバーに転送する重要な役割を擔っています。近年、ATS の機能拡張に向けた新たな技術として、WebAssembly(Wasm)が注目されています。この記事では、ATS における WebAssembly 拡張の技術的背景、実裝方法、利點と課題を詳しく解説します。
ATS は、DDoS 防禦、Web アプリケーションファイアウォール(WAF)、GDPR 合規性管理、ルーティング、靜的リソースキャッシュ(畫像、JavaScript、CSS)などの主要機能を提供します。これらの機能を柔軟に拡張するためには、強力なプログラマビリティが求められます。
ATS は C++ を使用したプラグインシステムを採用しており、リクエスト/レスポンスのライフサイクルイベントを監視できます。しかし、このシステムには以下のような課題があります:
Lure スクリプト言語は、ATS プラグイン開発を簡略化するためのツールとして注目されています。Visual Studio Code の Copilot と併用することで、コード生成が自動化され、開発効率が向上します。また、Lure JIT エンジンは Foreign Function Interface(FFI)をサポートしており、共有ライブラリ関數を呼び出すことが可能です。ただし、Lure の人気は低下しており、コミュニティの活性化が課題です。
Proxy VASM は、WebAssembly をサポートするプロキシサーバーフレームワークであり、C++、Rust、AssemblyScript、TinyGo などの言語をサポートしています。ATS における WebAssembly プラグインアーキテクチャは、クライアントとソース間でライフサイクルイベントを監視し、Runtime エンジンで WebAssembly モジュールを実行します。ATS 提供の API を介してリクエスト/レスポンスを変更することが可能です。
Rust を使用した例では、リクエストヘッダー內のトークンが素數かどうかを検証し、素數であればプロキシを継続し、そうでなければカスタムレスポンスを返す処理が実裝されています。実際の応用例として、Carasa プロジェクトでは Go で実裝された WAF を WebAssembly モジュールにコンパイルし、ModSecurity のルール言語と互換性を持たせています。今後は、エッジAI推論などの新たなシナリオも期待されています。
WebAssembly モジュールと ATS の統合を進めるため、パフォーマンスのボトルネックを解消し、異なる Runtime エンジンの選択肢を検討する必要があります。また、Component Model の導入により、モジュールの柔軟性と機能性を向上させることが期待されています。
WebAssembly モジュールは Sandbox で実行され、悪意のあるコードが ATS を崩壊させるのを防ぎます。実行時エンジンは、異常な挙動を検出し、エラーメッセージとして処理します。
WebAssembly は今後も重要な技術として注目され、コミュニティと企業の関心が高まっています。今後、Component Model の導入により、モジュールの柔軟性が向上すると予想されます。