3.1.3 ネームサービス
ネームサービスとは,TP1/Server Baseがある各ノードで,自ノードが管理している全サーバUAPのネーム情報(サービスグループ名,IPアドレス,ポート番号,負荷レベル,閉塞情報など)を管理する機能です。また,ネームサービス間では,ネーム情報を交換して,他ノードのネーム情報を取得します。このため,ネームサービスを使用すると,RPC通信をするときに,ネットワーク上のどのノードにサーバUAPがあるかをクライアントUAPで意識する必要はありません。
また,同一サービスグループ名のサーバUAPが複数起動されている場合は,ネームサービスが管理しているネーム情報を使用したノード間負荷バランス機能によって,最適なサーバUAPにサービスを要求できます。ノード間負荷バランス機能の詳細については,「3.1.4 ノード間負荷バランス機能」を参照してください。
ネームサービスを使用するかどうかは,RPC関連定義のname_useオペランドで指定します。ネームサービスを使用する場合,サービスの要求先の決定方法を,RPC関連定義のrpc_destination_modeオペランドで指定します。また,ネームサービスを使用してトランザクション連携をする場合は,サービスの要求元とサービスの要求先の両方でネームサービスを使用する必要があります。ネームサービスを使用しない場合は,サービスの要求先をサービスグループ情報関連定義のeesvgdef定義コマンドで指定します。
他プロセスのネーム情報は,TP1/Server Baseのネームサービスが提供するネーム情報検索機能を使用して検索します。そのため,TP1/Server Baseから検索できるネーム情報は,TP1/EEでも検索できます。また,検索したネーム情報は,TP1/EEプロセス内のキャッシュに格納されるため,次回の検索を高速に処理できます。
- 〈この項の構成〉
(1) キャッシュ管理
TP1/EEは,ネームサービスから取得したネーム情報および自プロセスが登録したTP1/EEのネーム情報(サービスグループ名)を自プロセスのキャッシュに格納します。次回のネーム情報検索時に,該当するネーム情報がキャッシュにあれば,キャッシュに格納されていたネーム情報を使用します。このため,ネーム情報の検索を高速に処理できます。
(a) キャッシュの追い出し
ネーム情報のサイズが,キャッシュ領域のサイズ(RPC関連定義のname_cache_sizeオペランドで指定)より大きい場合,TP1/EEはキャッシュに格納されている古いネーム情報を先入れ先出し方式(FIFO方式)で追い出し,空いた領域に新しいネーム情報を格納します。
キャッシュに格納されているネーム情報が頻繁に追い出されるとキャッシュ効率が低下するため,キャッシュの追い出し率をRPC関連定義のrpc_nam_eject_rateオペランドで指定します。このキャッシュの追い出し率を基に,追い出しキャッシュ数が算出されます。ただし,算出された追い出しキャッシュ数が,新しいネーム情報を格納するのに必要なキャッシュ数に満たない場合,またはRPC関連定義のrpc_nam_eject_rateオペランドに0を指定した場合は,新しいネーム情報を格納するのに必要なキャッシュ数を追い出します。
(b) キャッシュ自動同期
次に示すどれかの条件を満たすネーム情報は,次回のネーム情報検索時にネームサービスで使用される可能性が高いため,キャッシュの有効期限(RPC関連定義のrpc_nam_use_timeオペランドで指定)が満了したときに,ネームスレッドで自動的に最新のネーム情報に更新されます(キャッシュ自動同期)。どの条件も満たしていないネーム情報は,キャッシュから削除されます。
-
RPC関連定義のrpc_nam_reserve_timeオペランドで指定したキャッシュの保留期間中に,該当するネーム情報が検索された場合
-
RPC関連定義のrpc_nam_use_timeオペランドで指定したキャッシュの有効期限内の検索回数が,RPC関連定義のrpc_nam_reserve_countオペランドで指定したキャッシュ自動同期を保留する回数以上あった場合
-
自TP1/EEプロセスのネーム情報(プロセス関連定義のservice_groupオペランドで指定)である場合
RPC関連定義のrpc_nam_reserve_countオペランドに1を指定している場合は,必ずキャッシュ自動同期を実行します。
(2) リトライ処理
ネームサービスを使用する場合,サービス要求メッセージの送信中に通信障害が発生したとき,または,サービス要求メッセージの送信先のサーバUAPが未起動などの旨の応答メッセージが返ってきたときは,リトライ処理を実行して,別のあて先にサービス要求メッセージを送信します。ネームサービスを使用しない場合は,リトライ処理を実行しません。
リトライ処理を実行するときのサービス要求先の決定方法は,RPC関連定義のrpc_destination_modeオペランドで指定します。rpc_destination_modeオペランドの指定値によって,リトライ処理の流れは次のように異なります。
-
rpc_destination_modeオペランドにnamdonlyを指定した場合のリトライ処理の流れ
-
ネームサービスから取得したあて先に,RPC関連定義のrpc_retry_countオペランドで指定した回数分,リトライ処理を実行します。※
RPC関連定義のrpc_retryオペランドにNを指定した場合は,1回だけリトライします。
-
-
rpc_destination_modeオペランドにnamdを指定した場合のリトライ処理の流れ
-
ネームサービスから取得したあて先に,取得したあて先分,またはRPC関連定義のrpc_retry_countオペランドで指定した回数分,リトライ処理を実行します。
RPC関連定義のrpc_retryオペランドにNを指定した場合は,1回だけリトライします。
-
サービスグループ情報関連定義のeesvgdef定義コマンドの-hオプションに指定したあて先に,指定したホストの数だけ,リトライ処理を実行します。
-
ネームサービスから取得したあて先に対するリトライ回数がRPC関連定義のrpc_retry_countオペランドの指定値以内である場合は,再度ネームサービスから取得したあて先に,RPC関連定義のrpc_retry_countオペランドで指定した回数分,リトライ処理を実行します。※
-
-
rpc_destination_modeオペランドにdefinitionを指定した場合のリトライ処理の流れ
-
サービスグループ情報関連定義のeesvgdef定義コマンドの-hオプションに指定したあて先に,指定したホストの数だけ,リトライ処理を実行します。
-
ネームサービスから取得したあて先に,RPC関連定義のrpc_retry_countオペランドで指定した回数分,リトライ処理を実行します。※
-
-
rpc_destination_modeオペランドにdefinitiononlyを指定した場合のリトライ処理の流れ
-
サービスグループ情報関連定義のeesvgdef定義コマンドの-hオプションに指定したあて先に,指定したホストの数だけ,リトライ処理を実行します。
-
- 注※
-
ネームサービスからのネーム情報取得に失敗した場合で,RPC関連定義のrpc_retryオペランドにYを指定したときは,次に示すオペランドの指定値に従ってリトライ処理を実行します。
- リトライ回数
-
RPC関連定義のrpc_retry_countオペランド
- リトライ間隔
-
RPC関連定義のrpc_retry_intervalオペランド
(3) 注意事項
-
ネームサービスへのネーム情報の登録に失敗すると,TP1/EEプロセスが終了します。ネーム情報の登録に失敗した場合の対策について,要因別に説明します。
-
キャッシュ領域のサイズ不足
キャッシュ領域のサイズが不足していると,ネーム情報の登録に失敗します。このため,TP1/Server Baseのネームサービス定義のname_cache_sizeオペランド,またはname_total_sizeオペランドで,キャッシュ領域のサイズに十分な値を指定してください。
-
同一TP1/Server Baseの管理下に同一サービスグループ名が存在
同一TP1/Server Baseの管理下に同一サービスグループ名のサーバが複数起動されていると,ネーム情報の登録に失敗します。このため,同一TP1/Server Baseの管理下にあるTP1/Server Baseのサービスグループ名(TP1/Server Baseのユーザサービス定義のservice_groupオペランドで指定),およびTP1/EEのサービスグループ名(プロセス関連定義のservice_groupオペランドで指定)が,それぞれ一意になるように指定してください。
-
-
ネーム情報を検索したときに受信するRPC応答メッセージのサイズは,最大約15キロバイトです。受信バッファサイズ(メモリ関連定義のrecv_message_buf_sizeオペランドで指定)が16キロバイト未満の場合,RPC応答メッセージの受信に失敗し,ネーム情報の検索に失敗することがあります。このため,ネームサービスを使用する場合は,受信バッファサイズに16キロバイト以上を指定することをお勧めします。なお,RPC関連定義のrpc_name_service_extendオペランドに1を指定している場合は,受信バッファサイズに32キロバイト以上を指定してください。
-
TP1/EEのサービスグループはTP1/Server Baseのネームサーバでネーム情報を管理するため,ネーム情報のノード識別子にTP1/Server Baseのノード識別子が設定されます。このため,TP1/EEのサービスグループに対してノード識別子を指定してdc_rpc_call_to関数を呼び出す場合は,TP1/Server Baseのノード識別子を指定してください。TP1/EEのノード識別子を指定した場合は,エラーリターンします。
-
ネームサービスを使用しない場合,RPCメッセージの送信先のノードでは,ノード間負荷バランス機能を使用したRPCメッセージの転送処理は行われません。また,RPCメッセージの送信先のノードに,該当するサービスグループ名が見つからなかった場合は,エラーリターンします。