2.2 Algoritmos de Diagn´ostico para Redes de Topologia Arbitr´aria
2.2.3 O Algoritmo RDZ
O algoritmo descrito nesta se¸c˜ao tem seu nome das iniciais de seus autores. Neste algo- ritmo, proposto por [Rangarajan, Dahbura e Ziegler, 1995], a rede tem topologia arbitr´aria e um nodo sem-falha sabe quais s˜ao seus vizinhos. Os nodos falham segundo o modelo crash e um nodo sem-falha ´e capaz de testar um nodo vizinho e de responder a um teste feito por um de seus vizinhos. Um nodo sem-falha pode se tornar falho e um nodo falho pode se recuperar a qualquer tempo.
O algoritmo n˜ao distingue entre uma falha em um nodo e uma falha em um canal de comunica¸c˜ao. Assim, o nodo que manda uma mensagem para um nodo vizinho recebe uma resposta de teste ou um acknowledgement dentro de um certo per´ıodo somente se o outro nodo est´a sem-falha. Os enlaces de comunica¸c˜ao tˆem atraso limitado.
por exatamente um outro nodo. Cada nodo sem-falha ´e respons´avel por assegurar que exatamente um de seus vizinhos sem-falha (se existe um nestas condi¸c˜oes) o est´a tes- tando. Desta forma, um nodo sem-falha pode requisitar que um nodo vizinho se torne seu testador.
Nodos falhos n˜ao s˜ao monitorados e um nodo que recupera n˜ao depende de que outros nodos detectem esta ocorrˆencia. Um nodo rec´em recuperado n˜ao tem conhecimento sobre o estado dos demais nodos da rede. Quando um nodo detecta que um nodo que ele est´a monitorando tornou-se falho ou que um nodo falho recuperou, ele propaga esta informa¸c˜ao para todos os seus vizinhos, que a propagam por sua vez a seus vizinhos na rede e assim por diante.
2.2.3.1 A Transa¸c˜ao de Valida¸c˜ao
O algoritmo executa em dois passos: detec¸c˜ao de falhas em nodos vizinhos e dissemina¸c˜ao de informa¸c˜ao sobre as mesmas. Um evento ´e definido como a transi¸c˜ao de um nodo tanto do estado sem-falha para o estado falho como do estado falho para o estado sem-falha.
Nodos testam outros nodos periodicamente e o nodo que detecta uma falha propaga esta informa¸c˜ao para os demais. A informa¸c˜ao ´e propagada por meio de uma transa¸c˜ao de valida¸c˜ao: quando um nodo propaga informa¸c˜ao para outro, o primeiro determina antes se o segundo est´a falho, e o faz enviando uma mensagem e esperando uma confirma¸c˜ao. Assim, existem dois mecanismos de detec¸c˜ao de falhas: um ´e atrav´es do teste propriamente dito e o outro ´e atrav´es de um timeout de uma mensagem enviada como parte de uma transa¸c˜ao de valida¸c˜ao. Se um nodo n˜ao responde corretamente a uma mensagem de valida¸c˜ao, o nodo que a enviou dissemina informa¸c˜ao sobre este evento de falha; assim, transa¸c˜oes de valida¸c˜ao s˜ao tamb´em utilizadas como testes.
Os dados que s˜ao enviados na mensagem da transa¸c˜ao de valida¸c˜ao consistem, entre outros, de um vetor de eventos, event[n], onde n ´e o n´umero de nodos da rede, com cada entrada contendo um contador de eventos detectados para aquele nodo. O contador de eventos ´e inicializado com 0 e incrementado a cada evento detectado, de forma que um contador par significa nodo sem-falha, enquanto que um contador ´ımpar significa nodo
falho. Este vetor ´e c´opia de um vetor similar, mantido localmente em cada nodo.
Quando um nodo sem-falha recebe uma transa¸c˜ao de valida¸c˜ao, ele checa se a informa¸c˜ao contida na mensagem ´e a mesma, ou considerada antiga ou considerada nova, comparada com suas pr´oprias informa¸c˜oes. Se a informa¸c˜ao ´e a mesma, ent˜ao o nodo que recebeu a mensagem tem a mesma informa¸c˜ao que o nodo que a enviou a respeito do estado de todos os nodos do sistema. Se a informa¸c˜ao ´e antiga, ent˜ao o nodo que recebeu a mensagem tem informa¸c˜ao mais recente a respeito de pelo menos um dos nodos e a mesma informa¸c˜ao a respeito dos demais nodos. Ainda, se a informa¸c˜ao recebida ´e nova, ent˜ao o nodo que a recebeu tem informa¸c˜ao mais antiga do que aquele que a enviou a respeito de pelo menos um dos nodos da rede e tem a mesma ou nova informa¸c˜ao sobre o restante dos nodos.
Se a informa¸c˜ao recebida ´e a mesma, ent˜ao esta informa¸c˜ao n˜ao ´e propagada adi- ante pelo nodo. Se a informa¸c˜ao recebida ´e antiga, ent˜ao a informa¸c˜ao da mensagem ´e atualizada e enviada como resposta ao nodo (e somente ao nodo) que a enviou. Se a informa¸c˜ao recebida ´e nova, a informa¸c˜ao local e a informa¸c˜ao contida na mensagem s˜ao ambas atualizadas conforme o caso e uma transa¸c˜ao de valida¸c˜ao ´e enviada a todos os vizinhos do nodo que a recebeu.
´
E utilizado um vetor de bits de tamanho igual ao n´umero de nodos no sistema, no qual uma entrada ´e assinalada com 1 se a mensagem j´a visitou aquele nodo. Este vetor ´e utilizado para diminuir o n´umero de mensagens redundantes e ´e inicializado com 0 quando um nodo forma uma mensagem para envi´a-la.
2.2.3.2 Nodos ´Orf˜aos
Um nodo do sistema ´e dito ´orf˜ao se n˜ao h´a nenhum outro nodo que seja seu testador. Isto pode ocorrer tanto para nodos no estado falho como para nodos no estado sem-falha. Se um nodo se torna falho, ap´os a detec¸c˜ao deste evento o nodo que o testava deixa de test´a- lo e ele se torna um ´orf˜ao falho. Quando um nodo falho ´e reparado, ele requisita a cada um seus vizinhos, um por um, que o testem, at´e obter uma resposta positiva, ocasi˜ao em que ele deixa de estar ´orf˜ao. O nodo que aceitou testar o nodo rec´em recuperado detecta
este novo evento e envia uma transa¸c˜ao de valida¸c˜ao a todos os seus vizinhos.
Se o testador de um nodo se torna falho, o nodo se torna um ´orf˜ao sem-falha e pode n˜ao detectar imediatamente que n˜ao est´a sendo testado. Quando um de seus vizinhos sem-falha lhe envia uma mensagem contendo possivelmente a informa¸c˜ao sobre a falha do nodo testador, o nodo percebe que est´a ´orf˜ao e ent˜ao solicita a um de seus vizinhos que o teste.
Um nodo ´orf˜ao sem-falha pode se tornar falho antes que a informa¸c˜ao sobre a falha de seu testador chegue at´e ele. Se isso ocorrer, a falha do nodo ´orf˜ao n˜ao ´e detectada de imediato. Quando outro nodo envia a este uma mensagem sobre o novo estado da rede, por exemplo, a de que seu testador tornou-se falho, detecta a falha do nodo ´orf˜ao e inicia uma dissemina¸c˜ao sobre ela.
2.2.3.3 A Falha Jellyfish
Se ocorre a falha simultˆanea de v´arios nodos, vizinhos a um componente conexo de nodos sem-falha, ent˜ao estas falhas ser˜ao detectadas se ao menos um dos nodos falhos for testado por um dos nodos sem-falha. A falha de um dos nodos ´e detectada pelo nodo testador e a falha dos demais atrav´es dos timeouts das transa¸c˜oes de valida¸c˜ao.
Entretanto, se os nodos formarem uma configura¸c˜ao chamada pelos autores de jellyfish (em portuguˆes, medusa), onde h´a um conjunto de nodos que testam todos uns aos outros, formando um anel, e esta configura¸c˜ao for vizinha a um componente conexo de nodos sem-falha, em que nenhum deles testa um dos nodos da jellyfish, ´e poss´ıvel que a falha simultˆanea de todos os nodos da configura¸c˜ao jellyfish n˜ao seja detectada.
A Figura 2.8 mostra uma configura¸c˜ao deste tipo, em que o nodo B e o nodo C formam a cabe¸ca da jellyfish, com “tent´aculos” emergindo para os nodos A e nodo D.
Os autores argumentam quanto `a pequena probabilidade de forma¸c˜ao de uma configura¸c˜ao jellyfish com v´arios nodos, entretanto esta configura¸c˜ao pode ocorrer em qualquer sistema de topologia arbitr´aria e corresponde efetivamente a uma situa¸c˜ao de falha n˜ao detect´avel.
A
B
C
D
Figura 2.8: Um exemplo de jellyfish.