メッシュ内の各ノードは、 Register
関数を使用してエンドポイント情報をリゾルバー サービスに発行します。 リゾルバー サービスは、この情報を登録レコードとして格納します。 このレコードには、ノードの一意識別子 (RegistrationID) とエンドポイント情報 (PeerNodeAddress) が含まれています。
古いレコードと有効期限
理想的には、ノードがメッシュを離れると、 Unregister
関数が呼び出され、リゾルバー サービスによって登録エントリが削除されます。
Unregister
を呼び出す前にノードがシャットダウンしたり、アクセスできなくなったりして、古い登録レコードが残ることがあります。
リゾルバー サービス内の古いレコードにより、接続が失敗する可能性があります。 メッシュに接続しようとしているノードがリゾルバー サービスから古い接続情報を受信した場合、メッシュが正常に結合されるまでに時間がかかる場合があります。 古いレコードもメモリを占有します。 効率的なクリーンアップ プロセスがないと、登録の格納に使用されるキャッシュが最終的にオーバーフローし、リゾルバー サービスがクラッシュする可能性があります。
CustomPeerResolverServiceは、各レコードを有効期限 (DateTime) でマークし、その情報をレコードの一部として格納します。 サービスは有効期限を使用して古いレコードを識別します。 カスタム実装でも同様の処理を行う必要があります。
RefreshInterval と CleanupInterval
CustomPeerResolverServiceの RefreshInterval
プロパティは、サービスの登録参照テーブルで登録レコードが有効な期間を定義します。 このプロパティに指定された時間が特定のレコードに渡されると、そのレコードは古くなり、削除対象としてマークされます。
CustomPeerResolverServiceの CleanupInterval
プロパティは、古い登録レコードを検索および削除する頻度をサービスに通知します。
CleanupInterval
は、サービスで設定されたRefreshInterval
以上の時間に設定する必要があります。
独自のリゾルバー サービスを実装するには、古い登録レコードを削除するメンテナンス機能を記述する必要があります。 これにはいくつかの方法があります。
定期的なメンテナンス: 定期的に停止するようにタイマーを設定し、データ ストアを通過して古いレコードを削除します。 CustomPeerResolverServiceでは、このアプローチを使用します。
パッシブ削除: 定期的に古いレコードを積極的に検索する代わりに、サービスが既に別の関数を実行している場合に、古いレコードを特定して削除できます。 リゾルバー クライアントからの要求に対する応答時間が遅くなる可能性がありますが、タイマーが不要になり、
Unregister
を呼び出さずに離れるノードが少ないと予想される場合は、より効率的になる可能性があります。
RegistrationLifetime と Refresh
ノードは、リゾルバー サービスに登録すると、サービスから RegisterResponseInfo オブジェクトを受け取ります。 このオブジェクトには、登録の有効期限が切れ、リゾルバー サービスによって削除されるまでの時間をノードに示す RegistrationLifetime
プロパティがあります。 たとえば、 RegistrationLifetime
が 2 分の場合、ノードは 2 分以内に Refresh
を呼び出して、レコードが最新の状態であり、削除されないようにする必要があります。 リゾルバー サービスは、 Refresh
要求を受信すると、レコードを検索し、有効期限をリセットします。 Refresh は、RegistrationLifetime
プロパティを持つRefreshResponseInfo オブジェクトを返します。