Einblicke in den CustomPeerResolverService: ClientregistrierungenInside the CustomPeerResolverService: Client Registrations

Jeder Knoten im Netz veröffentlicht seine Endpunktinformationen für den Resolverdienst durch die Register-Funktion.Each node in the mesh publishes its endpoint information to the resolver service through the Register function. Der Resolverdienst speichert diese Informationen als Registrierungsdatensatz.The resolver service stores this information as a registration record. Dieser Datensatz enthält einen eindeutigen Bezeichner (RegistrationID) sowie Endpunktinformationen (PeerNodeAddress) für den Knoten.This record contains a unique identifier (RegistrationID) and endpoint information (PeerNodeAddress) for the node.

Veraltete Datensätze und AblaufzeitStale Records and Expiration Time

Idealerweise ruft ein Knoten beim Verlassen des Netzes die Unregister- Funktion auf, wodurch der Registrierungseintrag vom Resolverdienst entfernt wird.Ideally, when a node leaves the mesh, it will call the Unregister function, which causes the resolver service to remove the registration entry. Manchmal werden Knoten jedoch geschlossen oder nicht verfügbar, bevor Unregister aufgerufen wurde. Dadurch bleibt ein veralteter Registrierungsdatensatz zurück.Sometimes, nodes shut down or become inaccessible before calling Unregister, leaving behind a stale registration record.

Veraltete Datensätze im Resolverdienst können zu fehlerhaften Verbindungen führen.Stale records in your resolver service can cause failed connections. Erhält ein Knoten beim Versuch, eine Verbindung mit einem Netz herzustellen, veraltete Verbindungsinformationen vom Resolverdienst, dauert es ggf. länger, bis er eine erfolgreiche Verknüpfung zu dem Netz herstellen kann.If a node trying to connect to a mesh receives stale connection information from the resolver service, it can take longer to successfully join the mesh. Veraltete Datensätze belegen zudem Speicherplatz.Stale records also take up memory. Ohne effizienten Bereinigungsprozess kann ein Überlauf des Zwischenspeichers auftreten, in dem die Registrierungen gespeichert werden, was den Absturz des Resolverdiensts zur Folge haben kann.Without an efficient clean up process, the cache used to store registrations could eventually overflow and crash the resolver service.

Der CustomPeerResolverService versieht jeden Datensatz mit einer Ablaufzeit (DateTime) und speichert diese Information zusammen mit dem Datensatz.The CustomPeerResolverService marks each record with an expiration time (DateTime), and stores that information as part of the record. Anhand der Ablaufzeit werden veraltete Datensätze durch den Dienst erkannt.The service uses the expiration time to identify stale records. Eine solche Vorgehensweise empfiehlt sich auch bei benutzerdefinierten Implementierungen.Custom implementations should do something similar.

RefreshInterval und CleanupIntervalRefreshInterval and CleanupInterval

Mit der RefreshInterval-Eigenschaft des CustomPeerResolverService wird die Gültigkeitsdauer von Registrierungsdatensätzen in der Registrierungssuchtabelle des Diensts definiert.The RefreshInterval property of the CustomPeerResolverService defines how long registration records remain valid in the service's registration lookup table. Ist die für diese Eigenschaft angegebene Zeit für einen bestimmten Datensatz abgelaufen, ist dieser Datensatz veraltet und wird zum Löschen markiert.When the amount of time supplied to this property has passed for a given record, that record becomes stale and is marked for deletion.

Mithilfe der CleanupInterval-Eigenschaft des CustomPeerResolverService wird dem Dienst mitgeteilt, wie häufig veraltete Registrierungsdatensätze gesucht und gelöscht werden sollen.The CleanupInterval property of the CustomPeerResolverService tells the service how often to search for and delete stale registration records. Das CleanupInterval sollte auf eine Zeit festgelegt werden, die mindestens dem für den Dienst festgelegten RefreshInterval entspricht.The CleanupInterval should be set to a time greater than or equal to the RefreshInterval set on the service.

Wenn Sie einen eigenen Resolverdienst implementieren möchten, müssen Sie eine Wartungsfunktion zum Entfernen veralteter Registrierungsdatensätze schreiben.To implement your own resolver service, you need to write a maintenance function to remove stale registration records. Dafür stehen verschiedene Möglichkeiten zur Verfügung:There are several ways to do this:

  • Periodische Wartung: Legen Sie einen Timer, wechseln in regelmäßigen Abständen deaktiviert, und durchlaufen, Ihre Datenspeicher, um alte Datensätze zu löschen.Periodic maintenance: Set a timer to go off periodically, and go through your data store to delete old records. Dieser Ansatz wird vom CustomPeerResolverService verwendet.The CustomPeerResolverService uses this approach.

  • Passives löschen: anstelle von Suchen aktiv nach veralteten Datensätzen, in regelmäßigen Abständen, können Sie identifizieren und veraltete Datensätze löschen, wenn der Dienst bereits eine andere Funktion ausgeführt wird.Passive deletion: Instead of actively searching for stale records at regular intervals, you can identify and delete stale records when your service is already performing another function. Dadurch erhöht sich zwar möglicherweise die Antwortzeit für Anforderungen der Resolverclients, andererseits wird in diesem Fall kein Timer benötigt. Darüber hinaus ist diese Methode möglicherweise effizienter, wenn voraussichtlich nur wenige Knoten das Netz ohne Aufruf von Unregister verlassen.This may potentially slow down response time to requests from the resolver clients, but it eliminates the need for a timer, and may be more efficient if few nodes are expected to leave without calling Unregister.

RegistrationLifetime und RefreshRegistrationLifetime and Refresh

Wenn sich ein Knoten bei einem Resolverdienst registriert, erhält er vom Dienst ein RegisterResponseInfo-Objekt.When a node registers with a resolver service, it receives a RegisterResponseInfo object from the service. Dieses Objekt besitzt eine RegistrationLifetime-Eigenschaft, mit der dem Knoten die verbleibende Zeit bis zum Ablauf der Registrierung und damit bis zur Entfernung durch den Resolverdienst angegeben wird.This object has a RegistrationLifetime property which indicates to the node how much time it has before the registration expires and is removed by the resolver service. Beispiel: Beträgt die RegistrationLifetime zwei Minuten, muss durch den Knoten in weniger als zwei Minuten ein Aufruf von Refresh erfolgen, damit der Datensatz nicht als veraltet gilt und gelöscht wird.If, for example, the RegistrationLifetime is 2 minutes, the node needs to call Refresh in under 2 minutes to ensure the record stays fresh and is not deleted. Erhält der Resolverdienst eine Refresh-Anforderung, sucht er den Datensatz und setzt die Ablaufzeit zurück.When the resolver service receives a Refresh request, it looks up the record and resets the expiration time. Durch die Refresh-Anforderung wird ein RefreshResponseInfo-Objekt mit einer RegistrationLifetime-Eigenschaft zurückgegeben.Refresh returns a RefreshResponseInfo object with a RegistrationLifetime property.

Siehe auchSee Also

PeerresolverPeer Resolvers