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

QStash:サーバーレス メッセージ キューおよびスケジューラ

QStash を発表できることを誇りに思い、興奮しています 🔥🔥🔥

正式には、QStash はサーバーレス ランタイム用に設計されたメッセージ キューおよびタスク スケジューラです。非公式には、QStash はサーバーレス機能の接着剤です。

サーバーレスは単純なタスクにのみ適しているという認識がありました。もうない。人々はサーバーレス スタックを使用して強力なシステムを構築します。強力なシステムは複数のコンポーネントで構成されています。これらのコンポーネント間の通信はエンジニアリング上の大きな問題です。この問題に対する優れた解決策はすでに存在します。しかし、既存のソリューションはサーバーレス空間には適合しないと考えています。複雑すぎるか、ステートレス ランタイムで動作するように設計されていません。したがって、次のような解決策が必要です。

  • サーバーレスやエッジを含むどこでも動作します。
  • ユーザーが実行するバックエンドを持たないサービスとしてのメッセージング
  • 軽量で理解しやすいため、学ぶ必要はありません。
  • 価格はゼロにスケールされます。

実際の例について話しましょう。私たちは e コマース アプリを持っており、購入のたびに情報メールを送信したいと考えています。新規購入 (newPurchase) 用のサービス (API ルート) と、電子メールと通知を送信するための 2 番目のサービス (sendEmail) があります。 newPurchase サービスから sendEmail サービスを呼び出すことができます。しかし、通話が失敗した場合はどうなるでしょうか?応答を待って再試行する必要がありますか?呼び出しが多すぎるとsendEmailサービスが混雑し、サービスが時間通りに応答しない場合はどうなりますか?これらすべてのケースを newPurchase サービスで処理する必要があります。また、sendEmailサービスの契約を変更する場合newPurchase サービスも更新する必要があります。

上記の例で QStash を使用する場合は、newPurchase サービスから QStash にリクエストを送信するだけです。 QStash はリクエストをキューに入れ、sendEmail サービスを呼び出します。サービスが応答しない場合、QStash はバックオフ戦略を使用して再試行します。 newPurchase サービスは sendEmail サービスからの応答を待たないため、sendEmail サービスの待ち時間は影響しません。 QStash は、newPurchase サービスと sendEmail サービスを分離します。メッセージ形式の互換性を維持している限り、両方のサービスを個別に更新できます。

QStash を使用すると、delays を追加できます。 リクエストに。発送から 3 日後にメールを送信して、お客様にレビューを追加するよう促します。タスクをスケジュールすることもできます。 CRON 式を使用してリクエストを送信できるため、繰り返し実行されます。

QStash:サーバーレス メッセージ キューおよびスケジューラ

ここで、QStash の機能を簡単に見てみましょう。

どこでも動作

キューから消費するために長時間実行するプロセスが必要な従来のプルベースのメッセージングの代わりに、QStash はメッセージを API にプッシュします。これにより、サーバーレス関数を使用してそれらを処理できるようになります。再試行、カスタム遅延、スケジュールを処理します。必要なのは、公的にアクセス可能な HTTP API だけです。

価格がゼロにスケールされる

QStash の価格は 100,000 リクエストあたり 1 ドルです。良い点は、最低支払い額や固定支払い額がないことです。使用した分だけお支払いいただきます。数百万件のリクエストが予想される場合は、リクエストあたりの価格が安いエンタープライズ プランを提供します。

更新 - 2022 年 9 月

QStash の価格を 100,000 リクエストあたり 1 ドルに引き下げました。最新の価格情報については、QStashPricing ページを参照してください。

エンドポイントとトピック

QStash へのメッセージと一緒にエンドポイントを含めます。したがって、QStash はこのエンドポイントにメッセージを送信します。また、1 つ以上のエンドポイントを 1 つの名前空間にグループ化できるトピックを定義することもできます。トピックの抽象化のおかげで、バックエンドの実装に触れることなくエンドポイントを変更できます。以下はトピック user-apis にリクエストを送信します。 。メッセージのコピーが各エンドポイントに配信されます。

エンドポイントへの送信
curl -XPOST \
 "https://qstash.upstash.io/v1/publish/https://example.com" \
 -H "Authorization: Bearer XXX" \
 -H "Content-Type: application/json" \
 -d "{ \"hello\" : \"world\" }"
トピックに送信する
curl -XPOST \
 "https://qstash.upstash.io/v1/publish/user-apis" \
 -H "Authorization: Bearer XXX" \
 -H "Content-Type: application/json" \
 -d "{ \"hello\" : \"world\" }"

スケジュール

QStash は、スケジュールに基づいてタスクの送信を繰り返すことができます。 CRON 式を値としてヘッダー Upstash-Cron に設定します。以下の例では、QStash に API を毎分呼び出すように指示しています。

curl -XPOST \
 'https://qstash.upstash.io/v1/publish/https://example.com'
 -H 'Authorization: Bearer XXX' \
 -H "Content-type: application/json" \
 -H "Upstash-Cron: * * * * *" \
 -d '{ "hello": "world" }' \

さらに

  • 再試行:API が成功ステータス コードで応答しない場合、QStash はリクエストを再試行して、すべてのメッセージが確実に配信されるようにします。
  • 遅延:メッセージの配信を最大 90 日遅らせます。
  • 重複排除:Deduplication-Id またはコンテンツベースの自動重複排除を使用して、メッセージの重複を防ぐことができます。
  • リクエスト署名:API はパブリックである必要があります。署名を検証することで、各受信リクエストの信頼性を検証できます。
  • JS/TS SDK:REST API はシンプルですが、JS/TS 上に構築している場合、SDK はさらにシンプルです。

終わりの言葉

QStash は、サーバーレスの世界に最高のメッセージング サービスを提供することを目指しています。これは私たちの最初のリリースなので、皆様のフィードバックと貢献を強く求めています。 QStash のドキュメントを確認してください。コメントや提案については、Discord や Twitter までお問い合わせください。


  1. Next.jsでMetamaskを使用するDAppの優先ストレージ

    DAOやDAPPなどのWeb3アプリケーションはますます人気が高まっています。 Web3の前提により、これらのプラットフォームは、ユーザーのIDを他のユーザーにプライベートに保ち、さらには自分自身に知られないようにしながら、ユーザーにより個人的でカスタマイズされたエクスペリエンスを提供することになっています。 このプロジェクトでは、このような場合のユーザーエクスペリエンスを向上させる方法を探ります。 ウォレットによる認証/IDチェック 多くのアプリケーションでは、ETHなどの暗号資産を管理するためにMetamaskのようなブロックチェーンウォレットが使用されます。このようなウォレットを使用

  2. FastlyComputeでRedisを使用する

    この例では、古いバージョンのFastlyCLIを使用しています。最新バージョンについては、この記事を確認してください。 この投稿では、Fastly Compute@Edgeで実行される簡単なアプリケーションを作成します。アプリケーションはUpstashRedisにアクセスして、ページビューを追跡します。 モチベーション エッジコンピューティングは、近年最もエキサイティングなトレンドの1つです。 CloudflareやFastlyなどのCDNサービスは、ユーザーがエッジインフラストラクチャでアプリケーションを実行できるようにするために開始されました。これは、開発者がグローバルに分散された高