Como funciona a detecção de nós finalizados em Erlang?Como o net_ticktime está influenciando o controle da atividade do nó em Erlang?

StackOverflow https://stackoverflow.com//questions/24061270

Pergunta

Defino o valor net_ticktime para 600 segundos.

net_kernel:set_net_ticktime(600)

Na documentação Erlang para net_ticktime = TickTime:

Especifica o tempo de tick do net_kernel.TickTime é dado em segundos.Uma vez a cada TickTime/4 segundos, todos os nós conectados são marcados (se algo mais tiver sido gravado em um nó) e se nada tiver sido recebido de outro nó nos últimos quatro (4) tempos de tick, esse nó será considerado inativo.Isso garante que os nós que não estão respondendo, por motivos como erros de hardware, sejam considerados inativos.

O tempo T, no qual um nó que não está respondendo é detectado:

MinT < T < MaxT where:

MinT = TickTime - TickTime / 4
MaxT = TickTime + TickTime / 4

TickTime é por padrão 60 (segundos).Assim, 45 < T < 75 segundos.

Observação:Normalmente, um nó terminal é detectado imediatamente.

Meu problema: Meu TickTime é 600 (segundos).Assim, 450 (7,5 minutos)< T < 750 segundos (12,5 minutos).Embora, quando eu defino net_ticktime para todos os nós distribuídos em Erlang para o valor 600 quando algum nó falha (por exemplo.quando fecho o shell Erlang), os outros nós recebem a mensagem imediatamente e não de acordo com a definição de ticktime.

No entanto, observa-se que normalmente um nó de terminação é detectado imediatamente, mas não consegui encontrar explicação (nem na documentação de Erlang, nem no e-book de Erlang ou em outras fontes baseadas em Erlang) deste princípio de resposta imediata para terminação de nó em Erlang distribuído.Os nós no ambiente distribuído recebem ping periodicamente com intervalos menores do que net_ticktime ou o nó terminal envia algum tipo de mensagem para outros nós antes de terminar?Se ele enviar uma mensagem, há algum cenário em que, após o término, o nó não possa enviar esta mensagem e deva receber ping para investigar sua vivacidade?

Também é observado na documentação do Erlang que o Erlang Distribuído não é muito escalável para clusters maiores que 100 nós, pois cada nó mantém links para todos os nós do cluster.O algoritmo para investigar a vivacidade dos nós (ping, anúncio de encerramento) é modificado com o aumento do tamanho do cluster?

Foi útil?

Solução

Quando dois nós Erlang se conectam, uma conexão TCP é feita entre eles.A falha que você está induzindo faria com que o sistema operacional subjacente fechasse a conexão, notificando efetivamente o outro nó muito rapidamente.

O tick de rede é usado para detectar uma conexão com um nó distante que parece estar ativo, mas na verdade não está passando tráfego, como pode ocorrer quando um evento de rede isola um nó.

Se você quiser simular uma falha que exigiria um tique para ser detectada, use um firewall para bloquear o tráfego na conexão criada quando os nós executarem o primeiro ping.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top