Redis Pub/Sub の説明:パブリッシュ/サブスクライブ メッセージングによるスケーラビリティの向上
メンテナンスが容易で、スケーラブルで、パフォーマンスが高い必要があるアプリケーションに取り組んでいる場合は、パブリッシュ/サブスクライブ メッセージング パターンが良い選択です。
その背後にあるアイデアはシンプルですが強力です。 パブリッシャーと呼ばれる送信者がいます。 彼らの唯一の役割は、 送信または公開することです。 メッセージ。彼らは、誰が受け取るか、あるいは誰かが受け取るかどうかなどまったく気にしません。彼らはメッセージを撃つだけで忘れてしまいます。そして彼らはチャネルを介してそれを行います .
たとえば、テレビのチャンネルと考えてください。スポーツチャンネル、天気予報チャンネル、料理チャンネルなどがあります。すべてのパブリッシャーはメッセージを特定のチャネルに送信し、購読している人にメッセージを送信します。 このチャンネルではこれらのメッセージを受信できます。
ここに購読者がいます。 遊びに来てください。 1 つ以上のチャンネルに登録し、そこでブロードキャストされるメッセージの受信を開始できます。
すでに述べたように、メッセージは送信され、忘れられるものです。これは、加入者が特定のチャネルに加入した場合、そのチャネルで以前に送信されたすべてのメッセージをこの加入者は利用できなくなることを意味します。
この種のアーキテクチャの性質により、さまざまなコンポーネント間の低結合を簡単に実現でき、堅牢で保守が容易なアプリケーションを構築するための強固な基盤を提供できます。
たとえば、システムのパブリッシング部分を交換または改善する必要がある状況を想像してください。たとえば、パブリッシャーやチャネルを追加するなどです。この 2 つの部分は分離されているため、パブリッシャーは購読者を気にせず、その逆も同様であるため、システムの他の部分を壊しているかどうかを心配することなく、これを簡単に行うことができます。新しいパブリッシャーを追加するだけです。その後、加入者が関連するチャネルにアクセスすると、そのチャネルの使用が開始されます。
Redis とは何ですか?
Redis の背後にある最初のアイデアは、その祖先である Memcached の代替として、メモリ内キャッシュ ソリューションとして機能することでした。
しかし、現在では、メモリ内のデータ構造ストア、キーと値のデータベース、メッセージ ブローカリングなどを提供する、多機能のソリューションとなっています。これにより、前述した他の機能と同様に、非常に高速なキャッシュ ソリューションを必要とするアプリケーションを構築する場合に最適な候補となります。特に、アプリのパフォーマンスが通常の使用にとって重要である場合は特にそうです。
Redis のパフォーマンス比較 (出典:Google)
Redis を使用する際の最大の利点の 1 つは、オンラインで見つけられる巨大なコミュニティと技術リソースです。これらのリソースの多くは無料であり、無料枠を提供するオンライン プラットフォームもあります。
Redis にはクラウド ソリューションも含まれています。自分で試してみたい場合は、ここにアクセスして無料アカウントを登録するか、最初に提供されるクーポンを使用してください。
Redis Enterprise Cloud のサインアップ / サインイン ページ
パブ/サブとは何ですか?
Redis のチャネルのパブリッシュ/サブスクライブは、上で説明しなかった機能の 1 つですが、Redis の最新バージョンに含まれています。これは、pub/sub メッセージング パターンの実装であり、パブリッシャーとサブスクライバーがチャネル経由でメッセージを交換します。
以下で簡単に説明してから、私が用意した小さなデモ アプリで実際に見てみましょう。
Redis pub/sub はどのように機能しますか?
パブリッシャー (メッセージの作成者)、チャネル (メッセージが通過する)、およびサブスクライバー (メッセージの受信者) があります。誰が何を受け取るかは、誰がどのチャンネルに登録しているかによって決まります。
例でこれがどのように機能するかを見てみましょう:
3 つの異なるチャネルにメッセージを公開する 3 つのパブリッシャーを作成したとします。これらをチャネル 1、2、3 と呼びましょう。また、3 人の加入者がいます。加入者 A、B、C と呼びましょう。
ここで、サブスクライバ A が 3 つのチャネルすべてでメッセージをリッスンしている、つまりサブスクライブしていると想像してみましょう。そして、サブスクライバ B と C はチャネル 2 と 3 にサブスクライブしています。これは、3 つのパブリッシャのいずれかがメッセージを送信すると、サブスクライバ A がそれを受信することを意味します。また、サブスクライバ B と C は、パブリッシャー 2 と 3 によって送信されたメッセージのみを受信します。これは、これらのチャネル (2 と 3) 上のメッセージのみをリッスンしているためです。
チャネルを使用する 2 つのエンティティ (1 つは送信、もう 1 つは受信) があることに注目してください。しかし、それらは完全に独立しています。また、送信されたメッセージは永続化されません。出版社から送信されると忘れられてしまいます。送信時にサブスクライブされているエンティティのみがそれらを取得します。
Redis で pub/sub を使用する方法
Redis で使用できるクライアント ライブラリは多数あります。特定のプロジェクトのニーズに応じて、または好みのプログラミング言語に応じて、誰もがアクセスして選択できる専用のページがあります。
Redis の担当者は、これらのリポジトリの一部を推奨としてマークしました。 これにより、これらすべてを初めて使用する場合でも、選択が簡単になります。
以下のデモでは、Node.js 用のフル機能の Redis クライアントである ioredis を使用しました。これを選択したのは、デモ アプリの UI が React と Node.js で構築されており、サーバー コードがそれに非常にうまく適合するためです。
Redis Pub/Sub デモ
Redis Pub/Sub Visualizer アプリ
ショータイム!
デモ アプリケーションの背後にある考え方は、パターンがどのように機能するかを視覚的に示すことです。
初めて開いたときに目に入るのは、天気、スポーツ、音楽という 3 つの架空のテレビ チャンネルで簡単なメッセージ (ニュース) を公開するための 3 つのボタンです。
公開ボタンの下にあるカードは購読者です。マウス カーソルをそれらのいずれかの上に移動すると、マウス カーソルが裏側に反転し、3 つのボタンが表示されます。これらの各ボタンを使用して、関連するチャンネルを購読できます。
チャンネル登録者がチャンネルに署名し、このチャンネルのアイコンまたは公開ボタンをクリックすると、カードの表面にサンプル ニュースが表示されます。
さまざまなパブリッシャーとサブスクライバーの組み合わせを試して、結果を確認してください。
これにより、上の例で説明した内容がよりよく理解できると幸いです。
デモ アプリをローカルで実行する方法
デモ アプリケーションをローカルにインストールして実行するには、以下の手順に従います (すべてのコマンドはルート プロジェクト ディレクトリから実行されるとみなされます)。
フロントエンドの実行:
cd client yarn && yarn dev
バックエンドの実行:
cd server && yarn yarn start
最後に、ローカルにインストールされた Docker (お持ちでない場合は、ここから入手できます) を使用して、これを実行します。
docker run -p 6379:6379 redislabs/redismod:preview
これはおそらく、Redis の実行コピーをローカルに保持する最も簡単な方法です。もう 1 つのオプションは、Redis Cloud を直接使用し、アプリケーションをオンラインでデプロイすることです。これは私がまだ調査中のオプションであり、それができたら、アプリ全体をデプロイしてお知らせします。
閉会
この記事では、Pub/Sub メッセージング パターンの主題について紹介しました。低結合アーキテクチャとリアルタイムのようなメッセージング機能を備えた高パフォーマンスのアプリケーションを構築したい場合は、特にパブリッシュ/サブスクライブ パターンと Redis の使用を検討することを覚えておくことが重要です。
実際、Redis を使用する実際のアプリケーションの多くはダッシュボード ベースです。これは、通常、さまざまなデータを表示する優れたダッシュボード画面があり、多くの場合リアルタイムで更新されることを意味します。
たとえば、特定のエリアの交通状況を表示するシステムを想像してください。この種のソフトウェアは、パブリッシュ/サブスクライブの利点を活用するのに最適な候補です。多くの場合、これは Redis を使用することで実現されます。
いずれにせよ、開発者およびエンジニアとして、私たちは取り組んでいるプロジェクトの特定のニーズに常に従う必要があります。新しいパターンやテクノロジーの導入を決定するときは、慎重に行い、真剣な研究で裏付けをとるべきです。
無料でコーディングを学びましょう。 freeCodeCamp のオープンソース カリキュラムは、40,000 人以上の人々が開発者としての職に就くのに役立ちました。始めましょう
-
QStash スケジューラを使用して GPT Online で WhatsApp リマインダーを自動化する
QStash は、サーバーレス環境向けに設計されたタスク スケジューラおよびメッセージ キュー システムです。これは、状態の管理を気にすることなく、特定の間隔で 1 回または繰り返し実行される自動ワークフローを設定できるため、開発者にとって貴重なツールです。 QStash コンソールを試してみて、リクエストの作成方法の感覚を得ることができます。 使用例 私の製品 GPT Hotline は、基本的に WhatsApp 上の ChatGPT です (同じ基礎モデルを使用しています)。 ChatGPT アプリと同じように、専用の番号でボットにテキスト メッセージを送信できます。 GPT
-
自動パイプライン処理により v0.dev のロード時間を 50% 短縮
Vercel KV は Web プロジェクトにとって非常に貴重なツールですが、広範囲に使用すると HTTP リクエストの数が急速に増加し、パフォーマンスに影響を与える可能性があります。 Redis パイプラインはコマンドをバッチ処理してリクエストを削減する方法を提供しますが、実装が難しい場合があります。パイプラインの効率性と基本的な Redis コマンドのシンプルさを組み合わせるソリューションはありますか? 自動パイプラインが登場します。 – 複雑なコーディングを行わずにパフォーマンスを向上させるシームレスな方法を提供します。 問題 Redis がデータ ソースとして広く使用されている W