A- Missions et objectifs de l’exposition
3) La communication autour de l’exposition
Nesta seção, descrevemos em detalhes os protocolos que permitem a utilização de identificadores virtuais em uma aplicação Pastry. Iniciamos discutindo o protocolo de roteamento de mensagens e, em seguida, apresentamos os protocolos que permitem alterar os identificadores virtuais dos nós.
6.4.1 Protocolo de roteamento virtual
O protocolo de roteamento é responsável por garantir a entrega de uma mensagem para o nó res- ponsável pelo identificador da mensagem no espaço virtual. O objetivo ao desenvolver este protocolo foi aproveitar ao máximo as tabelas de roteamento do Pastry. Deste modo, diminuímos a quantidade de tabelas necessária para manter o espaço virtual, minimizando a sobrecarga de utilizar identificadores virtuais e a complexidade de implementação do protocolo de roteamento.
No protocolo de roteamento virtual, a mensagem é encaminhada de nó em nó utilizando o protocolo de roteamento do Pastry. Mas em cada passo, os nós verificam se seu conjunto de folhas virtuais contém o nó responsável pelo identificador virtual da mensagem. Em caso negativo, o roteamento continua normalmente. Em caso positivo, o roteamento é interrompido e a mensagem é redirecionada diretamente ao nó de destino.
O protocolo acima funciona desde que os conjuntos de folhas virtuais estejam atualizados. Mas, como veremos na Seção 6.4.2, durante a atualização de identificadores virtuais de um grupo de nós, este conjunto pode ficar desatualizado por curtos períodos de tempo, o que pode levar uma mensagem para um nó diferente daquele de destino. Neste caso, o nó que recebeu a mensagem erroneamente pode procurar pelo nó de destino correto utilizando o conjunto de vizinhos virtuais, de modo a redirecionar a mensagem para este nó. O conjunto de vizinhos virtuais é também utilizado como um atalho durante o roteamento da mensagem, apesar de não ser este seu objetivo principal.
No protocolo de roteamento do Pastry, cada nó natual que recebe uma mensagem que está sendo
roteada, utilizando sua tabela de roteamento e seu conjunto de folhas, determina para qual nó npr´oximoa
mensagem deve ser enviada em seguida. Quando utilizamos o processo de roteamento virtual, antes da mensagem ser enviada a npr´oximo, o nó natualverifica se suas tabelas de vizinhos virtuais e folhas virtuais
contém o nó responsável pelo identificador da mensagem no espaço virtual. Caso este nó responsável seja encontrado, a mensagem é redirecionada a este nó. O protocolo de roteamento no espaço virtual é descrito no Algoritmo 1.
Este procedimento garante que o protocolo do Pastry será minimamente modificado e que a mensa- gem sempre chegará ao nó de destino. Isto porque o último passo do protocolo do Pastry ocorre quando um nó que está roteando a mensagem encontra o nó de destino em seu conjunto de folhas Pastry. Como veremos na Seção 6.4.2, o protocolo de partiçã o do espaço virtual garante que conjunto de folhas virtu- ais cobre uma faixa de identificadores que contém aquela coberta pelo conjunto de folhas Pastry. Deste modo, o fato do algoritmo de roteamento do Pastry funcionar implica que o algoritmo de roteamento vir-
6.4 Protocolos sobre Pastry 89
Algoritmo 1Algoritmo de roteamento.
se nóAtual.éResponsável (mensagem.identificadorDestino) então
nóAtual.processaMensagem (mensagem);
senão se nóAtual.vizinhosVirtuais.contémNóResponsável (mensagem.identificadorDestino) então
nóResponsável ⇐ nóAtual.vizinhosVirtuais.nóResponsável (mensagem.identificadorDestino) mensagem.enviaPara (nóResponsável);
senão se nóAtual.folhasVirtuais.contémNóResponsável (mensagem.identificadorDestino) então
nóResponsável ⇐ nóAtual.folhasVirtuais.nóResponsável (mensagem.identificadorDestino) mensagem.enviaPara (nóResponsável);
fim
tual também funciona. Além disso, o número de passos para encontrar o nó de destino de uma mensagem é o mesmo do protocolo Pastry, isto é, O(log n) passos, onde n é o número total de nós.
Como pudemos ver, o protocolo de roteamento de mensagens utiliza duas tabelas extras, o conjunto de folhas virtuais e o conjunto de vizinhos virtuais, ambas de tamanho médio constante. Ambos os con- juntos possuem um tamanho médio similar ao do conjunto de folhas do Pastry e precisam ser atualizados apenas quando o identificador virtual de um de seus membros mudam, o que ocorre quando o protocolo de partição do espaço de identificadores virtuais é executado. O número médio de nós contactados é constante em relação ao número de nós do sistema, uma vez que as tabelas que precisam ser atualizadas possuem tamanho médio constante.
O custo extra para manter um espaço virtual é baixo porque o protocolo de roteamento no espaço virtual utiliza toda a infra-estrutura do Pastry, que é mantida independentemente da existência do espaço de identificadores virtuais. Esta infra-estrutura inclui as tabelas de roteamento de tamanho dependente do número de nós no sistema, as tabelas necessárias para determinar os nós geograficamente próximos e as tabelas e protocolos de monitoramento e tolerância a falha do Pastry. Conseqüentemente, podemos criar múltiplos espaços virtuais simultaneamente com uma sobrecarga reduzida. Além disso, o espaço de identificadores do Pastry é mantido, permitindo o roteamento de mensagens também neste espaço.
6.4.2 Protocolo de partição do espaço virtual
O protocolo de partição do espaço virtual é executado como parte dos protocolos de ingresso e saída de nós e quando a capacidade de um nó é alterada acima de um determinado limiar. Nestes casos, é necessário que a faixa de identificadores virtuais designada ao nó e seus vizinhos seja atualizada. O protocolo de partição do espaço virtual realiza a divisão de uma faixa do espaço virtual entre um grupo de nós vizinhos.
A Figura 6.3 mostra os 4 passos do protocolo. Estes passos são descritos abaixo:
1. O nó p, que inicia o protocolo, envia uma mensagem a seus vizinhos requisitando o valor de suas capacidades. O número de vizinhos é configurável, podendo ser igual, por exemplo, ao número
Figura 6.3: Protocolo de partição do espaço virtual.
de nós no conjunto de folhas do Pastry, que costuma ter valores entre 8 e 32 nós. Na figura, os vizinhos são os nós l1, l2, l3, r1, r2 e r3, todos contidos no conjunto de folhas Pastry de p. 2. O nó p determina qual a faixa de identificadores virtuais coberta por seus nós vizinhos. Esta faixa
de identificadores é então repartida entre o nó p e todos os vizinhos, atribuindo a cada nó uma faixa de identificadores de tamanho proporcional à sua capacidade. Os identificadores virtuais dos vizinhos mais extremos, l3virtuale r3virtual, não são alterados, de modo a não afetar a distribuição
de carga nos nós adjacentes àqueles participantes do protocolo. Como podemos ver na figura, os identificadores virtuais dos nós vizinhos a p são deslocados de modo a aumentar a faixa de identificadores virtuais atribuída a p.
3. Finalizada a partição do espaço virtual, o nó p envia aos seus vizinhos uma mensagem de atualiza- ção contendo a lista dos identificadores virtuais que foram alterados. Os vizinhos são os mesmos
6.4 Protocolos sobre Pastry 91 contatados no primeiro passo do algoritmo. Estes vizinhos atualizam seu identificador virtual e conjunto de vizinhos virtuais e devolvem uma mensagem a p para confirmar o recebimento da mensagem de atualização. O nó p também atualiza seu identificador virtual e conjunto de vizinhos virtuais.
4. O nó p envia então a mensagem de atualização a todos os nós cujo conjunto de folhas virtuais contém nós que tiveram seus identificadores virtuais alterados. A determinação de quais nós pre- cisam ter seu conjunto de folhas atualizado é simplificada pelo fato deste conjunto ser centralizado no identificador Pastry do nó. Deste modo, é enviada uma mensagem ao nó f responsável pelo identificador virtual do nó p no espaço de identificadores Pastry. Na figura, o conjunto de folhas virtuais de f contém os elementos l1, l2, p, r1 e r2. O nó f, por sua vez, repassa a mensagem para seus vizinhos lógicos, que por sua vez repassam para os seus vizinhos, até a mensagem atingir um nó cujo conjunto de folhas virtuais não precisa ser atualizado. Durante a atualização de seu conjunto de folhas virtuais, cada nó deve garantir que a faixa de identificadores coberta pelos nós do conjunto de folhas virtuais contenha a faixa de identificadores coberta pelo conjunto de folhas Pastry do nó.
Um ponto importante do algoritmo de partição do espaço virtual é que as operações de repartição do espaço de identificadores são realizadas apenas entre um subconjunto de tamanho fixo dos nós. Esta característica é essencial para permitir uma maior escalabilidade do sistema. Por outro lado, cada nó recebe uma faixa do espaço de identificadores particionando apenas uma fatia local do espaço virtual.
O protocolo exige a troca de mensagens entre o nó que iniciou o protocolo e seus vizinhos, para obter suas capacidades e informar seus novos identificadores virtuais. Além disso, é necessário notificar os nós cujos conjuntos de folhas virtuais contenham referências a nós que tiveram o seu identificador virtual alterado. Apesar do número exato de nós que cada conjunto de folhas virtuais possui ser variável, estes conjuntos, em média, possuem o mesmo tamanho L que o conjunto de folhas Pastry. Deste modo, o número de nós contactados durante o protocolo é O(L), constante em relação ao tamanho do sistema.
6.4.3 Protocolo de ingresso de nós
O protocolo de ingresso de nós é executado sempre que um novo nó entra no sistema. Ele é iniciado pelo nó que entrou no sistema, após este já ter executado o protocolo de ingresso do Pastry e inicializado suas tabelas acopladas aos protocolos do Pastry.
O protocolo de ingresso de nós segue os mesmos passos do protocolo de partição do espaço virtual, com as seguintes diferenças: (1) o protocolo inclui o nó ingressante na partição do espaço virtual entre os vizinhos, atribuindo temporariamente como identificador virtual do novo nó o seu identificador Pastry, (2) o nó ingressante deve construir seus conjuntos de folhas e vizinhos virtuais a partir de informações dos nós vizinhos e (3) os demais nós devem incluir o novo nó em seus conjuntos de folhas virtuais.
Para a construção de seu conjunto de vizinhos virtuais, o nó ingressante utiliza as informações obti- das da partição do espaço virtual entre seus vizinhos. Já para construir o conjunto de folhas virtuais, o nó ingressante solicita aos seus vizinhos imediatos seus conjuntos de folhas virtuais. A partir das infor- mações dos nós contidos nestes dois conjuntos, o nó ingressante pode construir o seu próprio conjunto de folhas virtuais. Esta solicitação é feita logo no começo do protocolo, no mesmo momento em que o nó requisita as capacidades de seus vizinhos. Finalmente, a inclusão do nó ingressante nos conjuntos de folhas virtuais dos demais nós é feita quando o nó ingressante envia as mensagens de atualização, contendo os novos identificadores virtuais.
O protocolo de ingresso requer uma troca de mensagens a mais que o protocolo de partição do espaço virtual, realizada quando o nó ingressante solicita a seus vizinhos imediatos seus conjuntos de folhas virtuais. Mas esta troca de mensagens envolve apenas o nó ingressante e seus vizinhos imediatos.
6.4.4 Protocolo de saída de nós
O protocolo de saída de nós é executado sempre que um nó s deixa o sistema, seja voluntariamente ou por motivo de falhas. Normalmente um nó deixa o sistema sem avisar os demais, de modo que as saídas de nós são normalmente detectadas através de um mecanismo de monitoramento. No caso do Pastry, cada nó é responsável por periodicamente verificar se seus vizinhos estão conectados. Caso um nó d detecte que um vizinho não está mais acessível, este inicia um protocolo interno de saída de nós do Pastry.
O protocolo de saída é iniciado pelo nó d que detectou que um vizinho estava inacessível, logo após o término do protocolo do Pastry, e é bastante similar ao protocolo de partição do espaço virtual. A principal diferença é que os nós que possuem referências a s precisam remover este nó de seus conjuntos de folhas e vizinhos virtuais.
6.4.5 Protocolo de atualização de capacidade
A capacidade de um nó pode mudar durante o tempo de vida do sistema. Dependendo da métrica utilizada para definir a capacidade, a amplitude desta variação pode ser bastante grande. Neste caso, para garantir a distribuição de carga, é necessário redistribuir o espaço virtual entre seus nós vizinhos. O protocolo de atualização de capacidade de um nó é iniciado pelo nó que teve sua capacidade alterada e segue o mesmo procedimento do protocolo de partição do espaço virtual.
As atualizações de capacidades requerem a troca de mensagens de controle e atualização de tabelas em diversos nós. Além disso, dependendo da aplicação que utilizar a rede peer-to-peer, pode ser ne- cessário transferir outros dados entre os nós. Deste modo, para evitar transferências desnecessárias de dados, o sistema deve possuir um limiar de mudança na capacidade de um nó, que deve ser atingido para iniciar o protocolo de atualização de capacidades. Este limiar pode incluir um valor mínimo de alteração da capacidade, além de um tempo mínimo que a alteração na capacidade deve ficar acima deste limiar.