コアデータリアルタイム

リアルタイムチャットと通知

接続中のすべてのクライアントにメッセージをリアルタイムで配信します。クラスター向けのシャード化チャンネルと、履歴のためのストリームに対応しています。

発行ですべての購読者に
1
クラスター向けチャンネル
シャード化
ストリームで
+履歴
ステップ 1 / 5
サーバーが購読

各WebSocketサーバーは、接続中のユーザーがいるルームを購読します。

サンプルセッションplaying
# サーバーが購読
hotkv> SUBSCRIBE room:42
1) "subscribe"
2) "room:42"
3) (integer) 1

実際のHotKVコマンドと応答例を使ったアニメーションのウォークスルーです。任意のステップをクリックすると、そこに移動します。 コマンドと応答は、HotKVで実際に入力し表示されるとおり英語のままです。

課題

チャットルームやライブ通知のフィードは、多数のWebSocketサーバーをまたいで、接続中のすべてのユーザーに同時に届かなければなりません。データベースのポーリングは遅すぎて高価すぎますし、サーバー同士が何かが起きたことを互いに伝える共通の手段も必要です。

HotKVでの解決方法

各WebSocketサーバーは、自分のユーザーが関心を持つチャンネルを購読します。何かが起きると、1回のPUBLISHが購読中のすべてのサーバーに届き、各サーバーがそれを自分のユーザーに転送します。シャード化チャンネルはクラスター内でチャンネルを所有するノードにトラフィックをとどめ、各ルームの隣に置いたストリームが後から参加するユーザーのために履歴を保持します。

ステップごとに

コマンドごとに何が起きるか

  1. 01

    サーバーが購読

    各WebSocketサーバーは、接続中のユーザーがいるルームを購読します。

    SUBSCRIBE room:42
  2. 02

    Aliceがメッセージを送信

    Aliceのサーバーが一度だけ発行します。応答は、それを受け取った購読者の数です。

    PUBLISH room:42 "{\"from\":\"alice\",\"text\":\"Deploy is green\"}"
  3. 03

    履歴を保持

    メッセージはルームのストリームにも追記され、直近1000件に制限されます。

    XADD room:42:history MAXLEN ~ 1000 * from alice text "Deploy is green"
  4. 04

    Bobが後で再接続

    Bobはストリームから直近50件のメッセージを読み、その後チャンネルでライブ受信を始めます。

    XREVRANGE room:42:history + - COUNT 50
  5. 05

    クラスターでのシャード化チャンネル

    クラスターモードでは、SPUBLISHがメッセージをチャンネルを所有するノードにとどめます。

    SPUBLISH room:{42}:typing "alice"
活用シーン

実際のシナリオ

チームチャットとサポートチャット

メッセージはメンバーの接続を持つすべてのサーバーに配信され、ストリームが新しく参加した人に過去のメッセージを提供します。

ライブ通知

注文の更新、メンション、アラートは、発生した瞬間にブラウザーにプッシュされます。

コラボレーションアプリ

カーソルの位置や入力中の表示は、短命なチャンネルでブロードキャストされます。

標準搭載

得られるもの

ファンアウト

1回の発行がすべての購読者に届きます。

PUBLISHSUBSCRIBE

パターン購読

room:*を購読すれば、すべてのルームを受信できます。

PSUBSCRIBE

シャード化Pub/Sub

クラスター内では、チャンネルはそれを所有するノードにとどまります。

SPUBLISHSSUBSCRIBE

履歴

チャンネルを上限付きのストリームと組み合わせ、ユーザーが見逃したメッセージを保持します。

XADDXREVRANGE

よくある質問

Pub/Subのメッセージは保存されますか?

いいえ。Pub/Subは、その時点で購読している相手に配信します。ユーザーが履歴を必要とする場合は、チャンネルの隣にストリームを置いてください。

クラスターで動作しますか?

はい。シャード化Pub/Sub(SPUBLISH、SSUBSCRIBE)を使えば、各チャンネルのトラフィックはそれを所有するノードにとどまります。

キーの変更時に通知を受け取れますか?

はい。キースペース通知がキーの変更イベントを発行します。キースペース通知のドキュメントをご覧ください。

関連するユースケース

ご自身のワークロードで試してみましょう

HotKVはRedisプロトコルに対応しているため、既存のクライアントを向けるだけで、これらと同じコマンドを実行できます。