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

パフォーマンスとコストの比較:Deno KV と Upstash Redis

約 2 週間前、Cloudflare KV と Upstash Redis のパフォーマンスとコストを比較しました。今回は、グローバル エッジ ネットワークで実行されている Deno ネイティブのキー バリュー ストアである Deno KV について見ていきます。

Deno KV は、そのアーキテクチャが Upstash Redis に似ています。どちらのストアにもプライマリ リージョンがあり、すべての書き込みがそこに送信され、他のすべてのリージョンにレプリケートされます。読み取りは、クライアントに最も近いリージョンから提供されます。Redis には KV にはない機能が多数あるため、使用できる機能には多くの違いがありますが、ここでは単純な読み取りと書き込みだけに焦点を当てます。

2 つの異なるベンチマークを実行します。どちらも Deno Deploy を使用してコードを実行します。どちらの場合も、KV ストアと Redis で利用可能なすべての読み取りリージョンが有効になります。

<オル>
  • planetfall.io を使用して世界中の 20 地域から呼び出します。
  • 負荷がはるかに高い単一リージョンからの呼び出し
  • その後、結果を比較し、トレードオフと価格について話し合います。

    ベンチマーク

    セットアップは次のようになります。基本的に Cloudflare と同じですが、Deno KV を使用するように更新されただけです。

    • 1000 キー
    • 4 KB ~ 64 KB のデータ サイズ (ランダム)
    • すべてのキーで 60 秒の TTL
    • 関数を呼び出す 20 個の領域
    • 1 秒あたり最大 10 件のリクエスト

    RPS を上げすぎずにキャッシュ ヒットを確保できるように、かなり小さいキースペースを選択しました。

    コード

    関数自体は非常に単純です。 Redis から読み取り、KV から読み取り、後で評価するためにそれらのレイテンシを返すだけです。

    main.ts
    app.get("/test", async (c) => {
     const key = Math.floor(Math.random() * 1_000).toString()
     const minValueSize = 4 * 1024
     const maxValueSize = 64 * 1024
     
     const data = randomBytes(minValueSize, maxValueSize)
     
     const ttlSeconds = 60
     
     const beforeRedis = performance.now()
     const redisResponse = await fetch(Deno.env.get("UPSTASH_REDIS_REST_URL")!, {
     method: "POST",
     headers: {
     "Content-Type": "application/json",
     "Authorization": `Bearer ${Deno.env.get("UPSTASH_REDIS_REST_TOKEN")}`,
     },
     body: JSON.stringify(["GET", key])
     })
     const redisLatency = performance.now() - beforeRedis
     
     if (!redisResponse) {
     await fetch(Deno.env.get("UPSTASH_REDIS_REST_URL")!, {
     method: "POST",
     headers: {
     "Content-Type": "application/json",
     "Authorization": `Bearer ${Deno.env.get("UPSTASH_REDIS_REST_TOKEN")}`,
     },
     body: JSON.stringify(["SET", key, data, "EX", ttlSeconds])
     })
     }
     
     const kv = await Deno.openKv();
     
    const beforeKV = performance.now()
     const kvResponse = await kv.get([key])
     const kvLatency = performance.now() - beforeKV
     if (!kvResponse.value) {
     const setRes = await kv.set([key], data, { expireIn: ttlSeconds })
     console.log({ setRes })
     }
     
     return c.json({
     redisLatency,
     kvLatency,
     });
    });

    結果 - グローバル レイテンシ

    30分後の結果がこちらです。ここで測定されるレイテンシは、Deno Deploy 上の関数からストアまでのものであり、関数を呼び出すためのネットワーク ラウンドトリップは含まれません。

    パフォーマンスとコストの比較:Deno KV と Upstash Redis

    画像をクリックするとフルサイズで表示されます

    デノ KV Upstash Redis P90265ms76msP99494ms94ms

    Deno KV は、KV からデータを読み取るときにかなり遅くなります。私が最初に考えたのは、世界中に分散された読み取りリージョンが十分ではないのではないかということでした。このベンチマークの時点では、gpc-us-east4 でした。 、gpc-asia-southeast1gcp-europe-west3gcp-southamerica-east1gcp-us-west2 .

    おそらく、データを取得するためにかなりの数のリクエストが複数のリージョンにまたがる必要があり、これがレイテンシの高さを説明し、同じクラウド内、場合によってはデータセンター内でコンピューティングとストレージの両方を制御するという Deno の利点を実質的に無効にしてしまいます。一方、Upstash は AWS 上で実行されており、Deno から Redis へのすべてのリクエストはクラウド プロバイダーの境界を越えて送信されます。

    単一リージョン

    この理論をテストするために、2 番目のベンチマークを実行しました。このベンチマークでは、単一の場所 (自宅) から関数を呼び出し、すべてのリクエストがフランクフルトを経由します。 Deno KV と Upstash Redis の両方にリードレプリカがあります gcp-europe-west3eu-central-1 それぞれ GCP と AWS です。

    パフォーマンスとコストの比較:Deno KV と Upstash Redis

    画像をクリックするとフルサイズで表示されます

    このシナリオではどちらのサービスもはるかに高速ですが、Deno KV は依然として Upstash Redis よりも遅いです。ここでは、単一リージョンのレイテンシを示します。括弧内はグローバル レイテンシに対するデルタです。

    デノ KV Upstash Redis P90132ms (-133)16ms (-60)P99154ms (-340)26ms (-68)

    154 ミリ秒は 494 ミリ秒よりも明らかに優れていますが、これはすべてのトラフィックが 1 つのリージョンから送信されているという前提に基づいており、グローバル エッジ ネットワークの概念全体に反します。グローバル API を実行している場合、世界中からトラフィックが送信され、KV 内のデータにアクセスする必要があるすべてのリクエストがこれによって遅くなります。

    価格

    Deno と Upstash はどちらも、主に使用量に対して料金を請求します。どちらも優れた無料枠があるため、何も支払わずに試すことができます。

    デノ KV Upstash Redis 定額料金 $20/月 (読み取り領域の追加) 無料ストレージ $0.50 / GB$0.25 / GB読み取り$1 / Million / 4kb$2 / Million (サイズに関係なく)書き込み $2.50 / Million / 1kb$2 / Million (サイズに関係なく)帯域幅$0.50 / GB$0.03 / GB

    主な違いは、コストを計算するためにリクエストがどのくらいの大きさになるかを知る必要があるため、Deno の価格設定が期待したほど透明ではないことです。 Upstash ではすべてのリクエストが同じように請求されるため、これは問題ではありません。Upstash ではデフォルトでリクエストごとに最大 1MB の読み取りまたは書き込みが可能で、定額料金でこれを増やすことができます。

    結論としては、リクエストごとに 8 KB を超えるデータを読み取る場合は、Upstash の方が安価である可能性が高いということです。

    結論

    Deno KV は同じプラットフォーム上にあるため、非常に快適に使用できます。別のアカウントを管理する必要はなく、それを使用するために追加のセットアップも必要ありません。ただし、パフォーマンスとコストは Upstash には及ばず、できることも限られています。値の設定と取得は最も一般的な操作ですが、Redis でできることはそれだけではありません。私たちの例をチェックして、Redis の多くのアイデアや使用例を見つけてください。

    ご挨拶に来て、Discord または X でこの件に関する質問をしてください。


    1. Upstash Kafka、Redis、Next.js を使用してリアルタイム チャット アプリを構築する

      プロジェクトの説明 このブログ投稿では、ユーザーがメッセージ クライアントとチャット ルームを作成できるメッセージング アプリケーションを作成します。さらに、ユーザーは過去のメッセージにアクセスできるようになります。 プロジェクトは 2 ページで構成されます。最初のページはクライアント登録専用であり、一意の名前を持つ複数のクライアントを作成できます。 クライアントのユーザー名をクリックすると、その特定のユーザーに関連付けられたチャットルーム クライアントに移動します。 チャット アプリケーションのロジックは次のとおりです。 ユーザーはインデックス ページ上に複数のクライアント

    2. 新しいプランにより、AWSのRedisEnterpriseCloudのシンプルさと柔軟性が向上します

      AWSのお客様は、簡素化された統合請求書、EDP消費にカウントされる支出、および柔軟なオンデマンド価格設定により、AWSでRedisEnterpriseCloudを調達できるようになりました。 これを可能にするために、RedisとAWSのパートナーシップの次のステップであるRedis Enterprise Cloudの一般提供–AWSマーケットプレイスでの柔軟なプランを共有できることをうれしく思います。 これは、高性能アプリケーションを構築および実行する際に、共同顧客に最新の購入体験と柔軟な価格設定オプションを提供するというRedisとAWSの間のコミットメントのレベルを示しています。コ