网格中的每个节点通过 Register 函数将其终结点信息发布到解析程序服务。 解析程序服务将此信息存储为注册记录。 此记录包含节点的唯一标识符(RegistrationID)和终结点信息(PeerNodeAddress)。
过时记录和过期时间
理想情况下,当节点离开网格时,它将调用 Unregister 函数,这会导致解析程序服务删除注册条目。 有时,节点在调用 Unregister之前关闭或无法访问,从而留下过时的注册记录。
解析程序服务中的过时记录可能导致连接失败。 如果尝试连接到网格的节点从解析程序服务接收过时的连接信息,则成功联接网格可能需要更长的时间。 过时记录还会占用内存。 如果没有高效的清理过程,用于存储注册的缓存最终可能会溢出并崩溃解析程序服务。
用 CustomPeerResolverService 过期时间(DateTime)标记每个记录,并将该信息存储为记录的一部分。 服务使用过期时间标识过时记录。 自定义实现应做类似的事情。
RefreshInterval 和 CleanupInterval
该 RefreshInterval 属性 CustomPeerResolverService 定义注册记录在服务的注册查找表中的有效期。 当为此属性分配的时间量已过,该记录将变为过期并被标记为删除。
该 CleanupInterval 属性 CustomPeerResolverService 告知服务搜索和删除过时注册记录的频率。
CleanupInterval 应设置为大于或等于对服务设置的 RefreshInterval 时间。
若要实现自己的解析程序服务,需要编写维护函数来删除过时的注册记录。 有若干方法可实现此操作:
定期维护:设置计时器以定期关闭,并浏览数据存储以删除旧记录。 CustomPeerResolverService 使用此方法。
被动删除:服务已执行其他功能时,可以识别和删除过时记录,而不是定期搜索过时记录。 这可能会降低对来自解析程序客户端的请求的响应时间,但它消除了计时器的需求,如果预计很少有节点在未调用
Unregister的情况下离开,则可能会更高效。
注册存续期和刷新
当节点注册到解析程序服务时,它会从服务接收对象 RegisterResponseInfo 。 此对象具有一个 RegistrationLifetime 属性,该属性向节点指示注册到期前的时间,并由解析程序服务删除。 例如, RegistrationLifetime 如果为 2 分钟,则节点需要在 2 分钟内调用 Refresh ,以确保记录保持新鲜且不会被删除。 当解析程序服务收到 Refresh 请求时,它会查找记录并重置过期时间。 Refresh 返回一个包含 RefreshResponseInfo 属性的 RegistrationLifetime 对象。