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

EdgeのサーバーレスデータベースとしてのUpstash

Upstashは、AWSLambda関数に最適なデータベースオプションになるという使命を持って旅を始めました。一方、サーバーレス機能を構築するためのもう1つの優れたオプションであるCloudflareワーカーを発見しました。これは、低コストでコールドスタートがなく、世界中でより優れたレイテンシーを約束するため、エキサイティングな製品です。ただし、AWSLambdaと比較すると多くの制限があります。追加の制限により、データベースオプションのリストが短くなります。これは、Upstashを次の質問に対する優れたソリューションとして位置付ける機会と見なしました。CF Workers are stateless. Where should I keep my data then?

課題 アクセシビリティ

Cloudflareワーカーはより閉鎖的な環境です。 AWSとは異なります。同じリージョンに独自のデータベースをセットアップして、VPC経由でアクセスすることはできません。したがって、Workers関数からデータベースにアクセスする必要があります。 Cloudflareワーカーは、ランタイムとしてV8Isolatesを使用します。 TCP接続は許可されません。したがって、データベースにはHTTP経由でアクセスできる必要があります。

グローバルレプリケーション

労働者には、どこにでも配置できるという利点があります。あなたの関数は世界中から低レイテンシでアクセスできますが、データベースにアクセスするために数百ミリ秒を費やすべきではありません。データベースは、関数が実行される場所の近くにある必要があります。これは、データを複数の地域や大陸に複製することで可能になります。

低レイテンシ

開発者は、どこでも低遅延を提供するため、エッジコンピューティングソリューションを好みます。データベースがボトルネックになることはありません。 Redisのようなインメモリデータベースは、ミリ秒未満のレイテンシを提供します。

アップスタッシュの旅

REST API

ネイティブのRedisAPIをサポートするUpstashをリリースしました。すべてのRedisクライアントがサポートされており、これはレガシーRedisアプリケーションに最適です。しかし、すぐにユーザーがサーバーレス機能で接続の問題を抱えているのを目にするようになりました。また、Cloudflareワーカーからはアクセスできませんでした。そこで、最初にGraphQLAPIを実装しました。しかし、プロキシレイヤーによるパフォーマンスのオーバーヘッドのため、GraphQLAPIには満足できませんでした。また、GraphQLはRedisコマンドを実行する最も簡単な方法ではありませんでした。パフォーマンスのオーバーヘッドを最小限に抑えるために、データベースエンジン内にRESTサーバーを構築することにしました。 RESTはRedisにより適していると思います。 REST APIをリリースし、CloudflareワーカーとWebassemblyからRedisにアクセスしたい開発者の間で非常に人気があることを確認しました。

エッジキャッシング

REST APIのおかげで、UpstashはWorkersからアクセスできましたが、レイテンシーは理想的ではありませんでした。一部の開発者は、Cloudflare独自のキャッシュを使用してRedis応答をキャッシュしようとしました。しかし、それは複雑な解決策でした。 Redisはすでに非常に高速であるはずなので、cache Redisは気分が悪いです。 何処か別の場所。そのため、すべてのエッジ位置でRedisREST応答をキャッシュするエッジキャッシングを構築することにしました。 CDNプロバイダーを使用してRedis応答をキャッシュしました。これは、エッジレイテンシが大幅に改善され、パフォーマンスが最大80%向上しました。

グローバルデータベース

エッジキャッシングは、グローバルレイテンシの問題に対する優れたソリューションでしたが、一部のユースケースにはいくつかの欠点があります。まず第一に、それはキャッシュ無効化(パージ)をサポートしていません。キャッシュの有効期限が30秒の場合。次に、クライアントが古いデータを読み取る可能性のある30秒のウィンドウがあります。これは、すべてではありませんが、多くのWebユースケースで許容できます。次に、エッジキャッシングはRESTAPIでのみサポートされます。 Redisクライアントはエッジキャッシングの恩恵を受けることができません。そこで、データを複数のリージョンに複製する新しいデータベースタイプを設計することにしました。高可用性と十分な一貫性を備えた設計にすることは非常に困難でした。現在、Upstashには、5つの異なるAWSリージョン(東および西北アメリカ、ヨーロッパ、アジア、南アメリカ)にデータを複製するグローバルデータベースオファリングがあります。グローバルデータベースはキャッシュではないため、キャッシュの無効化の問題はありません。書き込みは、すべてのレプリカに即座に複製されます。パフォーマンスと可用性のために、グローバルデータベースは結果整合性を保つように設計されています。

エッジキャッシングとグローバルデータベース(または両方)

エッジソリューションにキャッシュが必要な場合は、エッジキャッシングが優れたソリューションになる可能性があります。ただし、キャッシュを即座に無効にするために書き込みが必要な場合は、グローバルデータベースを使用する必要があります。キャッシュに加えて、グローバルデータベースは高可用性グローバルデータストアとして使用できます。また、エッジキャッシングはREST呼び出しでのみ使用できることにも注意してください。 Redisクライアントを使用している場合、エッジでのレイテンシが低い唯一のオプションはグローバルデータベースです。

エッジキャッシングとグローバルデータベースはどちらも、読み取りレイテンシを最小限に抑えるように設計されています。ユースケースが90%の書き込みである場合、単一のリージョン設定の方が理にかなっています。書き込みは、マルチリージョンデータベースとシングルリージョンデータベースの両方で同じレイテンシーを持ちますが、グローバルセットアップでは5倍のコストがかかります。

エッジキャッシングが有効になっている場合、Upstashはオリジンから最初のリクエストをフェッチしてからエッジでキャッシュします。オリジンが近くにない場合、レイテンシーは高くなります。すべてのケースで最高のレイテンシーが必要な場合。グローバルデータベースでエッジキャッシングを有効にすることで、両方を使用できます。

エッジキャッシングとグローバルデータベースのレイテンシを比較するベンチマークアプリケーションをご覧ください。

次は何ですか?

UpstashatEdgeを改善するために取り組むことができるいくつかのことを次に示します。

  • 書き込みの低レイテンシー:現在、グローバルデータベースは、単一のリーダーアーキテクチャで読み取りレイテンシーを最適化するように設計されています。これはほとんどのユースケースをカバーしていると思います。ただし、フィードバックと新しいユースケースに応じて、読み取りだけでなく低レイテンシの書き込みも可能にするアーキテクチャに取り組むことができます。
  • Kafkaのサポート:今後数週間で、Redisに加えてKafkaをリリースする予定です。 Kafkaは、クリックストリーム分析やサーバーレス/エッジ関数からkafkaへのログのプッシュなどのエッジでの新しいユースケースを可能にします。

私たちはあなたのフィードバックに基づいてUpstashを改善し開発し続けます。 TwitterまたはDiscordであなたの考えを教えてください。


  1. CloudflareワーカーとのRedis@Edge

    エッジでのコンピューティングは、近年最もエキサイティングな機能の1つです。 CDNを使用すると、ファイルをユーザーに近づけることができます。エッジコンピューティングを使用すると、アプリケーションをユーザーの近くで実行できます。これは、開発者がグローバルに分散されたパフォーマンスの高いアプリケーションを構築するのに役立ちます。 Cloudflare Workersは、現在この分野の主要製品です。コールドスタートのないサーバーレス処理環境を提供します。 Cloudflareのグローバルネットワークを活用して、アプリケーションのレイテンシーを最小限に抑えます。関数はJavascript、Rust、

  2. サーバーレスデータベース間のレイテンシーの比較:DynamoDBとFaunaDBとUpstash

    この記事では、一般的なWebユースケースについて、3つのサーバーレスデータベースDynamoDB、FaunaDB、Upstash(Redis)のレイテンシーを比較します。 サンプルのニュースWebサイトを作成し、Webサイトへのリクエストごとにデータベース関連のレイテンシーを記録しています。ウェブサイトとソースコードを確認してください。 7001のNYTimesの記事を各データベースに挿入しました。記事はNewYorkTimes Archive API(2021年1月のすべての記事)から収集されます。私は各記事をランダムに採点しました。各ページリクエストで、Worldの下の上位10件の記事