Sobre o CustomPeerResolverService: registros de clientes
Cada nó na malha publica suas informações de ponto de extremidade no serviço resolver por meio da função Register
. O serviço resolver armazena essas informações como um registro. Esse registro contém um identificador exclusivo (RegistrationID) e informações de ponto de extremidade (PeerNodeAddress) para o nó.
Registros obsoletos e tempo de expiração
Idealmente, quando um nó sai da malha, ele chamará a função Unregister
, o que faz com que o serviço resolver remova a entrada de registro. Às vezes, os nós são desligados ou ficam inacessíveis antes de chamar Unregister
, deixando para trás um registro obsoleto.
Registros obsoletos em seu serviço resolver podem causar conexões com falha. Se um nó tentando se conectar a uma malha receber informações de conexão obsoletas do serviço resolver, poderá levar mais tempo para ingressar com êxito na malha. Registros obsoletos também retomam a memória. Sem um processo de limpeza eficiente, o cache usado para armazenar registros poderia eventualmente estourar e travar o serviço resolver.
CustomPeerResolverService marca cada registro com uma hora de expiração (DateTime) e armazena essas informações como parte do registro. O serviço usa o tempo de expiração para identificar registros obsoletos. Implementações personalizadas devem fazer algo semelhante.
RefreshInterval e CleanupInterval
A propriedade RefreshInterval
de CustomPeerResolverService define quanto tempo os registros permanecem válidos na tabela de pesquisa de registro do serviço. Quando o tempo fornecido a essa propriedade tiver passado para um determinado registro, esse registro ficará obsoleto e será marcado para exclusão.
A propriedade CleanupInterval
de CustomPeerResolverService informa o serviço com que frequência pesquisar e excluir registros de registro obsoletos. Deve-se definir CleanupInterval
com um tempo maior que ou igual ao RefreshInterval
definido no serviço.
Para implementar seu próprio serviço resolver, você precisa escrever uma função de manutenção para remover registros obsoletos. Há várias maneiras de fazer isso:
Manutenção periódica: defina um temporizador para desativar periodicamente e passe pelo armazenamento de dados para excluir registros antigos. CustomPeerResolverService usa essa abordagem.
Exclusão passiva: em vez de pesquisar ativamente registros obsoletos em intervalos regulares, você pode identificar e excluir registros obsoletos quando o serviço já estiver executando outra função. Isso pode potencialmente diminuir o tempo de resposta para solicitações dos clientes resolver, mas elimina a necessidade de um temporizador e poderá ser mais eficiente caso se espere que alguns nós saiam sem chamar
Unregister
.
RegistrationLifetime e Refresh
Quando um nó é registrado com um serviço resolver, ele recebe um objeto RegisterResponseInfo do serviço. Esse objeto tem uma propriedade RegistrationLifetime
que indica ao nó quanto tempo ele tem antes do registro expirar e é removido pelo serviço resolver. Se, por exemplo, RegistrationLifetime
for 2 minutos, o nó precisará chamar Refresh
em menos de 2 minutos para garantir que o registro permaneça atual e não seja excluído. Quando o serviço resolver recebe uma solicitação Refresh
, ele pesquisa o registro e redefine o tempo de expiração. A atualização retorna um objeto RefreshResponseInfo com uma propriedade RegistrationLifetime
.