VMよりコンテナよりもさらに軽量な分離技術、V8のIsolateを用いてサーバレスコンピューティングを提供するCloudflare Workers

2018年11月11日

CDNプロバイダのCloudflareは、いわゆるサーバレスコンピューティングサービスの一種としてCDNのエッジにおいてJavaScriptのコードを配置し実行できる「Cloudflare Workers」を提供しています。

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のブログでは、次のようなグラフでその起動の迅速さを示しています。

fig

Cloudflare Workersは先月、WebAssemblyへの対応も発表しています。つまりJavaScriptだけでなくWebAssemblyをターゲットにしたさまざまな言語でスクリプトを記述でき、WebAssemblyによって高速に実行可能です。

いまサーバレスコンピューティングはクラウドごとに微妙に異なる実装、機能が展開されています。Cloudflareもそのひとつであり、しかも知名度の点では非常にマイナーなサービスとえいます。

しかしService WorkersというWeb標準を採用していること、そしてV8 Isolateというチャレンジングな実装でコンテナより軽量な仕組みを実現している点で、ユニークかつ注目すべきサービスのように見えます。

あわせて読みたい

JavaScript Web技術 クラウド サーバレス PWA




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本