circleHazelcast リングバッファ

その HazelcastPubSubRingBufferEventStore は、socketio4j の分散イベントストアを提供します(使用技術: Hazelcast ReliableTopic / RingBuffer. クラスタノード間でイベントをブロードキャストすることで水平スケーリングを可能にし、状態変更、参加、離脱、確認応答その他の内部イベントを複数のサーバー間で同期させます。

主な特徴

  • 分散および複製済み — イベントは Hazelcast を介してすべてのアクティブなクラスタノードに配信されます

  • 非同期かつノンブロッキングなディスパッチ — ReliableTopic は Netty のイベントループ外での配信を処理します

  • RingBuffer による信頼性 — 最近のメッセージは Hazelcast の設定に応じてノード再起動をまたいで保持されます

  • ストリーミングブロードキャストのセマンティクス — 各ノードはすべてのイベントを受信します(負荷分散は行われません)

  • 重複防止 — 同じノード発のイベントは次を使用してフィルタされます nodeId

仕組み

  • 各公開は Hazelcast ReliableTopic にイベントを書き込みます(モードにより単一またはタイプごと)

  • 購読されたイベントタイプは、裏で動作するリングバッファにメッセージリスナーをアタッチします

  • メッセージはローカルリスナーに配信されます 発生元が別のノードである場合のみ

  • リスナー登録はイベントタイプごとに追跡され、クリーンな購読解除とシャットダウンを可能にします

モード

モード
動作
使用するタイミング

MULTI_CHANNEL

各イベントタイプは固有の ReliableTopic を持ちます

デフォルト;競合を減らしイベント間の干渉を回避します

SINGLE_CHANNEL

すべてのイベントがルーティングされます ALL_SINGLE_CHANNEL

すべてのイベントタイプ間で厳密な順序付けが必要な場合

利点

👍 マルチノード展開で動作します 👍 外部ブローカーなしで socketio4j サーバーを同期します 👍 クラスタリングには Hazelcast のプリミティブを使用し、Kafka/Redis のインフラは不要です 👍 システムに既に Hazelcast が組み込まれている場合は設定が簡単です

制限事項

ℹ️ RingBuffer の容量がメッセージ保持期間を決定します — オーバーフローすると古いデータが破棄されます ℹ️ トランザクショナルな配信や重複排除はなく、正確に一度の意味論は保証されません ℹ️ 配信順序はパーティション/トピック単位であり、トピック間でのグローバル順序ではありません ℹ️ クラスタの状態やパーティション移行により一時的な重複配信が発生する場合があります

配信保証: 少なくとも一回の配信意味論 — イベントリスナーは重複を安全に処理するために冪等であるべきです。

最終更新

役に立ちましたか?