キャッシュ内の Pub/Sub メッセージング: 概要
このパブリッシュ/サブスクライブ (Pub/Sub) メッセージング パラダイムは、送信者 (パブリッシャー) と受信者 (サブスクライバー) の知識がなくても、複数のアプリケーション間でメッセージを交換するための中間チャネル (トピックと呼ばれる) を提供します。 パブリッシャー アプリケーションは、トピックを通じてサブスクライバー アプリケーションにメッセージを送信します。
すべてのPub/Subモデルには通信用のチャネルが必要なので、 NCache パブリッシャーがメッセージをトピックにパブリッシュできるように、トピックの媒体として機能します。 サブスクライバーは、通知としてトピックを介してメッセージを受け取ります。 使用する NCache トピックの媒体として、モデル内の疎結合を保証し、抽象化を高め、分散トピックに追加の利点を提供します。
分散キャッシュのほかに、 NCache 専用の Pub/Sub メッセージング キャッシュ.
重要
次の理由から、専用の Pub/Sub キャッシュをお勧めします。
立ち退き: キャッシュにメッセージとキャッシュ アイテムが含まれている場合、キャッシュ アイテムを頻繁に削除すると、サブスクライバーに転送する前にメッセージが削除される場合があります。
状態転送: 状態転送は、各キャッシュ アイテム操作にコストを追加します。 メッセージは頻繁にパブリッシュ、リレー、期限切れになるため、この繰り返しのアクティビティは状態転送をトリガーするため、コストがかかることがわかります。
Pub/Sub メッセージングが重要な理由
リアルタイム イベントでは、イベント ドリブンの分散アーキテクチャ内のさまざまなアプリケーション間で通知を共有する必要があります。 Pub/Sub パターンを使用すると、パブリッシャーはイベントをサブスクライバーと共有できるため、目的のイベントの発生時に必要な処理が行われます。
たとえば、加入者のグループは、注文の配送の詳細を処理して注文の配送を追跡できるように、注文の発送の詳細に関する情報に興味を持つことができます。したがって、注文の詳細に関するメッセージを中継するトピックをサブスクライブします。パブリッシャーがトピックに関するメッセージを公開すると、サブスクライバーは通知を受け、サブスクライバー側でさらに処理するための注文の詳細を含むメッセージを受け取ります。
Pub/Sub コンポーネント
の基本コンポーネント NCache パブリッシャー サブスクライバー モデルは以下にリストされており、後で詳しく説明します。
トピック: メッセージが公開される場所。
出版社: メッセージをトピックに発行するアプリケーション (Web アプリケーション、デスクトップ アプリケーション、マイクロサービス)
加入者: トピックからのメッセージの受信に関心のあるアプリケーション。
サブスクリプション: サブスクライバが意図したメッセージを受信するために作成された対象エンティティ。
本文: パブリッシャーが送信し、サブスクライバーがトピックを介して受信する実際のデータ オブジェクト。
ご用件
パブリッシャーはトピックに関するメッセージをパブリッシュします。 サブスクライバーは、トピックにサブスクライブしてメッセージを受信します。 このトピックは、分散形式で存在します。 NCache. したがって、その作成はすべてのクラスタ ノードで行われます。 パブリッシャーがキューにパブリッシュする実際のデータ オブジェクトを格納するメッセージ ストアが含まれます。 また、サブスクライブしているすべてのサブスクライバーのリストとパブリッシャーのリストを内部的に維持します。
ITopic/Topic
インターフェイスが容易に トピック作成, トピックの取得, トピックの削除。 あなたがすることもできます トピックを非同期で削除する トピックが削除されるのを待つのを避けるため。
Note
トピックと基礎となるメッセージの分散性により、スケーラビリティが向上します。
メッセージがトピックにパブリッシュされると、イベントが発生し、トピックはそのイベントを優先度に基づいてサブスクライバーに中継します。 メッセージ配信オプション 必要に応じてメッセージを受け取ることができるようにします。 次の図は、パブリッシャーとサブスクライバーの仲介チャネルとしてのトピックの役割を示しています。
Note
サブスクライバが一時的に切断され、その後自動再接続された場合、サブスクライバ側で中断されることなく、サブスクリプションや障害イベント通知などのトピックに関連するすべての情報がトピックに再登録されます。
トピックの優先順位
NCache では、重要度に基づいて優先度の最も低いトピックと優先度の高いトピックに優先順位を付けるのに役立つトピック レベルの優先度が導入されています。 重要なメッセージを発行する必要がある場合は、優先度の高いトピックを作成できます。 したがって、それらのメッセージが最初に配信されます。 同様に、重要でないメッセージを公開する場合は、優先度の低いトピックを作成できます。 キャッシュはこれらのメッセージを最初に削除します。
重要
トピックの優先度は、トピックの作成時にのみ指定でき、後で変更することはできません。
あなたは単に設定することができます トピック レベルの優先度 重要なメッセージの配信を優先するために、トピックの作成時に。
トピック削除通知
トピックが削除されると、キャッシュからのすべてのメッセージと関連メタ情報が削除されます。したがって、次の理由により、サブスクライバーとパブリッシャーはこの削除の通知を受け取ります。
- サブスクライバは、登録されたトピックからの受信メッセージを待っている可能性があります。 トピックが削除されると、サブスクライバーはイベント通知を通じてその実行を適切に処理し、無限の待機状態を回避できるようになります。
- パブリッシャーは、存在しないトピックにメッセージを送信することを回避し、保留中のメッセージと今後の実行をそれに応じて処理できます。
トピック削除通知を受け取るには、アプリケーション OnTopicDeleted イベントの登録.
メッセージをトピックにパブリッシュする
パブリッシャーは次のことができます メッセージをトピックに公開する トピック名を指定して。メッセージを非同期かつ一括で発行して、アプリケーションのパフォーマンスを向上させることができます。パーティション化されたキャッシュは、クラスター全体にメッセージを分散します。メッセージ ルーティングの場合、すべてのメッセージには と呼ばれる一意の ID があります。 MessageID
パブリッシャー側、およびのハッシュ コード MessageID
メッセージを格納するクラスタ ノードを決定します。
Note
NCache XNUMX 回の呼び出しで大量のメッセージを公開して、パフォーマンスとメモリ使用量を改善できます。
NCache パブリッシャーがメッセージのパブリッシュ中に次のプロパティを使用できるようにします。
メッセージ配信オプション: パブリッシャーは、メッセージを XNUMX 人のサブスクライバーに配信するか、パブリッシュ時にすべてのサブスクライバーにブロードキャストするかを決定できます。 メッセージ配信オプション.
メッセージの有効期限: パブリッシャーは、次のことができます。 メッセージの有効期限を設定する キャッシュ内のメッセージの存続期間を制御します。 有効期限については、 メッセージ のセクションから無料でダウンロードできます。
メッセージ配信失敗通知: パブリッシャーは次のことができます MessageDeliveryFailure に登録する 特定のメッセージの配信に失敗した場合に通知を受け取る。 これらの配信失敗のシナリオについては、 サブスクリプションへのメッセージの割り当てと配信 のセクションから無料でダウンロードできます。
重要
メッセージ配信失敗通知は、有効期限のあるメッセージのみを対象としています。
- トピック削除通知: パブリッシャーが登録できる トピック削除通知 トピックが削除された後に、対応するメッセージが不当に公開されるのを防ぐため。
トピックを購読する
加入者アプリケーションは、次のことができます。 トピック メッセージを購読する サブスクリプションを通じて関心のあるトピックに登録することによって。 Pub/Sub では、サブスクリプションは、特定のトピックで示されたサブスクライバーの関心を表します。
Note
新しいノードがキャッシュ クラスターに追加され、状態転送がトリガーされた場合、すべてのサブスクリプションとメッセージおよびキャッシュ データが新しいノードにレプリケートされます。
NCache トピック名またはパターンを指定してトピックを購読できます。詳細については、以下を参照してください。 購読方法. さらに、設定することもできます メッセージ配信モード サブスクリプションの作成中に同期または非同期として。
NCache は、次に説明する複数のタイプの Pub/Sub サブスクリプションを提供します。
サブスクリプションとその種類
でのサブスクリプション NCache 次のタイプに分類できます。
耐久性のある
Note
永続サブスクリプションは名前付きサブスクリプションです。
で 永続的なサブスクリプションキャッシュにより、アプリケーション/マシンのシャットダウン、アプリケーションの再起動、またはネットワーク障害による切断が発生した場合に、サブスクライバがメッセージを見逃すことがなくなります。したがって、永続的なサブスクリプションは、サブスクライバーの切断や再接続によって影響を受けることはありません。
Note
サブスクライバーが適切にサブスクライブを解除しない限り、恒久サブスクリプションは削除されません。
サブスクライバが切断された場合、このサブスクライバ宛てのメッセージは、サブスクライバが再参加するか、メッセージの有効期限が切れるまで、サーバーに保存されます。 永続サブスクリプションは、サブスクライバが適切にサブスクライブを解除しない限り、サブスクライバの切断時に自動的に削除されません。
永続サブスクリプションは、さらに次のように分類されます。
共有: 永続的な共有サブスクリプションとは、複数のサブスクライバーが名前付きサブスクリプションを共有することを意味します。 共有サブスクリプションに割り当てられたメッセージは、ラウンドロビン方式でサブスクライバー間で負荷分散されます。 サブスクライバがネットワークを離れても、メッセージはアクティブなサブスクライバに配信され続けます。 そのため、サブスクライバーが割り当て後に正常にまたは突然脱退した場合、割り当てられたメッセージは他のアクティブなサブスクライバーに再割り当てされます。
重要
共有サブスクリプションは、永続サブスクリプションでのみサポートされます。
共有サブスクリプションでは、サブスクリプションはトピック上に残り、すべてのサブスクライバーがサブスクリプションを解除するまでサブスクリプションを解除できません。 これは、アクティブなサブスクライバーが XNUMX 人でもいる限り、サブスクリプションはアクティブなままであることを意味します。
- 排他的: 排他的永続サブスクリプションとは、サブスクリプションに対して一度に登録されるアクティブなサブスクライバーが XNUMX つだけであることを意味します。 サブスクライバーが正常にサブスクライブを解除すると、排他的なサブスクリプションを新しいサブスクライバーに割り当てることができます。 サブスクライバが突然脱退した場合、新しいサブスクリプション要求は、アイドル時間を待ってから受け入れられます。 サブスクライバーがいなくても、割り当てられたメッセージは常にそこに残ります。
非耐久性
で 非永続的なサブスクリプション、サブスクライバーは、接続されている限り、そのサブスクライバー向けのメッセージのみを受信します。 加入者がネットワークを離れると、切断期間中に公開されたメッセージを受信しなくなります。 非永続サブスクリプションは、デフォルトで排他的です。
重要
サブスクライバーが再起動すると、サブスクライバーはメッセージを失います。
また、非永続サブスクリプションは、サブスクライバがネットワークを離れると自動的に削除されます。これは、サブスクライバが再参加するか接続を再度確立すると、新しいサブスクリプションとみなされます。
恒久サブスクリプションの有効期限
また、ご購読はいつでも停止することが可能です 永続的なサブスクリプションの有効期限を設定する. たとえば、アクティブなサブスクライバーがかなりの時間存在しない場合です。 ここで、サブスクリプションは、非アクティブな状態が一定期間続くと期限切れになります。 永続サブスクリプションの有効期限が切れると、このサブスクリプションに割り当てられたメッセージは、 DeliveryOption
これらのメッセージの。
Note
サブスクライバがポーリングまたはその他のアクティビティを実行するたびに、サブスクリプションの有効期限がリセットされます。
非アクティブなサブスクリプションの処理
Note
非永続サブスクリプションのみが非アクティブとしてマークされ、これは永続サブスクリプションには適用されません。
一定の非アクティブ期間を待った後、サブスクリプションに対してアクティブなサブスクライバーがいない場合、サブスクリプションは期限切れと見なされます。 加入者が非アクティブ期間中に切断された後に再加入すると、割り当てられたメッセージを受信できるようになります。
重要
非アクティブなサブスクリプションは、サーバー側でのメモリの過負荷を避けるために処理する必要があります。
非アクティブ期間を待った後、サブスクリプションは期限切れになり、割り当てられたメッセージは他のサブスクリプションに再割り当てされます。 メッセージの再割り当ては、メッセージの配信オプションによって異なります。
サブスクリプション A に割り当てられたメッセージの配信オプションが ALL に設定されており、サブスクリプション A の有効期限が切れる前にすでに別のサブスクリプション B に割り当てられている場合、再割り当ては必要ありません。
サブスクリプションに割り当てられたメッセージの配信オプションが ANY に設定されており、サブスクリプションの有効期限が切れた場合、割り当てられたメッセージは常に他のサブスクリプションに再割り当てされます。
メッセージ
メッセージには、パブリッシャーによって送信され、トピックを通じてサブスクライバーに配信される実際のデータ オブジェクトが含まれています。パブリッシャーがトピックに関するメッセージを公開すると、登録済みのサブスクライバーには、関心のあるメッセージが公開されたことが通知されます。複数のメッセージの場合、それらは特定のトピックのキュー内のシーケンスに格納されます。
Note
同じメッセージを複数のトピックに割り当てることができます。 これは、自動生成された ID によって一意に識別されます。
ここでは、サブスクリプションへのメッセージの割り当て、メッセージ配信、および確認のメカニズムについてさらに説明します。
サブスクリプションへのメッセージの割り当てと配信
最初は、メッセージはサーバー側で割り当てられていません。 すべてのサブスクリプションは、 DeliveryOption
. サブスクリプションの割り当てが発生すると、サブスクライバーは通知を受け取ります。 次に、サブスクライバーはポーリング メカニズムを実装して複数のメッセージを一括フェッチし、サーバー側のオーバーヘッドを削減します。 メッセージを受信した後、サブスクライバーは受信確認を送信し、メッセージは配信されたと見なされます。
Note
メッセージを受信するサブスクライバが存在しない場合、メッセージはトピックに保存されます。 最初のサブスクライバがトピックをサブスクライブするとすぐに、メッセージが割り当てられ、最初のサブスクライバに配信されます。
メッセージ配信オプション
パブリッシャーは メッセージ配信オプションを指定する 公開時にメッセージを 1 人の購読者に配信するか、すべての購読者にブロードキャストするかを決定します。成功した配信の定義は、指定された配信オプションによって異なることに注意することが重要です。
XNUMX つの配信オプションと、対応する正常な配信基準については、次のように説明されています。
すべて: 登録されたすべてのサブスクライバーがメッセージを受信します。 すべてのサブスクライバーが確認すると、メッセージは削除されます。
どれでも: 単一の登録済み加入者がメッセージを受信します。 割り当てられたサブスクライバが確認応答を送信しない場合、メッセージは次のサブスクライバに再割り当てされます。 確認応答を送信した場合、メッセージは正常に配信されたとみなされます。
Note
指定された配信オプションに従ってメッセージが正常に配信されると、そのメッセージはキャッシュから削除されます。
メッセージの保存と配布
キャッシュ内でのメッセージの保存と配布の重要な側面は次のとおりです。
メッセージはトポロジに基づいてノード間で分散されます。
パーティション レプリカ トポロジとパーティション化トポロジでは、ハッシュ ベースの分散が使用されます。
レプリケート トポロジの場合、メッセージはクラスター化キャッシュのすべてのノードにレプリケートされます。 ただし、コーディネーター ノードはメッセージ操作を担当します。
ミラー トポロジの場合、メッセージはアクティブ ノードにパブリッシュされ、それに応じてパッシブ ノードに複製されます。
メッセージ ストアがエビクションに近づいている場合は、メッセージ ストアがいっぱいになり、エビクションが開始されたことを示すイベントがログに記録されます。
メッセージには、キャッシュ メモリのオーバーヘッドがあります。 したがって、キャッシュ サイズを計算する際には、メッセージ サイズを考慮する必要があります。
メッセージの動作
ここでは、次の場合に予想されるメッセージの動作について説明します。
キャッシュのクリア時: キャッシュがクリアされると、メッセージはキャッシュ アイテムと一緒に削除されます。
キャッシュの再起動時: キャッシュのクリアと同様に、キャッシュの再起動時にキャッシュの内容がクリアされます。 これには、すべてのトピックとその中に含まれるメッセージも含まれます。
立ち退き: If エビクションが有効になっています Pub/Sub キャッシュでは、最初にデータが削除され、次にメッセージが削除されます。
暗号化と圧縮: If 暗号化 & キャッシュ レベルで設定されているだけでなく、トピック メッセージ ペイロードにも適用されます。
状態遷移: 状態転送の場合、メッセージがクラスター内の別のノードに移動すると、メッセージが最終的に保存されるノードが配信を担当します。
メッセージ配信失敗通知
重要
有効期限のあるメッセージが配信前に期限切れになると、サブスクライバは配信失敗通知を受け取ります。
メッセージがどのサブスクライバーにも割り当てられない、または配信されない場合、それは失敗とみなされます。これは、サブスクライバが存在しないか、ネットワーク障害により非アクティブになっている場合に発生する可能性があります。このようなシナリオでは、パブリッシャーは次のことができます。 登録メッセージ配信失敗通知. 配信失敗の通知は、有効期限のあるメッセージに対してのみ行われることに注意してください。 いずれかのサブスクライバーに配信される前にメッセージの有効期限が切れた場合、メッセージの配信は失敗したと見なされます。
Note
トピックに対して複数のパブリッシャーが存在する場合、失敗通知は、失敗通知に登録されているアクティブなパブリッシャーのいずれかに配信されます。
メッセージの有効期限
キャッシュ アイテムと同様に、パブリッシャーは次のことができます。 メッセージの有効期限を設定する。メッセージは有効期限が過ぎるとすぐにキャッシュから期限切れになり、同じクリーニング間隔メカニズムが使用されます。
メッセージの有効期限によって、メッセージがキャッシュに保持される時間が決まります。 配信に関係なく、メッセージが配信されない場合は、有効期限後に削除されます。 有効期限が切れる前にメッセージが正常に配信された場合、メッセージは有効期限を待たずにキャッシュから削除されます。
注文したメッセージ
NCache は、メッセージのシーケンスがクライアント側で維持される、順序付けされたメッセージをサポートするようになりました。パブリッシャーができることは、 順序付けられたメッセージを発行する メッセージのチャンクのシーケンス名を指定します。その後、順序付けされたメッセージは、発行されたのと同じ順序でサブスクライバーに配信されます。順序付けされたメッセージのチェーンでは、シーケンス文字列が同じである必要があります。シーケンス文字列を使用すると、すべてのメッセージが同じノード上に存在します。 ロケーションアフィニティ 機構。
Note
同期配信モード 順序付きメッセージに使用できます。
順序付けされたメッセージの重要な特徴は次のとおりです。
同じシーケンスのパブリッシャーからのメッセージは、単一のキャッシュノードに存在します。
Status
DeliveryOption
が Any に設定されている場合、同じシーケンスのすべての順序付けされたメッセージが同じサブスクライバに配信されます。 特定の加入者が接続を失ったり利用できなくなった場合、この目的のために新しい加入者が再割り当てされます。 ただし、DeliveryOption
が [すべて] に設定されている場合、同じシーケンスのすべての順序付けされたメッセージがすべてのサブスクライバに配信されます。状態転送の場合、順序付けられたメッセージは順序を失い、順序を維持せずに公開される可能性があります。
順序付けされたメッセージは、公開APIの同期モードを使用してのみ公開できます。 バルクおよび非同期API呼び出しはサポートされていません。
監視
NCache Pub/Sub トピックの統計を監視し、さまざまな観察を行う機能を提供します パフォーマンスカウンター この点について。 Pub/Sub トピックのアクティビティとステータスは、 WindowsPerfMonカウンター & コマンドラインツール.
信頼性と高可用性
NCache メッセージ配信の確認メカニズムを実装します。 メッセージは、メッセージが正常に配信されるまでメモリに保持されます。 少なくともXNUMX回の配達 基準。 したがって、 NCache 分散アーキテクチャでの Pub/Sub メッセージングのメッセージ配信の信頼性を保証します。
さらに、最大 XNUMX つのノードのフォールト トレランス パーティション-レプリカトポロジ Pub/Sub Messaging ストアの可用性を高めます。 ノードが何らかの理由でクラスターを離れた場合、レプリカにはメッセージのバックアップがあります。
このセクションの内容
Pub/Subトピック
での Pub/Sub モデルのトピックを作成、取得、削除する方法について説明します。 NCache.
メッセージをトピックにパブリッシュする
トピックを作成してメッセージを発行するサンプル コードを提供します。
トピックを購読する
トピックに対してサブスクライブし、関心のあるメッセージを受信するためのサンプルコードを提供します。
Pub/Subイベント
キャッシュとアプリケーション全体で発生するさまざまなイベントについてパブリッシャーとサブスクライバーに通知する Pub/Sub イベントについて説明します。
Pub/Subトピックの監視
Pub/Sub統計を監視する方法について説明します NCache モニター、PerfMon、およびコマンド ライン ツール。