次の方法で共有


CustomPeerResolverService: クライアント登録内

メッシュ内の各ノードは、 Register 関数を使用してエンドポイント情報をリゾルバー サービスに発行します。 リゾルバー サービスは、この情報を登録レコードとして格納します。 このレコードには、ノードの一意識別子 (RegistrationID) とエンドポイント情報 (PeerNodeAddress) が含まれています。

古いレコードと有効期限

理想的には、ノードがメッシュを離れると、 Unregister 関数が呼び出され、リゾルバー サービスによって登録エントリが削除されます。 Unregisterを呼び出す前にノードがシャットダウンしたり、アクセスできなくなったりして、古い登録レコードが残ることがあります。

リゾルバー サービス内の古いレコードにより、接続が失敗する可能性があります。 メッシュに接続しようとしているノードがリゾルバー サービスから古い接続情報を受信した場合、メッシュが正常に結合されるまでに時間がかかる場合があります。 古いレコードもメモリを占有します。 効率的なクリーンアップ プロセスがないと、登録の格納に使用されるキャッシュが最終的にオーバーフローし、リゾルバー サービスがクラッシュする可能性があります。

CustomPeerResolverServiceは、各レコードを有効期限 (DateTime) でマークし、その情報をレコードの一部として格納します。 サービスは有効期限を使用して古いレコードを識別します。 カスタム実装でも同様の処理を行う必要があります。

RefreshInterval と CleanupInterval

CustomPeerResolverServiceRefreshInterval プロパティは、サービスの登録参照テーブルで登録レコードが有効な期間を定義します。 このプロパティに指定された時間が特定のレコードに渡されると、そのレコードは古くなり、削除対象としてマークされます。

CustomPeerResolverServiceCleanupInterval プロパティは、古い登録レコードを検索および削除する頻度をサービスに通知します。 CleanupIntervalは、サービスで設定されたRefreshInterval以上の時間に設定する必要があります。

独自のリゾルバー サービスを実装するには、古い登録レコードを削除するメンテナンス機能を記述する必要があります。 これにはいくつかの方法があります。

  • 定期的なメンテナンス: 定期的に停止するようにタイマーを設定し、データ ストアを通過して古いレコードを削除します。 CustomPeerResolverServiceでは、このアプローチを使用します。

  • パッシブ削除: 定期的に古いレコードを積極的に検索する代わりに、サービスが既に別の関数を実行している場合に、古いレコードを特定して削除できます。 リゾルバー クライアントからの要求に対する応答時間が遅くなる可能性がありますが、タイマーが不要になり、 Unregisterを呼び出さずに離れるノードが少ないと予想される場合は、より効率的になる可能性があります。

RegistrationLifetime と Refresh

ノードは、リゾルバー サービスに登録すると、サービスから RegisterResponseInfo オブジェクトを受け取ります。 このオブジェクトには、登録の有効期限が切れ、リゾルバー サービスによって削除されるまでの時間をノードに示す RegistrationLifetime プロパティがあります。 たとえば、 RegistrationLifetime が 2 分の場合、ノードは 2 分以内に Refresh を呼び出して、レコードが最新の状態であり、削除されないようにする必要があります。 リゾルバー サービスは、 Refresh 要求を受信すると、レコードを検索し、有効期限をリセットします。 Refresh は、RegistrationLifetime プロパティを持つRefreshResponseInfo オブジェクトを返します。

こちらも参照ください