Redis
 Computer >> コンピューター >  >> プログラミング >> Redis

エッジキャッシングで実現する、世界どこでも5ミリ秒のRedisレイテンシ

Redisでは、データベースとクライアントが同じリージョン内にあれば、1ミリ秒のレイテンシは容易に実現できます。しかし、クライアントが世界中に分散している場合、レイテンシは100ミリ秒を超えてしまいます。この課題を解決するために開発されたのが「Edge Caching(エッジキャッシング)」です。

エッジキャッシングとは

エッジキャッシングでは、CDNと同じようにREST APIのレスポンスが世界各地のエッジロケーションにキャッシュされます。エッジキャッシングを有効にすると、平均5ミリ秒というグローバルレイテンシを実現できます。実際に、10の異なるリージョンに配置したクライアントからレイテンシを計測するベンチマークアプリケーションで検証を行っています。エッジURLへのリクエストと通常のREST URLへのリクエストのレイテンシを比較したところ、サーバーとクライアントの距離が離れるほど、エッジキャッシングによる改善効果が大きくなることが確認できました。

こちらから、ご自身でテストを実行することもできます。

エッジキャッシングで実現する、世界どこでも5ミリ秒のRedisレイテンシ

主なユースケース

Web/モバイル(バックエンドレス)クライアント

Upstashは読み取り専用の認証トークンを提供しており、バックエンドを構築することなくデータベースへアクセスできます。Webやモバイルアプリケーションから直接Redisにアクセスできるため、クライアントは世界中のどこにあっても構いません。このようなアーキテクチャでは、ユーザーに最も近いロケーションにデータをキャッシュすることが非常に有効です。

マルチリージョンのサーバーレスアーキテクチャ

AWS Lambdaを複数リージョンで実行することで、グローバルなレイテンシを低減できます。VercelやNetlifyの関数も、設定によっては複数のリージョンで実行されます。エッジキャッシング対応のサーバーレスRedisなら、サーバーレス関数がどのリージョンで実行されていても、高速なデータアクセスが可能になります。

エッジ関数

エッジコンピューティング(Cloudflare Workersなど)は、世界的に高速なアプリケーションを構築する手法として急速に人気が高まっています。ただし、エッジ関数にはデータを保持する選択肢が限られているという課題があります。低レイテンシかつ軽量なRedisとエッジキャッシングの組み合わせは、エッジ関数にとって理想的なデータストアとなります。

はじめ方

エッジキャッシングはUpstashコンソールから有効化できます。なお、エッジキャッシングには追加コストが発生する点にご注意ください。

有効化すると、REST APIダイアログでエッジURLを確認できます。エッジキャッシングはGETリクエストのみに対応しており、更新操作(POST)では引き続き通常のREST APIをご利用いただけます。

デフォルトでは、キャッシュされたレスポンスは30秒で失効します。Cache-Control: max-age=<seconds>ヘッダーを使用することで、この有効期限を自由に制御できます。

設定例:

curl https://us1-smart-bunny-32732.edge-c.upstash.io/get/foo \
-H "Authorization: Bearer 2dfgf98elrg0w009c842z2adfdde9132"
-H "Cache-Control: max-age=50"

上記URLへの最初のリクエストはオリジンからレスポンスを取得し、以降のリクエストは各エッジロケーションから応答されます。キャッシュされたレスポンスは、それぞれのエッジロケーションで50秒後に失効します。

エッジキャッシング vs グローバルデータベース

Redisを複数リージョンにレプリケートしてグローバルデータベースを構築することも、私たちのロードマップに含まれています(アップデート:すでにリリースされています。詳細はこちらをご覧ください)。グローバルデータベースでは書き込みもレプリケートされるため、より強力な整合性保証と書き込みレイテンシの改善が期待できます。しかし、すべてのリージョンにデータベースをレプリケートするのは非常にコストがかかる可能性があります。そのため、全ロケーションでのレイテンシを最小化するには、依然としてキャッシングが必要になります。つまり、エッジキャッシングとグローバルレプリケーションは競合関係にあるのではなく、互いを補完するソリューションなのです。結果整合的な読み取りが許容できるユースケースであれば、エッジキャッシングだけでも、グローバルに高速なデータアクセスを実現できる優れた選択肢と言えます。

サーバーレスおよびエッジデータに関する私たちの取り組みについて、ぜひフィードバックをお聞かせください。TwitterやDiscordでお気軽にご連絡ください。

  1. Upstash Redisで実現するNetlify Graphのグローバルキャッシュ

    はじめに先日、Netlifyは「Netlify Graph」という新機能を発表しました。同僚が以前から指摘していた不足していたピースに対して、Netlifyがソリューションへ向けて良い一歩を踏み出した形です。Netlify Graphは、開発者がWebアプリ向けのGraphQL API呼び出しを構築するのを支援する機能です。Netlifyダッシュボード上でGraphQLリクエストを準備すれば、ワンクリックでクライアントコードをプロジェクトに注入できます。Netlify Functionsとサードパーティサービスの課題Netlify Functionsをサードパーティサービスと組み合わせて使う場

  2. Cloudflare WorkersとRedisで実現するエッジコンピューティング活用術

    エッジコンピューティングは、近年もっとも注目されている技術のひとつです。CDNがファイルをユーザーの近くに配置できるようにしたのと同じように、エッジコンピューティングはアプリケーションそのものをユーザーの近くで実行できるようにします。これにより、開発者はグローバルに分散され、高いパフォーマンスを発揮するアプリケーションを構築できるようになります。 Cloudflare Workersとステートレス性の課題 現在この分野をリードしている製品がCloudflare Workersです。コールドスタートのないサーバーレス実行環境を提供し、Cloudflareのグローバルネットワークを活かすことで、ア