nimbus (1.2.4) | 2018-01-25 20:02 |
nimbus-sample (1.2.4) | 2018-01-26 17:06 |
jp.ossc.nimbus.service.context.DistributedSharedContextServiceは、DistributedSharedContextデフォルト実装サービスです。
データ集合を複数の小箱に分けます。小箱を集合管理し、自分のノードが、どの小箱のデータを保持しておくべきかを管理するのが、このサービスの役目です。
1つ1つの小箱は、SharedContextとなっており、データを保持するべき小箱の場合は、サーバーモード。データを保持しない小箱の場合は、クライアントモードにします。
クラスタメンバに変化があると、各ノードがどの小箱を持つべきかが変わるので、クラスタの主ノードがそれを制御して、従ノードに小箱の管理状態の変更を通知します。
このサービスは、複合的なサービスで、以下のサービスを下位サービスとして使用します。
下位サービスインタフェース | 用途 |
jp.ossc.nimbus.service.publish.RequestConnectionFactoryService | 他のJVM上のSharedContextと通信するために使用する |
jp.ossc.nimbus.service.keepalive.ClusterService | クラスタされている共有コンテキストの状態を監視する。 |
jp.ossc.nimbus.service.context.ContextStore | コンテキスト情報を永続化する。 |
jp.ossc.nimbus.service.context.SharedContextKeyDistributor | コンテキスト情報の分散方法を決める。 |
jp.ossc.nimbus.service.cache.CacheMap | コンテキスト情報をキャッシュする。 |
jp.ossc.nimbus.service.queue.Queue | インタプリタ実行の同時実行数を制御するための受付キュー |
jp.ossc.nimbus.service.interpreter.Interpreter | インタプリタ実行で使用するインタプリタ |
jp.ossc.nimbus.service.context.SharedContextUpdateListener | コンテキスト情報の変更通知を通知する |
以下に簡単なサービス定義を示します。
- <?xml version="1.0" encoding="Shift_JIS"?>
- <!DOCTYPE server PUBLIC
- "-//Nimbus//DTD Nimbus 1.0//JA"
- "http://nimbus.sourceforge.jp/dtd/nimbus-service_1_0.dtd">
- <server>
- <manager>
- <!-- コンテキスト情報を保持するContextサービス -->
- <service name="Context"
- code="jp.ossc.nimbus.service.context.DistributedSharedContextService">
- <!-- コンテキスト情報の変更を送受信するRequestConnectionFactoryサービスのサービス名を設定する -->
- <attribute name="RequestConnectionFactoryServiceName">#RequestConnectionFactory</attribute>
- <!-- コンテキスト情報の共有を管理するClusterサービスのサービス名を設定する -->
- <attribute name="ClusterServiceName">#Cluster</attribute>
- <depends>RequestConnectionFactory</depends>
- <depends>Cluster</depends>
- </service>
- <!-- リクエストコネクションファクトリサービス -->
- <service name="RequestConnectionFactory"
- code="jp.ossc.nimbus.service.publish.RequestConnectionFactoryService">
- <attribute name="ServerConnectionFactoryServiceName">#ConnectionFactory</attribute>
- <attribute name="MessageReceiverServiceName">#MessageReceiver</attribute>
- <depends>#ConnectionFactory</depends>
- <depends>
- <!-- コンテキスト情報の変更を受信するMessageReceiverサービス -->
- <service name="MessageReceiver"
- code="jp.ossc.nimbus.service.publish.MessageReceiverService">
- <attribute name="ClientConnectionFactoryServiceName">#ClientConnectionFactory</attribute>
- <attribute name="StartReceiveOnStart">true</attribute>
- <depends>ClientConnectionFactory</depends>
- </service>
- </depends>
- </service>
- <!-- ClientConnectionFactoryをクラスタ化するClientConnectionFactoryサービス -->
- <service name="ClientConnectionFactory"
- code="jp.ossc.nimbus.service.publish.ClusterConnectionFactoryService">
- <attribute name="JndiRepositoryServiceName">#LocalRMIRepository</attribute>
- <attribute name="ClusterServiceName">#Cluster</attribute>
- <attribute name="ClientConnectionFactoryServiceName">#ConnectionFactory</attribute>
- <attribute name="Multiple">true</attribute>
- <attribute name="FlexibleConnect">true</attribute>
- <depends>
- <!-- RMIサーバにリモートオブジェクトを登録するRepositoryサービス -->
- <service name="LocalRMIRepository"
- code="jp.ossc.nimbus.service.repository.RMIRepositoryService">
- <attribute name="CreateRegistry">true</attribute>
- <attribute name="Port">1099</attribute>
- </service>
- </depends>
- <depends>
- <!-- Clusterサービス -->
- <service name="Cluster"
- code="jp.ossc.nimbus.service.keepalive.ClusterService">
- <attribute name="MulticastGroupAddress">239.0.0.10</attribute>
- <attribute name="JoinOnStart">false</attribute>
- </service>
- </depends>
- </service>
- <!-- コンテキスト情報の変更を送受信するServerConnectionFactory及びClientConnectionFactoryサービス -->
- <service name="ConnectionFactory"
- code="jp.ossc.nimbus.service.publish.tcp.ConnectionFactoryService" />
- </manager>
- </server>
DistributedSharedContextService向けインタフェースSharedContextKeyDistributorは、分散共有コンテキストに格納するデータのキーから、そのデータがどのノードで保持するべきかを決めるます。
このインタフェースの実装サービスは、下位サービスで、以下の上位サービスから使用します。
上位サービスインタフェース | 用途 |
jp.ossc.nimbus.service.context.DistributedSharedContextService | コンテキスト情報の分散を決めるために使用する |
実装サービスの一覧は以下のとおりです。
実装サービス | 実装概要 |
jp.ossc.nimbus.service.context.MD5HashSharedContextKeyDistributorService | キーのMD5ハッシュ値を使って、分散するノードを決めます。 |
jp.ossc.nimbus.service.context.DatabaseSharedContextKeyDistributorService | キーの全体をデータベースから取得し、ノード内に等分に配置します。 |