JS7®はJOCコックピット、データベース、コントローラー、エージェントのそれぞれの間の通信が何らかの理由で断絶しても、エージェント上で実行されるジョブは実行継続され、ジョブの実行履歴は通信が復活後に自動的に反映されるようになっています。ただし、エージェントが異常停止すると、そのエージェント上で実行されているジョブはkillされ、2重実行を防ぐようになっています。
https://kb.sos-berlin.com/display/JS7/JS7+-+Resilience
有償版ライセンスをご導入いただくと、上記に加えてJOCコックピット、コントローラー、エージェントのクラスタリングが可能になります。
JOCコックピット・クラスタリング
2つ以上のJOCコックピットのインスタンスをグループとし、一つのアクティブ・インスタンスと残りのスタンバイ・インスタンスとして、フェイルオーバー/スイッチオーバーを数十秒で切り替えます。ジョブ定義や実行履歴などは、データベースに共有されます。
https://kb.sos-berlin.com/display/PKB/JS7+-+JOC+Cockpit+Cluster
コントローラー・クラスタリング
2つのコントローラーインスタンスで、フェイルオーバー/スイッチオーバーを数秒で切り替えます。各コントローラーはオーダーステートなどを同期し、それぞれのジャーナルファイルに保存します。また指定したクラスター監視エージェントがアクティブコントローラーと通信できない場合、スタンバイエージェントに自動的にフェイルオーバーを指示します。
https://kb.sos-berlin.com/display/PKB/JS7+-+Controller+Cluster
エージェント・クラスタリング
エージェントはディレクターエージェントとサブエージェントの2層構造になっています。
ディレクターエージェントは、コントローラー及びサブエージェントとの通信とジャーナルの読み書きとディレクターエージェント間のジャーナル同期を担い、サブエージェントはジョブの実行と実行結果の報告をディレクターエージェントにします。(ディレクターエージェントにはインテグレーテッドサブエージェント機能も含まれ、ジョブ実行も可能ですが推奨していません)
ディレクターエージェントは、コントローラー及びサブエージェントとの通信とジャーナルの読み書きとディレクターエージェント間のジャーナル同期を担い、サブエージェントはジョブの実行と実行結果の報告をディレクターエージェントにします。(ディレクターエージェントにはサブエージェント機能も含まれ、ジョブ実行も可能ですが推奨していません)
複数のエージェントをグループ(エージェントグループ)とし、グループを指定することによってグループ内のエージェント(サブエージェント)にジョブ実行を指示します。割り当てる順番は下記の方式があります。
- 固定順(Fixed-priority: 割り当てたサブエージェントがなんらかの理由でジョブ実行できない場合、次のサブエージェントにジョブが割り当てられる)
- ラウンドロビン(Round-robin: 割り当てたサブエージェントに順番にジョブを割り当てる)
一つのエージェントグループには、必ず一つのディレクターエージェントが指定されコントローラー及びサブエージェントへの通信とジャーナルへの記録を担います。(ディレクターエージェントのHA構成フェイルオーバーはV.2.6以降で提供)
エージェントは複数のエージェントグループに属することができるため、ジョブの目的と必要リソースによってエージェントグループを使い分けることができます。
またジョブ定義にはエージェントグループで実行指定できるため、実際にジョブを実行するサブエージェントはジョブ定義を変更せずに動的にエージェントグループに登録/更新できます。(例えば実行用VM/コンテナを起動してからサブエージェントに登録して、実行完了後VM/コンテナを停止削除する)
- https://kb.sos-berlin.com/display/PKB/JS7+-+Agent+Cluster
- https://kb.sos-berlin.com/display/PKB/JS7+-+Management+of+Agent+Clusters
- https://kb.sos-berlin.com/display/PKB/JS7+-+Strategies+for+Agent+Clustering
なお上記の「接続監視」は、ScalaのライブラリAkka/Pekkoで実装されていますのでご興味あれば下記をご参照ください。