日本語版
最新ニュース
科学&テクノロジー

Cloudflare は、Workers プラットフォーム インフラストラクチャでコンテナを使用しないのはなぜですか?

Cloudflareを使用すると、顧客はコールドスタートアップ時間がほぼゼロとなり、世界中のエッジでサーバーレスコードを驚異的な速度で実行できるようになります。従来のコンテナと Kubernetes アプローチを進めるのとは対照的に、同社は V8 を活用したデプロイメント アーキテクチャでこれを実現しています。コンテナーや VM を使用しない主な理由は、ミリ秒未満のサーバーレス レイテンシーを達成し、エッジでメモリや状態を共有せずにワークロードを独立して実行できる非常に多くのテナントをサポートできることです。サーバーレス インスタンスはリクエストを処理するためにスピンアップし、コストを節約するためにアイドル状態になるとスピンダウンすることを認識しています。これは、遅延とランニングコストの間のトレードオフです。リクエストを処理するためにコンテナーまたは VM を起動するには 500 ミリ秒から 10 秒かかり、その結果、コードの実行時間が予測不能になります。対照的に、Cloudflare の V8 分離アーキテクチャは、5 ミリ秒以下で関数をウォームアップします。ただし、このアプローチには他の設計上の決定と同様にトレードオフがあります。これについては、この投稿の後半で説明します。 まず、V8 分離設計について詳しく見てみましょう。V8 分離アーキテクチャは、V8 エンジン (もともと Google が Chrome 用に開発した高性能 JavaScript および Web アセンブリ エンジン) を利用して、個別のワークロードを実行する軽量のサンドボックス環境である分離を実行します。単一の V8 エンジン インスタンスは、厳密なコード分離を使用して独立したワークロードを実行する複数の分離を実行できます。…

Cloudflare は、Workers プラットフォーム インフラストラクチャでコンテナを使用しないのはなぜですか?

1730902334
2024-11-06 10:39:00

Cloudflareを使用すると、顧客はコールドスタートアップ時間がほぼゼロとなり、世界中のエッジでサーバーレスコードを驚異的な速度で実行できるようになります。

従来のコンテナと Kubernetes アプローチを進めるのとは対照的に、同社は V8 を活用したデプロイメント アーキテクチャでこれを実現しています。

コンテナーや VM を使用しない主な理由は、ミリ秒未満のサーバーレス レイテンシーを達成し、エッジでメモリや状態を共有せずにワークロードを独立して実行できる非常に多くのテナントをサポートできることです。

サーバーレス インスタンスはリクエストを処理するためにスピンアップし、コストを節約するためにアイドル状態になるとスピンダウンすることを認識しています。これは、遅延とランニングコストの間のトレードオフです。リクエストを処理するためにコンテナーまたは VM を起動するには 500 ミリ秒から 10 秒かかり、その結果、コードの実行時間が予測不能になります。

対照的に、Cloudflare の V8 分離アーキテクチャは、5 ミリ秒以下で関数をウォームアップします。ただし、このアプローチには他の設計上の決定と同様にトレードオフがあります。これについては、この投稿の後半で説明します。

まず、V8 分離設計について詳しく見てみましょう。

V8 分離アーキテクチャは、V8 エンジン (もともと Google が Chrome 用に開発した高性能 JavaScript および Web アセンブリ エンジン) を利用して、個別のワークロードを実行する軽量のサンドボックス環境である分離を実行します。

単一の V8 エンジン インスタンスは、厳密なコード分離を使用して独立したワークロードを実行する複数の分離を実行できます。 1 つの分離からのコードは、別の分離のメモリまたはデータにアクセスできません。

ただし、これらのアイソレートはすべて同じ OS プロセスを共有しているため、非常に軽量で高速になります。

アイソレートには、安全なメモリ アクセスを保証する独自のメカニズムがあり、オペレーティング システム プロセスによって実行される単一の V8 エンジン インスタンス内で、さまざまな顧客/テナントからの信頼できないコードを実行できるようになります。

すべての分離は、IO 集中型のタスクに適したイベント駆動型モデルでコードを実行します。

従来のサーバーレス アーキテクチャでは、関数インスタンスへのすべてのリクエストにより、OS レイヤー、アプリケーションの依存関係、関数コードを含むコンテナ プロセスがトリガーされます。

コンテナーの初期化には時間遅延 (コールド スタート レイテンシとも呼ばれます) が発生し、その範囲は数百ミリ秒から数秒に及ぶ可能性があります。

また、関数インスタンスはプロセス レベルで分離された独自のコンテナ プロセスで実行するのが理想的であるため、数百万の同時リクエストを処理する多数のテナント ワークロードを実行すると、リソースが大幅に消費されます。

クラウド環境では、分離は VM またはコンテナレベルのプロセスで実現されるのが理想的です。各ワークロードは、独自の専用リソースを備えた個別のコンテナーまたは VM プロセスとして実行され、データ漏洩や不正アクセスのリスクが軽減されます。

さらに、特定のプロセスがクラッシュしても、同じマシン上で実行されている他のワークロードには影響しません。

V8 エンジン ランタイムで実行されるアイソレートを使用したコンテナ化されたデプロイメントとは対照的に、コンテナや OS プロセスの起動が含まれないため、アイソレートの起動時間は平均してミリ秒未満です。

V8 ランタイムはすでに実行されており、リクエストの処理が必要な場合はミリ秒未満でアイソレートを生成します。

このアーキテクチャでは、複数のアイソレートを同じ V8 エンジン内で実行でき、必要なリソースは最小限で、プラットフォームがエッジで比較的多数のテナントのコードをホストして実行できるため、瞬時のスケーリングが可能になります。

また、単一の OS プロセスで数百または数千のアイソレートを実行できるため、コンテナベースのデプロイメントに伴うプロセス間のコンテキスト切り替えコストが回避されます。

Cloudflareは各マシンのエッジで数千のテナントワークロードを実行し、最小限のオーバーヘッドで1秒間に何千回もテナントワークロードを迅速に切り替える必要があるため、これはCloudflareにとって非常に重要です。

これらのワークロードが個別のコンテナ化されたプロセスとして実行されている場合、相当数の顧客をサポートするインフラストラクチャの能力は大幅に低下します。これは、V8 分離のようなリソースが最適化され、スケーラブルな導入アプローチを考案するための重要な要件です。

オペレーティング システムは、アプリケーション タスクをコア システム タスクから分離するために、ユーザー空間とカーネル空間に分割されます。アプリケーションが基盤となる OS およびハードウェア リソースとどのように対話するかを制御し続けることは、セキュリティとパフォーマンスにとって不可欠です。

カーネル空間は、基盤となるハードウェア リソースに直接かつ無制限にアクセスして、コア OS 操作を実行します。これらの操作には、IO、メモリ、プロセス、スレッド管理などの処理が含まれます。

ブラウザーやコード エディターなどのすべてのユーザー アプリケーションはユーザー空間で実行され、カーネル空間を通じて基盤となるハードウェアと対話します。ユーザー空間で実行されるアプリケーション コードはサンドボックス化されており、カーネル空間にアクセスするシステム コールを通じてシステム リソースや他のカーネル サービスへのアクセスを要求する必要があります。

ユーザー空間とカーネル空間の分離はオペレーティング システムの基本的な設計原則であり、安全でフォールト トレラントで効率的な操作の実行を促進します。

V8 エンジンはユーザー空間で実行され、システム コールを介してカーネル空間を通じて OS と対話します。 JavaScript および WebAssembly コードを実行するためのサンドボックス環境を提供します。

分離がイベント ループの非同期 IO 方式でリクエストを処理する場合、ビジネス ロジックはユーザー空間で実行されますが、IO タスクは OS カーネルに依存して基盤となるネットワークやその他のシステム インタラクションを処理します。

各 V8 エンジン インスタンスは、プロセス ID と OS によって強制されるメモリ境界を持つユーザー空間プロセスで実行されます。これにより、安全なサンドボックス化された V8 実行環境が提供されます。

V8 インスタンスに割り当てられたメモリは、V8 エンジンによってアイソレート全体に分散されます。分離の数が増えると、V8 エンジン インスタンスは OS により多くのメモリを要求する可能性があります。

V8 分離は、厳密なテナント レベルの分離を提供します。これらは技術的には V8 エンジン インスタンス内の OS によって割り当てられた同じメモリ領域に存在しますが、V8 アーキテクチャでは、各アイソレートに独立した論理メモリを割り当て、厳密なアイソレート レベルのサンドボックス化を適用することで、これらのアイソレート間でデータが共有されないようにしています。

各アイソレートのデータ (オブジェクト、関数、クロージャなど) は、V8 エンジンによって管理される個別のメモリ領域に保存されます。さらに、各アイソレートには個別のガベージ コレクション プロセスもあり、厳密な分離が維持されます。

分離アーキテクチャは、遅延の影響を受けやすいマルチテナント ワークロードを展開するための、よく設計されたソリューションです。ただし、JavaScript と、Go や Rust などの言語のみをサポートしており、そのコードを WebAssembly バイトコードにコンパイルして、WebAssembly をサポートするプラットフォームで実行できます。

コンテナ化された VM ベースの展開を活用する他のクラウド サーバーレス製品は、ワークロード要件に基づいてさまざまなプログラミング言語をサポートしています。

さらに、コンテナと VM は、主に金融、政府、医療の分野で、厳密なセキュリティとコンプライアンス基準を備えたエンタープライズ ワークロードで好まれるプロセス レベルの分離を提供しますが、これは分離では不可能です。

また、アイソレートは、計算負荷が高く、長時間実行されるタスク向けに設計されていません。プラットフォームによってメモリとコンピューティングの厳しい制限が設定されており、エッジで実行される短時間の IO 集中型の軽量操作に適しています。

IO バウンド、CPU バウンド、メモリバウンドの操作に関するディスカッション投稿がパイプラインにあり、これ以降の投稿も含まれます。メッセージ ブローカーを基礎からコーディングする‘ シリーズ。

また、AWS の Firecracker MicroVM についても説明します。これは、コンテナの柔軟性を維持しながら、分離に近い起動時間を提供する軽量の仮想マシンです。乞うご期待。

まだ購読していない場合は、ニュースレターを購読してください。私の投稿が公開されるとすぐに受信箱にスライドして届きます。

FaaS、コンテナ、VM、展開インフラストラクチャなどの概念を含む、クラウド コンピューティングの基礎を学ぶには、私の記事をチェックしてください。 クラウドコース。の一部です ゼロからシステムアーキテクチャのバンドルを使用して、ゼロからシステム アーキテクチャの基礎をマスターすることができます。

さらに、Git、Redis、Kafka などの分散システムを、選択したプログラミング言語で基礎からコード化するには、以下をチェックしてください。 コードクラフター

インタラクティブな実践演習により、これらのシステムがどのように機能するかをよく理解できます。購入を決めた場合は、以下を使用できます。 40% オフになる独自のリンク (アフィリエイト)。

V8 分離アーキテクチャについてさらに詳しく知りたい場合は、次の項目を参照してください。 このリソース

を実装しました シングルスレッド そして マルチスレッド化された Java の TCP/IP サーバー。リンクされた投稿を参照して、サーバーがどのように機能するかを理解することができます。

私は Kafka のような分散メッセージ ブローカーを基礎から構築するための短期集中コースを書いています。読むことができます ここに最初の投稿

また、私の投稿もチェックしてください ステートレスおよびステートフル機能を備えたエッジでのサーバーレス コンピューティングとストレージ。洞察力に富んだ読み物です。

この投稿が洞察に満ちていると思われた場合は、より多くの人にリーチするために友達と共有することを検討してください。あなたは私を見つけることができます リンクトイン & × で私とチャットできます サブスタックチャット 同じように。次の投稿でお会いしましょう。

それまでは、さようなら!


#Cloudflare #はWorkers #プラットフォーム #インフラストラクチャでコンテナを使用しないのはなぜですか

執筆者について: nipponese

Nipponese News編集部は、国内外のニュースを日本語で分かりやすくお届けします。