VMよりコンテナよりもさらに軽量な分離技術、V8のIsolateを用いてサーバレスコンピューティングを提供するCloudflare Workers
CDNプロバイダのCloudflareは、いわゆるサーバレスコンピューティングサービスの一種としてCDNのエッジにおいてJavaScriptのコードを配置し実行できる「Cloudflare Workers」を提供しています。
Cloudflare Workersは、HTML5の機能であるService Workerの実行環境をクラウド上で提供するというものです。
Service Workerとは、もともとWebブラウザに実装されバックグラウンドで起動される、いわばプログラミング可能なローカルプロキシです。ルーティングやレスポンスやキャッシングなどを操作し、オフラインで動作するWebアプリケーションを実現する上で重要な機能を提供します。
Cloudflare Workersを用いると、例えば次のようなことが可能になると説明されています。
- 異なるタイプのリクエストごとに、異なるオリジンサーバへリクエストをルーティングする
- HTMLテンプレートの展開をエッジで行い、オリジンサーバへの帯域にかかるコストを削減する
- キャッシュコンテンツに対するアクセスコントロールの適用
- 一部のユーザーをステージングサーバーにリダイレクト
- 全く異なる2つのバックエンド間でA/Bテストを実現
- アプリ独自のカスタムセキュリティフィルタを作成し、不要なトラフィックをブロックする
- Web APIに完全に依存するサーバーレスアプリケーションの実現
V8のIsolateを用いて分離
Cloudflare Workersは実行環境の構築にNode.jsを用いず、V8のJavaScriptエンジンを使っていると説明されていましたが、11月9日付けのCloudflareのブログ「Cloud Computing without Containers」で、さらに詳細が解説されました。
それによるとCloudflare WorkersはV8のIsolate機能を用いることで、コンテナよりも軽量な分離を実現していると説明されています。
JavaScriptエンジンのV8には、Isolateと呼ばれる機能を用いることでプロセス内に複数の独立したオブジェクト空間およびイベントループを持つ空間を定義できるようになっています。そして分離された空間はそれぞれマルチスレッドで並列して実行されます。
V8のドキュメントではIsolateについて次のように説明されています。
Isolate represents an isolated instance of the V8 engine. V8 isolates have completely separate states. Objects from one isolate must not be used in other isolates. The embedder can create multiple isolates and use them in parallel in multiple threads.
IsolateはV8エンジンの分離されたインスタンスを表す。V8は完全に分離された状態を保持し、あるIsolateのオブジェクトはほかのIsolateから使われることはない。(V8エンジンの)組み込み元は、複数のIsolateを作成し、それらはマルチスレッドによって並列に利用できる。
Cloudflareのブログでは、このIsolateによって分離生成された空間の利点について次のように説明されています。
We pay the overhead of a Javascript runtime once, and then are able to run essentially limitless scripts with almost no individual overhead. Any given Isolate can start around a hundred times faster than I can get a Node process to start on my machine. Even more importantly, they consume an order of magnitude less memory than that process.
JavaScriptのランタイムのオーバヘッドは実行時の一度だけで済み、実質的にはいくらでも多数のスクリプトを個別のオーバーヘッドなしに実行可能だ。自分のマシン上では、それぞれのIsolate空間はNodeのプロセスが起動するのに比べて百倍は速く起動できる。それ以上に重要なのは、そのプロセスよりも何ケタも少ないメモリしか消費しないということだ。
上記で触れられているように、例えばAWSのLambdaをはじめとするサーバレスコンピューティングやPaaSは一般にコンテナ環境を用いています。
あるコンテナ内にJavaScriptなどのコードとそのコードのランタイムを組み込んで起動するのです。これにより仮想マシンごとに実行環境を構築して起動するよりもずっと軽量かつ迅速に多数の分離された実行環境を実現できました。
しかし言語はJavaScriptに限定されるものの、V8 Isolateを用いることでコンテナよりもずっと軽量かつ迅速に分離された実行環境を起動できるわけです。
Cloudflareのブログでは、次のようなグラフでその起動の迅速さを示しています。
Cloudflare Workersは先月、WebAssemblyへの対応も発表しています。つまりJavaScriptだけでなくWebAssemblyをターゲットにしたさまざまな言語でスクリプトを記述でき、WebAssemblyによって高速に実行可能です。
いまサーバレスコンピューティングはクラウドごとに微妙に異なる実装、機能が展開されています。Cloudflareもそのひとつであり、しかも知名度の点では非常にマイナーなサービスとえいます。
しかしService WorkersというWeb標準を採用していること、そしてV8 Isolateというチャレンジングな実装でコンテナより軽量な仕組みを実現している点で、ユニークかつ注目すべきサービスのように見えます。
あわせて読みたい
[速報]AWS東京リージョンでVMware Cloud on AWS、提供開始。VMwareが発表
≪前の記事
AWS、AMDのプロセッサを採用し、既存のインスタンスより10%安い新インスタンス「M5a」「R5a」を発表。インテルが独占してきた状況を変えられるか?