Gerenciamento de Grupo na Plataforma ISIS Roteiro Trabalho
Transcrição
Gerenciamento de Grupo na Plataforma ISIS Roteiro Trabalho
Roteiro Gerenciamento de Grupo na Plataforma ISIS • Trabalho Relacionado • Algoritmo de Gerenc. de Grupo ISIS – Aspectos Gerais – Características – Vantagens • Código • Características Apresentado por Antônio Carlos Theóphilo Costa Júnior Trabalho Relacionado • Algoritmo Transis • Vantagens – Solução Elegante – Geral • Desvantagens – Requer multicast em cada membro – Depende do suporte dado pelo algoritmo Trans Algoritmo ISIS • Proposto por Aleta Ricciardi e Kenneth Birman para realizar o Gerenciamento de Grupos na Plataforma ISIS. • Projetado para ambientes de comunicação pontoa-ponto. • Vantagens: – Mais eficiente em ambientes aonde o multicast é implementado com mensagens ponto-a-ponto; – Pode ser usado em ambientes sem multicast. 1 Algoritmo ISIS Algoritmo ISIS • Características Gerais – Paranóico – Unidirecional (one-way) – Fofoqueiro (gossipy) – Supõe canais ponto-a-ponto confiáveis e FIFO – Descarta mensagens de processos considerados faltosos Variáveis Utilizadas • Conceitos – Coordenador – Participante – Reconfiguração Abreviações send(dest, action, params) L = Visão atual do grupo version = Versão de L change = Última mudança proposta a L rank = Nível do coordenador q propôs a mudança faulty = Lista de processos suspeitos remoteState[1..M] = Estados dos participantes remoteState[i].L = Visão do grupo por i remoteState[i].version = Versão da visão remoteState[i].rank = Nível do coordenador q implantou a visão send(dest, action, params, faulty) action(sender, params) {código ... } action(sender, params, remFaulty) faulty = faulty U remFaulty {código ... } remoteState[i].change = Mudança proposta por i 2 Abreviações Operação Normal - Coordenador distribute(action; params) returnAction(sender; params) normalCoordinator() { while (true) { {código ... } espere até a ocorrência de uma mudança na visão do grupo distribute(COORD_UDDATE; change, version + 1) para cada p em {L - faulty} send(p, action, params) CU_ACK(sender, version) //time-out de T segundos version++ realiza as mudanças em L descritas em change returnAction(sender, params) distribute(CU_COMMIT) {código ... } CC_ACK(sender) para cada p em {L - faulty} que não respondeu } faulty = faulty U {p} } Operação Normal - Participante Reconfiguração – Coordenador (1) normalParticipant() { while(true) { espere por uma msg do coordenador COORD_UPDATE(coordinator; chg, vrs): change = chg next_version = vrs rank = rank(coordinator) send(coordenador; CU_ACK) CU_COMMIT(coordinator): realizar a mudança descrita em change para L version = next_version reconfigureCoordinator() { myState = (L, version, rank, {}) distribute(INTERROGATE; myState) INT_RESPONSE(sender; rState) remoteState[sender] = rState ahead = {p | p in L and remoteState[p].version > version} current = {p | p in L and remoteState[p].version = version} ... change = {} send(coordinator; CC_ACK) } } 3 Reconfiguração – Coordenador (2) Reconfiguração – Coordenador (3) ... if (ahead != {}) //existe uma visao mais atualizada comitada //deve-se propo-la else if (para todo p em current remoteState[p].change = {}) distribute(REORD_UPDATE; change, nextVersion) //não existem mudancas comitadas RU_ACK(sender) else if (existe um valor p/ remoteState[p].change!={} em current) atualize L com change //uma proposta foi feita. Ela pode ter sido comitada. coordinator = self //Deve ser proposta change = futureProposal else executar o normalCoordinator //existem propostas competindo para uma mudanca. A } proposta proposta pelo reconfigurador com o menor rank e’ a unica q pode ter sido comitada ... Detalhamento (1) Detalhamento (2) //existe uma visao mais atualizada comitada //não existem mudancas comitadas //deve-se propo-la else if(remoteState[p].change = {} p/ qq p em current) if(ahead != {}) change = faulty //pelo menos o antigo coordenador change = remotestate[p].L para um p em ahead nextVersion = version +1 nextVersion = version + 1 futureProposal = faulty futureProposal = remoteState[p].change para um p em ahead tal que remoteState[p].rank seja minimo 4 Detalhamento (3) //uma proposta foi feita. Ela pode ter Detalhamento (4) sido comitada. //existem propostas competindo para uma mudanca. A proposta proposta pelo reconfigurador com o menor rank e’ a unica q pode ter sido comitada //Deve ser proposta else if(existe um unico valor != {} de else() remoteState[p].change para um p em current) change = remoteState[p].change para um p em current change = remoteState[p].change para um p em current tal que remoteState[p].rank seja minimo tal que change != {} nextVersion = version +1 nextVersion = version +1 futureProposal = faulty futureProposal = faulty Reconfiguração – Participante (1) Reconfiguração – Participante (2) reconfigureParticipant() { espere por uma msg INTERROGATE ... INTERROGATE(sender; sdrL, sdrVersion, sdrRank, sdrChange) change = nextChange if(rank(self)>sdrRank) rank = rankSender crash() send(sender; RU_ACK) if(version<sdrVersion) espere T segundos por REORD_COMMIT L = sdrL REORD_COMMIT version = sdrVersion se não tiver havido resposta rank = sdrRank adicione sender a faulty e saia do procedimento change = {} se nextVersion > version send(sender, INT_RESPONSE; L, version, rank, change) realize em L a mudança descrita em change espere T segundos por REORD_UPDATE version = nextVersion REORD_UPDATE(sender; nextChange, nextVersion) coordinator = sender se não tiver havido resposta adicione sender a faulty e saia do procedimento send(coordinator, RC_ACK) } 5 Características (1) coord p1 Características (2) p2 r p update(x+1) • Um reconfigurador vê no máximo uma visão comitada de versão x+1 p1 p2 p3 r commit(x+1) • Reconfiguradores competindo para instalar versões conflitantes commit(x+1) p falhou r falhou update(x+2) interrogate/ update/ commit r falhou crash() update(x+2) commit(x+2) interrogate Resumo • Vantagens – Algoritmo ideal para ambientes de comunicação em grupo sem suporte nativo a multicast – Útil em ambientes de grupo sem multicast – Consistência mantida mesmo na presença simultânea de múltiplos coordenadores • Desvantagens FIM Críticas/Dúvidas – Complexidade – Paranóia 6