Coherenceは、完全にクラスタ化されたアーキテクチャに基づいて構築されます。クラスタ化という用語は業界で頻繁に使用されているため、ここではまず、Coherenceがクラスタ化されるということの正確な意味について説明します。Coherenceは、サーバーに次の機能を持たせた会議室モデルを使用する、peer-to-peerのクラスタ・プロトコルをベースとしています。
すべての参加者と話す: 参加者は会議室に入室すると、会議室内の他のすべての参加者と話すことができます。
聞く: 会議室にいる各参加者は、全員またはその特定の参加者に宛てられたメッセージを聞くことができます。メッセージは1回では聞き取れない可能性があるため、その場合は、対象となる参加者が聞き取れるまで繰り返す必要があります。
検出する: 参加者は話すことと聞くことによってのみ通信できます。他の手段はありません。これらの手段のみを使用して、参加者はその時々で誰が会議室にいるかを正確に把握する必要があります。また、新しい参加者が会議室に入室したことを検出する必要もあります。
グループおよび個人との会話を操作する: 参加者はすべての人と話すことができますが、会議室の他の参加者に紹介された後(つまり検出が完了した後)は、任意の参加者グループまたは参加者個人と直接通信することができます。
退出を検出する: 会議室にいる参加者は、他の参加者が退出したこと、すなわち通信を切断したことを速やかに検出する必要があります。
会議室モデルを使用することには、次のような利点があります。
特別な構成を行わずにクラスタにメンバーを追加できます。Coherenceを実行するJVMはいずれも、構成可能なセキュリティ制限に従って自動的にクラスタに参加し、クラスタが提供するキャッシュや他のサービスを利用できるようになります。これには、Java EEアプリケーション・サーバー、キャッシュ・サーバー、専用のキャッシュ・ローダー・プロセス、Coherenceソフトウェアとともに実行される他のJVMなどがあります。クラスタに参加したJVMは、クラスタ・ノードまたはクラスタ・メンバーと呼ばれます。
クラスタ・メンバーはすべて認識されるため、JVMまたはサーバー・コンピュータのいずれかが停止してもデータが失われないように、クラスタ内に冗長性を確保できます。
クラスタ・メンバーの停止または離脱は自動的に瞬時に検出されるため、フェイルオーバーは速やかに発生します。さらに重要なことは、このフェイルオーバーが透過的に発生するということです。つまり、アプリケーションでフェイルオーバーを制御するために特別な処理を実行する必要はありません。
クラスタ・メンバーはすべて認識されるため、クラスタ内で様々な役割のロード・バランシングを実現できます。Coherenceは、これを分散キャッシュ・サービスなどを使用して自動的に実行します。ロード・バランシングは、クラスタに新しいメンバーが参加したり既存のメンバーがクラスタから離脱したりすると自動的に実行されます。
通信には、本質的にマルチポイント間で行われるもの(全メンバー向けのメッセージなど)と、一対一のメンバー間で行われるものがあるため、非常に効率的に最適化できます。
ここでは、障害が発生したサーバーに対する処理として、次の2つの用語を使用しています。
フェイルオーバー: フェイルオーバーとは、障害が発生したサーバーの役割を引き継ぐ機能のことを指します。たとえば、「サーバーが停止した場合は、そのサーバーのプロセスがバックアップ・サーバーにフェイルオーバーされます。」などのように使用します。
フェイルバック: フェイルバックはフェイルオーバーの拡張機能であり、これによってサーバーは、再起動した後に自身の役割を取り戻すことができます。たとえば、「サーバーが復旧した場合は、以前実行していたプロセスがそのサーバーにフェイルバックされます。」などのように使用します。
キャッシュ・サービスやグリッド・サービスなど、Coherenceのクラスタ・サービスはすべて、自動的かつ透過的なフェイルオーバーおよびフェイルバックを実行します。これらの機能はアプリケーションに対して透過的ですが、アプリケーションでは、クラスタ内のすべての入出力が通知されるようイベントにサインアップすることもできます。