20 Coherenceトピックの概要

ここでは、Oracle Coherence 14.1.1.0.0でのパブリッシュおよびサブスクライブ・メッセージング機能について説明します。

この章の内容は次のとおりです。

トピックの概要

トピックAPIを使用すると、疎結合プロデューサとコンシューマ間にデータ・パイプラインを構築できます。

1つ以上のパブリッシャがトピックに値のストリームをパブリッシュします。1つまたは複数のサブスクライバが、トピックへの値のストリームを消費します。トピック値はすべてのOracle Coherenceデータ・サーバーに均等に分散されており、分散形式およびフォルト・トレラント形式での高スループット処理が可能です。トピックに対する各直接サブスクライバは、トピックにパブリッシュされたすべての値を受信します。

パブリッシュおよびサブスクライブ・メッセージングでは、メッセージはトピックのアクティブ・サブスクライバにのみ配信されます。サブスクライバ・グループは、トピックにキュー処理機能を追加します。トピックでサブスクライバ・グループを作成すると、トピックに送信される値はすべてサブスクライバ・グループに蓄積されます。1つ以上のサブスクライバがサブスクライバ・グループをサブスクライブできます。サブスクライバ・グループによって蓄積された値のストリームの場合、各値はサブスクライバ・グループ・メンバーの1つに対してのみ配信されるので、これらの値の分散パラレル処理が可能になります。

ノート:

基本的なトピック操作の例は、「基本的なトピック・パブリッシュおよびサブスクライブ操作の実行」を参照してください。

図20-2 サブスクライバ・グループ内のトピック値


「図20-2 サブスクライバ・グループ内のトピック値」の説明

チャネルについて

メッセージの順序付けを保証しながらパブリッシャおよびサブスクライバをスケーリングするために、Coherenceトピックにはチャネルの概念が導入されています。チャネルは、Coherenceが分散キャッシュでデータをパーティション化する方法と考え方が類似しています。混乱を避けるため、名前パーティションは再利用されません。チャネルは、パブリッシャとサブスクライバの両方の操作において重要な部分です。

パブリッシャは、サブスクライバが受信したときにパブリッシュするメッセージに対して存在する順序付け保証を制御するように構成されています。これを実現するには、メッセージを特定のチャネルにパブリッシュします。チャネルにパブリッシュされたすべてのメッセージは、パブリッシャがそのチャネルにパブリッシュした順序でサブスクライバによって受信されます。異なるパブリッシャによってチャネルにパブリッシュされたメッセージは、交互に配置されることがあります。異なるパブリッシャ間で順序付け保証はありません。異なるチャネルにパブリッシュされたメッセージは、サブスクライバが受信する際に交互に配置されることがあり、サブスクライバ・グループ内の異なるサブスクライバが受信することがあります。

トピックが持つチャネルの数により、パブリッシャは、多くのパブリッシャが1つのチャネルにパブリッシュすることで発生する可能性のある競合を回避できるため、より適切にスケーリングできます。複数のサブスクライバ(グループ内)が異なるチャネルにサブスクライブするため、メッセージの消費をスケーリングできます。したがって、順序を維持しながらメッセージの受信をスケール・アップできます。

同じサブスクライバ・グループに新しいサブスクライバが作成されると、使用可能なチャネルは、サブスクライバ間で可能なかぎり公平に割り当てられます。チャネルよりも多くのサブスクライバがある場合、一部のサブスクライバにはチャネルが割り当てられず、メッセージを受信しません。障害やハートビート・タイムアウトなど、なんらかの理由でサブスクライバが切断した場合、割り当てられたチャネルが残りのサブスクライバに再割当てされます。チャネル割当ての変更を通知するリスナーを登録できます。

トピックのチャネル数は構成可能で、理想的には小さな素数(デフォルトは17)です。アプリケーションのユース・ケース、および必要なスケーリングや順序付け保証の種類に応じて、チャネル数が非常に少ない場合と非常に多い場合の長所と短所があります。

ポジションについて

トピックにパブリッシュされたすべての要素には、ポジションがあります。ポジションは、チャネル内の要素の位置を追跡し、メッセージの順序付けを維持するために、基礎となるNamedTopic実装によって使用される不透明なデータ構造です。

ポジションは、サブスクライバが受信した要素を追跡する場合、ポジションのコミット時に先行するどの要素がコミットされるかを判断する場合、サブスクライバが再接続または障害からリカバリする際にトピック内の正しいポジションにリカバリする場合に使用されます。

ポジション・データ構造は不透明ですが、シリアライズが可能です。つまり、メッセージ要素の処理を手動で追跡するアプリケーション・コードごとに、別のデータ・ストアに格納できます。チャネルとポジションの組合せは、パブリッシュおよび受信されるメッセージ要素ごとに一意である必要があります。