DistributedSharedContext実装サービス jp.ossc.nimbus.service.context.DistributedSharedContextService

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コンテキスト情報の変更通知を通知する

以下に簡単なサービス定義を示します。

  1. <?xml version="1.0" encoding="Shift_JIS"?>
  2. <!DOCTYPE server PUBLIC
  3. "-//Nimbus//DTD Nimbus 1.0//JA"
  4. "http://nimbus.sourceforge.jp/dtd/nimbus-service_1_0.dtd">
  5. <server>
  6. <manager>
  7. <!-- コンテキスト情報を保持するContextサービス -->
  8. <service name="Context"
  9. code="jp.ossc.nimbus.service.context.DistributedSharedContextService">
  10. <!-- コンテキスト情報の変更を送受信するRequestConnectionFactoryサービスのサービス名を設定する -->
  11. <attribute name="RequestConnectionFactoryServiceName">#RequestConnectionFactory</attribute>
  12. <!-- コンテキスト情報の共有を管理するClusterサービスのサービス名を設定する -->
  13. <attribute name="ClusterServiceName">#Cluster</attribute>
  14. <depends>RequestConnectionFactory</depends>
  15. <depends>Cluster</depends>
  16. </service>
  17. <!-- リクエストコネクションファクトリサービス -->
  18. <service name="RequestConnectionFactory"
  19. code="jp.ossc.nimbus.service.publish.RequestConnectionFactoryService">
  20. <attribute name="ServerConnectionFactoryServiceName">#ConnectionFactory</attribute>
  21. <attribute name="MessageReceiverServiceName">#MessageReceiver</attribute>
  22. <depends>#ConnectionFactory</depends>
  23. <depends>
  24. <!-- コンテキスト情報の変更を受信するMessageReceiverサービス -->
  25. <service name="MessageReceiver"
  26. code="jp.ossc.nimbus.service.publish.MessageReceiverService">
  27. <attribute name="ClientConnectionFactoryServiceName">#ClientConnectionFactory</attribute>
  28. <attribute name="StartReceiveOnStart">true</attribute>
  29. <depends>ClientConnectionFactory</depends>
  30. </service>
  31. </depends>
  32. </service>
  33. <!-- ClientConnectionFactoryをクラスタ化するClientConnectionFactoryサービス -->
  34. <service name="ClientConnectionFactory"
  35. code="jp.ossc.nimbus.service.publish.ClusterConnectionFactoryService">
  36. <attribute name="JndiRepositoryServiceName">#LocalRMIRepository</attribute>
  37. <attribute name="ClusterServiceName">#Cluster</attribute>
  38. <attribute name="ClientConnectionFactoryServiceName">#ConnectionFactory</attribute>
  39. <attribute name="Multiple">true</attribute>
  40. <attribute name="FlexibleConnect">true</attribute>
  41. <depends>
  42. <!-- RMIサーバにリモートオブジェクトを登録するRepositoryサービス -->
  43. <service name="LocalRMIRepository"
  44. code="jp.ossc.nimbus.service.repository.RMIRepositoryService">
  45. <attribute name="CreateRegistry">true</attribute>
  46. <attribute name="Port">1099</attribute>
  47. </service>
  48. </depends>
  49. <depends>
  50. <!-- Clusterサービス -->
  51. <service name="Cluster"
  52. code="jp.ossc.nimbus.service.keepalive.ClusterService">
  53. <attribute name="MulticastGroupAddress">239.0.0.10</attribute>
  54. <attribute name="JoinOnStart">false</attribute>
  55. </service>
  56. </depends>
  57. </service>
  58. <!-- コンテキスト情報の変更を送受信するServerConnectionFactory及びClientConnectionFactoryサービス -->
  59. <service name="ConnectionFactory"
  60. code="jp.ossc.nimbus.service.publish.tcp.ConnectionFactoryService" />
  61. </manager>
  62. </server>

DistributedSharedContextService向けインタフェースSharedContextKeyDistributor

DistributedSharedContextService向けインタフェースSharedContextKeyDistributorは、分散共有コンテキストに格納するデータのキーから、そのデータがどのノードで保持するべきかを決めるます。

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

上位サービスインタフェース用途
jp.ossc.nimbus.service.context.DistributedSharedContextServiceコンテキスト情報の分散を決めるために使用する

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

実装サービス実装概要
jp.ossc.nimbus.service.context.MD5HashSharedContextKeyDistributorServiceキーのMD5ハッシュ値を使って、分散するノードを決めます。
jp.ossc.nimbus.service.context.DatabaseSharedContextKeyDistributorServiceキーの全体をデータベースから取得し、ノード内に等分に配置します。


コンテキスト/DistributedSharedContext