[応用機能]死活監視

アプリケーション開発において、システムの機能が複数のサーバに跨っているような、機能分散が行われている設計が必要とされる場合があります。
そのような場合、耐障害性を向上させるために各機能を司るサーバは多重化されます。多重化された機能を利用する側は、死活監視して、利用可能なサーバの機能を選択的に利用しなければなりません。

死活監視において、使用する機能の稼動状態を検証する機能を抽象化したのが、KeepAliveCheckerです。
使用する機能の稼動状態の変化を受動的に知る機能を抽象化したのが、KeepAliveListenerです。
利用可能なサーバの機能を選択する機能を抽象化したのが、KeepAliveCheckerSelectorです。
クラスタを構成し、クラスタの構成メンバーの稼動状態をClusterListenerに通知するのがClusterです。

関連するパッケージは、以下です。

インタフェースKeepAliveChecker

インタフェースKeepAliveCheckerは、基本的に他のサービスが稼動状態を検証するために利用する下位機能である。

このインタフェースの実装サービスは、下位サービスで、以下の上位サービスから使用します。

上位サービス用途
jp.ossc.nimbus.service.keepalive.KeepAliveCheckerSelector利用可能なサーバの機能を選択するために使用する。
jp.ossc.nimbus.service.jms.JMSConnectionFactoryServiceJMSで接続してメッセージを受信中にJMSサーバを死活監視するために使用する。

実装サービスの一覧は以下のとおりです。

実装サービス実装概要
jp.ossc.nimbus.service.keepalive.smtp.SmtpCheckerServiceSMTPサーバの稼働状態を取得する。
jp.ossc.nimbus.service.keepalive.jdbc.JDBCKeepAliveCheckerServiceJDBCサーバの稼働状態を取得する。
jp.ossc.nimbus.service.jndi.CachedJndiFinderServiceJNDIサーバにアクセスするサービス。JNDIサーバの稼働状態を取得する。
jp.ossc.nimbus.service.proxy.RemoteServiceServerServiceリモートからサービスを呼び出せるように受付を行うサービス。呼び出す対象のサービスの稼働状態を取得する。
jp.ossc.nimbus.service.proxy.invoker.RemoteClientMethodCallInvokerServiceリモートのサービスのメソッドを呼び出すサービス。呼び出す対象のサービスの稼働状態を取得する。
jp.ossc.nimbus.service.proxy.invoker.LocalClientMethodCallInvokerServiceローカルのサービスのメソッドを呼び出すサービス。呼び出す対象のサービスの稼働状態を取得する。
jp.ossc.nimbus.service.aop.invoker.MethodReflectionCallInvokerService呼び出し対象オブジェクトのメソッドを呼び出すサービス。このサービスの稼働状態を取得する。
jp.ossc.nimbus.service.beancontrol.BeanFlowInvokerServerServiceリモートから業務フローを呼び出せるように受付を行うサービス。業務フローサービスの稼働状態を取得する。

インタフェースKeepAliveListener

インタフェースKeepAliveListenerは、使用する機能の稼動状態の変化を受動的に知る機能である。

実装サービスの一覧は以下のとおりです。

実装サービス実装概要
jp.ossc.nimbus.service.jms.JMSConnectionFactoryServiceJMSで接続してメッセージを受信中にJMSサーバを死活監視するために使用する。

インタフェースKeepAliveCheckerSelector

インタフェースKeepAliveCheckerSelectorは、基本的に他のサービスが利用可能なサーバの機能を選択するために利用する下位機能である。

このインタフェースの実装サービスは、下位サービスで、以下の上位サービスから使用します。

上位サービス用途
jp.ossc.nimbus.service.proxy.invoker.ClusterInvokerService利用可能なInvokerを選択するために使用する。
jp.ossc.nimbus.service.scheduler2.ScheduleExecutorClusterInvokerService利用可能なScheduleExecutorを選択するために使用する。
jp.ossc.nimbus.service.writer.mail.MailWriterService利用可能なSMTPサーバを選択するために使用する。

実装サービスの一覧は以下のとおりです。

実装サービス実装概要
jp.ossc.nimbus.service.keepalive.FirstAvailableKeepAliveCheckerSelectorService最初に利用可能なKeepAliveCheckerを選択する。
jp.ossc.nimbus.service.keepalive.RoundRobinKeepAliveCheckerSelectorServiceラウンドロビンで利用可能なKeepAliveCheckerを選択する。
jp.ossc.nimbus.service.keepalive.ResourceAvailableKeepAliveCheckerSelectorServiceリソース利用量が少ないKeepAliveCheckInvokerを選択する。

インタフェース!Cluster

インタフェースClusterは、クラスタ構成メンバを管理し、クラスタ構成メンバの状態の変化を通知するインタフェースである。

実装サービスの一覧は以下のとおりです。

実装サービス実装概要
jp.ossc.nimbus.service.keepalive.ClusterServiceデフォルト実装サービス。
jp.ossc.nimbus.service.keepalive.KubernetesClusterServiceKubernetesの制御プレーンからクラスタ構成メンバを特定して、クラスタを構成するサービス。

インタフェースClusterListener

インタフェースClusterListenerは、Clusterからクラスタ構成メンバの状態の変化を通知されるためのインタフェースである。

実装サービスの一覧は以下のとおりです。

実装サービス実装概要
jp.ossc.nimbus.service.keepalive.DefaultClusterListenerServiceクラスタ内でメインとなる時だけ対象となるサービスを起動させる。
jp.ossc.nimbus.service.keepalive.FirstAvailableKeepAliveCheckerSelectorService利用可能なKeepAliveCheckerのクラスタ構成メンバの状態を監視するために使用する。
jp.ossc.nimbus.service.keepalive.RoundRobinKeepAliveCheckerSelectorService利用可能なKeepAliveCheckerのクラスタ構成メンバの状態を監視するために使用する。
jp.ossc.nimbus.service.keepalive.ResourceAvailableKeepAliveCheckerSelectorService利用可能なKeepAliveCheckerのクラスタ構成メンバの状態を監視するために使用する。
jp.ossc.nimbus.service.piblish.ClusterClientConnectionFactoryServiceClientConnectionFactoryをクラスタ化し、クラスタ構成メンバの状態を監視するために使用する。
jp.ossc.nimbus.service.beancontrol.ClientBeanFlowInvokerFactoryService分散されたリモートの業務フローのクラスタ構成メンバの状態を監視ために使用する。
jp.ossc.nimbus.service.context.SharedContextService分散されたコンテキストのクラスタ構成メンバの状態を監視するために使用する。
jp.ossc.nimbus.service.context.DistributedSharedContextService分散されたコンテキストのクラスタ構成メンバの状態を監視するために使用する。
jp.ossc.nimbus.service.scheduler2.DefaultSchedulerService分散されたスケジューラーのクラスタ構成メンバの状態を監視するために使用する。
jp.ossc.nimbus.service.scheduler2.JMSSchedulerService分散されたスケジューラーのクラスタ構成メンバの状態を監視するために使用する。
jp.ossc.nimbus.service.scheduler2.DatabaseScheduleManagerService分散されたスケジュール管理のクラスタ構成メンバの状態を監視するために使用する。

サンプルは、以下。