プログラマブルプラットフォームでは、顧客がコードを書いて製品をカスタマイズできます。機能が固定された従来の SaaS と違い、機能の拡張、バックエンドロジックのデプロイ、フルスタック体験の構築を、プラットフォームのインフラ上で行えます。
こうしたプラットフォームのインフラをホストするには、セキュリティ、スケーラビリティ、コスト効率、性能の分離など、いくつかの課題があります。顧客にカスタムコードの実行を許すと、信頼できない実行、悪用、リソース競合といったリスクが生じます。これらは、プラットフォームの信頼性を損なわずに管理する必要があります。シングルテナントのアプリケーションを数百万動かすのは本質的にコストが高いため、効率的なリソース利用が重要です。アイドル時にワークロードをゼロまで縮小できることは、需要急増時の高速起動を保ちつつ、経済的に成立させる鍵です。加えて、低遅延でグローバルに実行するには、耐障害性のある分散アーキテクチャが必要です。顧客がデプロイしたコードを可視化し制御するには、堅牢な監視、デバッグ、ガバナンスも欠かせません。イノベーションを制限してはなりません。
Workers for Platforms は、プログラマブルプラットフォームを構築するためのインフラに適しています。顧客がカスタムコードを安全に大規模実行できる分離環境、アイドル時の自動スケールゼロ、性能とコストを最適化するグローバル分散ランタイムを提供します。
Workers for Platforms のアーキテクチャは、マルチテナントアプリケーション向けに安全でスケーラブルかつ効率的なソリューションを提供する、いくつかの主要コンポーネントで構成されます。次に中核となる考え方を示します。
-
メインのリクエストフロー: プログラマブルプラットフォームにおけるリクエストの流れの概要です。
-
呼び出しとメタデータのフロー: 多くの場合、受信リクエストにメタデータを付与し、関数呼び出しに必要なコンテキストを渡すか、ルーティングロジックを実行します。
-
Egress 制御: 準拠した動作を保つために、送信接続を制御します。
-
ストレージとデータリソースの利用: データベースとストレージを使い、大規模でも豊かなエンドユーザー体験を構築します。
-
オブザーバビリティツール: プラットフォーム性能の監視とトラブルシューティングのためのログとメトリクス収集です。
-
クライアントリクエスト: クライアントアプリケーションから、プラットフォームの Dynamic Dispatch Worker へリクエストを送ります。
-
ルーティング: 実行する正しいワークロードを特定し、Dispatch Namespace 内の対応する User Worker へリクエストをルーティングします。各顧客のワークロードは、独自のリソースとセキュリティ境界を持つ分離された User Worker で実行されます。
多くのユースケースでは、追加のメタデータ、ユーザーデータ、設定を取得して受信リクエストを処理し、User Worker の呼び出しに追加コンテキストを渡すのが適切です。
-
受信リクエスト: カスタムホスト名、または Workers のワイルドカードルートを使う Worker へリクエストを送ります。
-
メタデータの参照: KV ストレージから顧客固有の設定データを取得します。参照は通常、受信リクエストのホスト名、またはカスタムホスト名の場合はカスタムメタデータに基づきます。
-
Worker の呼び出し: メタデータに基づき、Dispatch Namespace 内の適切な User Worker へリクエストをルーティングします。任意で、関数呼び出し時に追加コンテキストを渡せます。
データの可観測性と制御は、セキュリティに不可欠です。Outbound Workers を使うと、User Worker スクリプトからのすべての送信リクエストをインターセプトできます。
-
Worker の呼び出し: Dispatch Namespace 内の適切な User Worker へリクエストをルーティングします。任意で、User Worker 呼び出し時に Outbound Worker へ追加パラメーターを渡せます。
-
外部リクエスト: 制御された Outbound Worker 経由で、
fetch()呼び出しにより外部サービスへリクエストを送ります。 -
リクエストのインターセプト: 送信リクエストを評価し、集中的なポリシー適用や監査ログなどの中核機能を実行します。
-
ログ: リクエストフロー内のすべての Workers から、Tail Worker と Workers Trace Events Logpush でログを収集します。
-
メトリクス: Workers Analytics Engine でカスタムメトリクスを収集し、すぐに GraphQL API で照会できる標準の Analytics も利用します。
-
サードパーティ連携: Analytics integrations 経由で、ログとメトリクスを Datadog、Splunk、Grafana などの外部監視・分析プラットフォームへエクスポートします。
-
受信リクエスト: カスタムホスト名、または Workers のワイルドカードルートを使う Worker へリクエストを送ります。
-
Worker の呼び出し: Dispatch Namespace 内の適切な User Worker へリクエストをルーティングします。
-
リソースアクセス: スクリプトごとのリソースとやり取りします。
- リレーショナルデータベースストレージの D1
- 強い一貫性が必要なデータの Durable Objects
- 読み取りが多く、結果整合のキーバリューストレージの KV
- オブジェクトストレージの R2
-
管理インターフェイス: GUI、API、CLI からプラットフォームを操作します。
-
プラットフォーム処理: これらの操作を処理して、次を行います。
- コードの変換とバンドル
- セキュリティチェック
- 設定の適用
-
変更管理: Cloudflare REST API を使って、変更を Cloudflare へデプロイします。
Cloudflare Workers for Platforms は、強い分離、グローバル分散、スケーラブルな性能を備えたマルチテナント SaaS アプリケーションを構築するための堅牢な基盤です。このアーキテクチャを使うと、基盤インフラの複雑さは Cloudflare が担い、プラットフォーム提供者は顧客への価値提供に集中できます。