Webサイトの読み込みが遅かったり、更新のためにAPIを呼び出す必要がある時にアプリが停止しているように思えたりするというフラストレーションを経験したことはないでしょうか。すぐに動作しないと、思いがさまよい始めます...
高速化の1つの方法は、リソースをできるだけユーザーに近づけることです。これは、Cloudflareがコンピューティングで行ってきたことであり、世界人口のほとんどから数ミリ秒以内で動作しています。しかし、直感に反すると思われるかもしれませんが、コンピューティングをユーザーに近づけると、実際にはアプリが遅くなることがあります。アプリがエンドユーザーの近くにないAPI、データベース、その他のリソースに接続する必要がある場合、ユーザーではなくリソースの近くでアプリを実行した方がパフォーマンスが向上する可能性があります。
本日は、あらゆるやり取りを可能な限り高速にする、 WorkersとPages FunctionsのSmart Placementを発表できることを嬉しく思います。CloudflareはSmart Placementを使用して、アプリを高速化するためにコンピューティングリソースを最適な場所に移動させることにより、サーバーレスコンピューティングをSupercloudに移行します。一番優れている点は、完全自動であることで、「リージョン」のような追加の入力は必要ありません。
Smart Placementは、WorkersとPagesのすべてのお客様にオープンベータでご利用いただけます。
デモでSmart Placementの仕組みをご覧ください。
サーバーレスへの移行
CloudflareのAnycastネットワークは、ユーザーの近くでリクエストを即座に処理するよう構築されています。これは、開発者にとって、CloudflareのサーバーレスコンピューティングサービスであるCloudflare Workersが魅力のある理由となっています。競合他社は「リージョン」に縛られていますが、 Workersはどこでも動作します。つまり、当社にあるのは「地球」というひとつのリ-ジョンだけなのです。Workersが処理するリクエストすべては、発信元サーバーまで戻る必要なく、その場ですぐに処理できます。
このサーバーレスの概念はもともと軽量なタスクのためのものと考えられていましたが、サーバーレスコンピューティングに近年変化が見られています。発信元サーバーと自己管理型のインフラに依存する従来のアーキテクチャを補強するのではなく、置き換える形で使用されています。WorkersやPagesのユーザーでは、これらの事例がますます増えています。
サーバーレスのニーズ
サーバーレス化への移行、Workersでアプリ全体を構築することへの移行に伴い、データが必要になります。以前のアクションやイベントに関する情報を保存することで、パーソナライズされたインタラクティブなアプリを構築できます。例えば、ユーザープロファイルを作成する必要があるとします。ユーザーが離脱したページや、ユーザーがカートに入れているSKU。これらはすべて、状態を維持するためのデータポイントにマッピングされます。リレーショナルデータベース、Key-Valueストア、BLOBストレージ、APIなどのバックエンドサービスは、ステートフルなアプリを構築することができます。
Cloudflareの強力なコンビ、コンピューティングとストレージ
Workers KV、Durable Objects、D1、R2など、自社のストレージ製品スイートは増え続けています。データ製品が成熟するにつれ、当社側でWorkersとのやり取りについて真剣に考えているため、お客様が考える必要はありません。例えば、場合によっては、コンピューティングをユーザーの近くに置くのではなく、ストレージを移動させることでパフォーマンスが向上する別のアプローチがあります。皆さんがDurable Objectsを使用してリアルタイムゲームを作成する場合、当社側はDurable Objectsを移動させ、すべてのユーザーの遅延を最小限に抑えることができます。
将来的な目標は、お客様がmode = "smart" に設定すると、追加の設定を必要とせずに、当社がすべてのリソースの最適な配置を評価することです。
Cloudflareコンピューティング + ${backendService}
現在、Smart Placementの主な使用例は、アプリに外部データベースやサードパーティAPIなどのCloudflare以外のサービスを使用する場合です。
セルフホスト型サービスかマネージドサービスかにかかわらず、多くのバックエンドサービスは集中型です。つまり、データは単一の場所に保存され、管理されます。ユーザーはグローバルで、 Workersもグローバルですが、バックエンドは集中型です。
コードがバックエンドサービスに複数のリクエストを行うと、世界中を何度も往復することになり、パフォーマンスに大きな影響を与えます。一部のサービスは、パフォーマンス向上に役立つデータのレプリケーションやキャッシングを提供していますが、データの一貫性やコスト増大などのトレードオフもあります。
Cloudflareネットワークは、世界の接続人口の95%から50ミリ秒以内にあります。裏を返せば、私たちはお客様のバックエンドサービスにも非常に近いところにあります。
アプリのパフォーマンスはユーザーエクスペリエンスに直結
以下の例を通して、コンピューティングをバックエンドサービスの近くに移動することでアプリの遅延がどのように減少するかを理解しましょう。
オーストラリアのシドニーにいるユーザーが、 Workersで実行されているアプリにアクセスしているとします。このアプリは、ユーザーのリクエストに対応するために、ドイツのフランクフルトにあるデータベースに3回の往復を行います。
直感的に、Workerがデータベースと何度もやり取りを往復する時間がボトルネックになりそうだと推測できます。Workerがユーザーの近くで呼び出されるのではなく、データベースに最も近いデータセンターで呼び出される場合はどうでしょうか。
テストしてみましょう。
Smart Placementを使用しない場合のWorkerのリクエスト時間を測定し、Smart Placementを有効にした場合と比較しました。どちらのテストでも、シドニーからWorkerに3,500件のリクエストを送信し、Workerはeu-central-1(フランクフルト)のUpstashインスタンス無料利用枠まで3回往復します。
結果は明らかです!この例では、Workerをバックエンドの近くに移動することでアプリのパフォーマンスが4倍から8倍向上しました。
ネットワークの決定は人間の決定であるべきではない
開発者としては、アプリを高速化するためのネットワークの決定を気にすることなく、本来の仕事であるアプリの構築に集中したいものです。
Cloudflareにはユニークな視点があります。当社のネットワークは、ユーザー、 Cloudflareデータセンター、バックエンドサーバー間の最適なパスに関するインテリジェンスを収集します。この分野では、Argo Smart Routingで多くの経験があります。Smart Placementは、これらの要素を考慮し、全体的なリクエスト時間を最小限に抑えるために最適な場所にWorkerを自動的に配置します。
では、Smart Placementはどのように機能するのでしょうか。
Smart Placementは、「設定」タブまたはwrangler.tomlファイルでWorkerごとに有効化することができます。
[placement]
mode = "smart"
WorkerまたはPages FunctionでSmart Placementを有効にすると、Smart Placementアルゴリズムが、Workerが行っているフェッチリクエスト(サブリクエストとも呼ばれる)をリアルタイムで分析します。そして、これらを当社のネットワークによって集約された遅延データと比較します。Workerがバックエンドリソースに平均して複数のサブリクエストを行っていることが検出されれば、Workerは最適なデータセンターから自動的に呼び出されます。
正当な理由により、Smart Placementアルゴリズムでは考慮されていないバックエンドサービスがいくつかあります。
グローバルに分散したサービス:Workerが通信するサービスが多くのリージョンに地理的に分散している場合、Smart Placementは適切ではありません。これらはSmart Placementの最適化から自動的に除外します。
分析サービスまたはロギングサービス:分析サービスまたはロギングサービスのリクエストがアプリのクリティカルパスにある必要はありません。コードをツール化する際にユーザーに返されるレスポンスがブロックされないように、
waitUntil()
を使用する必要があります。waitUntil()
は、ユーザー視点のリクエスト時間に影響を与えないため、分析/ログサービスをSmart Placementの最適化から自動的に除外します。
Smart Placementアルゴリズムで考慮されていないサービスのリストについては、当社のドキュメントを参照してください。
Smart Placementが開始されると、Workerに新しい「リクエスト時間」タブが表示されます。Smart Placementを有効にしないでリクエストの1%をルーティングすることで、リクエスト時間への影響を確認できます。
そうです、これは本当に簡単です!
デモの動画でSmart Placementをお試しください。とても楽しい動画です。詳細については、開発者向けドキュメントをご覧ください。
Smart Placementの今後は?
まだ始まったばかりです。Smart Placementを改善する方法については、たくさんのアイデアがあります。
アプリが複数のバックエンドを使用する場合に、最適な場所を計算するためのサポート
配置の微調整(例:Workerがパスに応じて複数のバックエンドを使用している場合。最適な配置はWorkerごとではなく、パスごとに計算される)
TCPベースの接続のサポート
ご感想をお聞かせください。フィードバックや機能のリクエストがあれば、 Cloudflare Developer Discordを通じてご連絡ください。