Na computação distribuída, muitas vezes é necessária a escolha de um processo específico para coordenar tarefas ou desempenhar alguma função em particular. Os algoritmos usados para escolher um coordenador são conhecidos como algoritmos de eleição de líder. Nesses algoritmos, muitas vezes não importa qual o processo é escolhido como líder, desde que alguém seja eleito. Contudo, todos os processos participantes devem concordar com a escolha do novo líder.
Exemplos de aplicações distribuídas que usam eleição de líder:
Algoritmos típicos para eleição de líder consideram uma . Seja P, o conjunto de processos Pi, com 0 ≤ i < n, onde n é o número de processos participantes da computação, até n eleições podem ser realizadas de forma concorrente, desde que somente um líder seja eleito e cada processo inicie somente uma eleição por vez. A qualquer momento, um determinado processo pode ser considerado um ou um , indicando se o processo está participando, ou não, de uma execução do algoritmo de eleição. Na imagem abaixo, inicialmente todos os processos são não-participantes. Ao clicar em um processo, ele passa a ser participante. Para visualizar, passe o mouse em cima das caixas de texto.
O Algortimo em Anel é um dos algoritmos clássicos para eleição de líder em sistemas distribuídos. Esse algoritmo realiza a eleição considerando uma rede de sobreposição em anel, o que significa que os processos se comunicam ao redor de um anel no sentido horário. Para esse algoritmo, é considerado que cada processo tenha uma espécie de "força", ou seja, um identificador (ID), onde o processo que possui a maior "força" (identificador) dentre todos os processos que não estejam em estado de falha pode ser eleito o líder. Para esses casos, será considerado que os processos tenham "forças" distintas.
No algoritmo de eleição de líder em anel, cada processo mantém comunicação somente com seus vizinhos à esquerda e à direita, sendo que os vizinhos de Pk são, respectivamente, Pk-1 e Pk+1. Como a comunicação se dá no sentido horário, Pk recebe mensagens de Pk-1 e envia mensagens para Pk+1 anexando seu ID ("força") à cada mensagem enviada. Pk anexa à mensagem seu IDk e envia a mensagem para Pk+1.
Durante a execução do algoritmo baseado em anel, os nós podem estar em uma de três
possibilidades (um, entre três estados possíveis):
Inicialmente, todo nó está no estado não-decidido (indeciso). Quando ele decide, seu estado final será líder ou não-líder, sujeito a restrição que só pode existir exatamente um líder. Assumimos que cada nó tem uma "força" única. Isso torna o algoritmo trivial, já que é possível eleger um líder, por exemplo, com a maior "força".
Apresentamos um algoritmo em anel simples, que é correto, pois elege um líder, com tempo O(n) e complexidade de mensagens de O(n2).
Cada nó executa:
A animação a seguir possui um conjunto de processos com valores de suas forças gerados aleatoriamente. Ao iniciar a animação o usuário pode acompanhar, passo a passo, o comportamento da escolha de um líder usando este algoritmo. Por conveniência escolheu-se iniciar a simulação do algoritmo sempre a partir de P0. A cada passo, o processo Pi envia o valor de sua "força" para o vizinho P(i+1)mod n.
ID | Força |
O usuário pode também interagir com o algoritmo aumentando ou diminuindo o número de processos ou a "força" de cada processo. Igualmente a simulação do algoritmo sempre se inicia a partir de P0. A cada passo, o processo Pi envia o valor de sua "força" para o vizinho P(i+1)mod n.
ID | Força |