470 likes | 533 Views
Capítulo 5: Terminação e algoritmos básicos. Ajay Kshemkalyani e Mukesh Singhel Distributed Computing: Principles, Algorithms, and Systems Cambridge University Press. Topologias e abstrações. Sistema: Grafo não direcionado com pesos nas arestas G(N,L), onde n = |N|, l = |L| Topologia física
E N D
Capítulo 5: Terminação e algoritmos básicos • Ajay Kshemkalyani e Mukesh Singhel • Distributed Computing: Principles, Algorithms, and Systems • Cambridge University Press
Topologias e abstrações • Sistema: Grafo não direcionado com pesos nas arestas G(N,L), onde n = |N|, l = |L| • Topologia física • Nós (Vértices): Nós da rede, todos os hosts (participando ou não) • Arestas: toda a Lan, Links da WAN, ligação direta entre hosts • Ex. Figura 5.1(a) topologia + todos os links da WAN • Topologia lógica: • Nós (Vértices): Hosts onde a aplicação é executada • Arestas: Canal lógico entre estes nós • Totalmente conectado (Ex. Figura 5.1(b)) • Topologia sobreposta (overlay) • Superposição na topologia lógica • Meta: Coleta eficiente de informação, distribuição ou procura • Ex. anel, árvore, malha, hipercubo
Abstrações de Topologia • Figura 5.1: Topologia vista sob diferentes níveis de abstração
Classificação e conceitos básicos • Execução do aplicativo vs. Execução do algoritmo de controle • Algoritmo de controle: • Para monitorar e prover funções auxiliares. Ex. ST, MIS, CDS, eleição de líder, gravação de estado global (deadlock terminação), check point • Sobreposto ao aplicativo, mas sem interferir • Envia e recebe eventos internos, sendo transparente a aplicação • Ex. protocolo • Algoritmos centralizados e distribuídos • Centralizado: Assimétrico; configuração cliente-servidor; gargalos são processamento e banda; há pontos de falha • Distribuídos: Mais balanceados; dificuldade de criar algoritmos perfeitamente distribuídos (Ex. Algoritmos de snapshot, baseados em árvores, etc...) • Algoritmos simétricos e assimétricos
Classificação e conceitos básicos • Algoritmos anônimos: id dos processos não são utilizados na tomada de nenhuma decisão (em tempo de execução run-time) • Estruturalmente elegantes, mas difíceis ou impossíveis de implementar. Ex. Eleição de líder • Algortimos uniformes: O número de processadores n, não pode ser um parâmetro do código • Permite escalabilidade, entrada e saída de processos da computação é simples e apenas os vizinhos tem noção da mudança de topologia • Algoritmos adaptativos: Seja K ( ≤ n) o número de processadores participando no contexto do problema X quando este é executado. A complexidade deve ser expressa como função de K e não n. • Ex. Exclusão mutua: O overhead de acesso à seção crítica é expresso em termos de K
Classificação e conceitos básicos • Determinístico vs. Não determinístico: • Execução não determinística contém ao menos 1 recebimento não determinístico, enquanto o determinístico contém nenhum • Não determinístico: Pode receber a mensagem de qualquer fonte. • Determinístico: A fonte é especificada. Dificuldades • Sistemas assíncronos: • Deterministico: todas as execuções produzem a mesma ordem parcial de eventos (utilizado em debugging, detecção de predicados instáveis, etc...) • Não deterministico: as execuções podem produzir a ordem parcial de eventos diferentes (tempo de envio e possível congestionamento imprevisível, atraso local variável)
Classificação e conceitos básicos • Sistema Assíncrono vs. síncrono: • Síncrono: • Limitado pelo delay de mensagens • Escorregamento de relógios conhecidos. • Limite superior de execução de um passo lógico conhecido • Assíncrono: Nenhum dos critérios anteriores é valido • Algoritmos para solução de problemas dependem muito de modelos de sistema inteiramente assíncronos • Controle on-line vs. Controle off-line: • On-line: Executa enquanto o dado está sendo gerado. Vantagem clara para debugging, scheduling, etc... • Off-line: Requer que todo o dado seja analisado antes da execução.
Classificação e conceitos básicos • Algoritmos Wait-Free: • Resistentes a n - 1 falhas de processos. Operações em qualquer processo deve ser completada em um número certo de passos • Robusto, mas caro • Possível para exclusão mútua • Pode nem sempre ser possível de se fazer. Ex. Problema do produtor-consumidor • Canais de comunicação: • Ponto-aponto: FIFO, Não FIFO, Na camada de aplicação. • Normalmente provida pelo protocolo de comunicação.
Medições e métricas de complexidade • Cada métrica é especificada utilizando-se o limite inferior (Ω), o limite superior (O) e complexidade justa (θ): • Métricas • Complexidade de espaço por nó • Complexidade de espaço do sistema (≠ n da complexidade por nó). Ex. Pior caso de todos os nós pode nunca ocorrer simultaneamente • Complexidade de tempo por nó • Complexidade de tempo do sistema. Os nós executam totalmente concorrentemente? • Complexidade de mensagens • Número de mensagens • Tamanho das mensagens • Complexidade de tempo das mensagens: depende do número de mensagens , tamanho das mensagens, concorrência de envio e referencia de mensagens. • Outras métricas: Send e Receive, multicast. Como implementar? • Memória compartilhada: Tamanho da memória compartilhada; Operações de sincronização
1-init Spanning Tree Síncrono: Exemplo • Figura 5.2: árvore em negrito • Raiz designada. Nó A no exemplo • Cada nó identifica seu pai • Como identificar nós filhos
1-init Spanning Tree Síncrono: Complexidade • Terminação: Depois do diâmetro ser encontrado • Como um processo pode terminar depois de setar seu pai? • Complexidade: • Espaço Local: O(Grau) • Espaço Global: O(ΣEspaço Local) • Tempo local: O(Grau + Diâmetro) • Complexidade de tempo de mensagem: d pulos de mensagens • Complexidade de mensagem: Maior que 1, menor que 2 mensagens / arestas, então [l, 2l] • Spanning Tree: análogo a breadth-first search
1-init Spanning Tree Assíncrono: Operação • Root inicia a enchente de QUERY para identificar os vértices da árvore • Pai: 1 nó pelo qual se recebe um QUERY • ACCEPT (resp +) enviado como resposta; QUERY enviado para os vizinhos • Terminação: quando ACCEPT ou REJECT (resp -) recebido de um vizinho não pai. Porque? • QUERY de um não pai respondido com um REJECT • É necessário rastrear os vizinhos? Determinar os filhos e quando terminar? • Porque o tipo de mensagem REJECT é necessário? • A mensagem de REJECT pode ser eliminada? Como? Qual o impacto?
1-init Spanning Tree Assíncrono: Complexidade • Terminação: Depois de receber um REJECT ou ACCEPT de um vizinho não Pai • Complexidade: • Espaço Local: O(Grau) • Espaço Global: O(ΣEspaço Local) • Tempo local: O(Grau) • Complexidade de tempo de mensagem: d + 1 pulos de mensagens • Complexidade de mensagem: Maior que 2, menor que 4 mensagens / arestas, então [2l, 4l] • Spanning Tree: Pior caso altura igual a n - 1
1-init Spanning Tree Assíncrono: Exemplo • Figura 5.3: árvore em negrito • Raiz designada. Nó A no exemplo • Vértices da árvore: QUERY + ACCEPT msg • Cross-edges e back-edges 2(QUERY + REJECT) msg
Spanning Tree Assíncrono: Iniciação concorrente • Figura 5.4: Inicio concorrente • em A, G e J Algoritmo • Um nó pode espontaneamente iniciar o algoritmo tornando-se “Raiz” • Cada “Raiz” inicia variações do algoritmo 1-init. • Terminação: apenas a “Raiz” detecta a terminação. Precisa de uma mensagem extra para informar aos outros. • Complexidade de tempo: O(l) • Complexidade de mensagens: O(nl) • Opção1 : Unir Sts parciais. Dificuldade: baseado em conhecimento local. Pode levar a ciclos. • Opção 2: Permitir apenas 1 instancia do ST e descartar as outras. Seleciona Raiz com maior id.
DFS Spanning Tree Assíncrono • Lida com inicialização concorrente como o algoritmo não DFS. • Quando QUERY, ACCEPT ou REJECT chegam a ação depende se: myroot < = newroot • Terminação: apenas a Raiz que terminou com sucesso detecta e informa via arestas da ST. • Complexidade de tempo: O(l) • Complexidade de mensagens: O(nl)
Broadcast e convergecast em uma árvore • Figura 5.5: Estrutura de árvore para broadcast e convergecast • Como fazer BC e CC em um anel? E em uma malha? • Custo?
Broadcast e convergecast em uma árvore • Broadcast em um sistema distribuído • BC1. Raiz envia informação de broadcast para seus filhos e termina • BC2. Quando um não Raiz recebe a informação de seu pai. Copia a informação e repassa para seus filhos e termina • Convergecast: Coleta informação no Raiz para computar uma função global • CVC1. Nó folha envia seu relatório para seu pai e termina • CVC2. Um nó interno da árvore recebe o relatório de todos os seus filhos realiza uma operação e repassa para seu pai e termina • CVC3. Nó Raiz. Recebe o relatório de todos os seus filhos. Calcula a função e termina. • Usos: Calcular máximos e mínimos, Eleição de líder, computar funções de estado global. Complexidade de tempo O(h); Complexidade de Mensagens: n - 1
Menor caminho com fonte única: Bellman-Ford Síncrono • Grafo com pesos, sem ciclos com pesos negativos. • Nenhum nó tem visão global, apenas topologia local. • Assume-se: cada nó conhece outros n; necessário para a terminação • Depois de K rodadas: tamanho até qualquer nó é minimo com K pulos • Depois de K rodadas: O tamanho até todos os nós com até k pulos de distancia da MST final estabilizou • Terminação: n – 1 rodadas • Complexidade de tempo: n – 1 rodadas • Complexidade de mensagen: (n – 1) / mensagens
Distance Vector Routing • Utilizado no roteamento de internet (popular no meio dos anos 80), muda dinamicamente os grafos, onde os pesos das arestas representam o delay ou a carga nos canais. • Variação do algoritmo síncrono de Bellman-Ford; O loop externo é infinito. • Procura o menor caminho para cada destino. • Tamanho substituído por LENGTH[1..n]; pai substituído por PARENT[1..n] • K-ésimo componente representa o melhor caminho até LENGTH[k] • Em cada iteração: • Aprica-se a inequação de triangulação para cada destino independentemente • Inequação de triangulação: (LENGTH[k] > (LENGTHj[K] + weightj,k)) • Nó i tem peso weightijestimado utilizando RTT ou avaliando o delay até o vizinho j
Menor caminho com fonte única: Bellman-Ford Assíncrono • Grafo com pesos, sem ciclos com pesos negativos. • Nenhum nó tem visão global, apenas topologia local. • Número de mensagens Ω( cn ) exponencial e complexidade de tempo Ω( cn .d ) exponencial no pior caso, onde c é uma constante. • Se todos os links tiverem o mesmo peso, o algoritmo computa o caminho mínimo de saltos; a tabela de caminho mínimo de saltos para todos os destinos é computada utilizando-seΩ(cn.l) mensagens
All-All shortest Path (Menor caminho): Floyd-Warshall • Figura 5.6: (a) Inequação triangular para o algoritmo de Floyd-Warshall. (b) Relação VIA por um ramo da árvore para um dado par (s,t)
All-All shortest Path (Menor caminho): Floyd-Warshall • Complexidade (centralizado): O(n3) • Depois das iternções do pivo do loop externo Invariante • LENGTH[i,j] é o menor caminho passando por nós intermediários do conjunto {i,...,pivo}. VIA[i,j] é o primeiro salto correspondente
Floyd-Warshall Distribuido • Linha i de LENGTH[1..n,1..n], VIA[1..n,1..n] armazenado em i, que é responsável por atualizar a linha. (logo, i atua como fonte) • Correspondência com o algoritmo centralizado, linh(4) • Como o nó i acessa o dado remoto LENGTH[pivot,t] em cada iteração do pivo? • Sink tree Distribuída (dinâmica): em cada iteração de pivo, todos os nós s | LENGTH[s,t] ≠ ∞ estão na sink tree, com sink em t • Como sincronizar as execuções da iteração do loop externo em nós diferentes? • Simular “sincronizador”: Ex. Utilizar mensagem de recebimento para pegar os dados LENGTH[pivo,*] de seu pai na sink tree.
Flyd-Warshall Distribuido: sink tree dinâmica Renomear LENGTH[i.j] e VIA[i,j] como LEN[j] e PARENT[j] Em cada nó i, na iteração do pivo: • Se LEN[pivo] ≠ ∞ no nó i, então o pivo distribui LEN[*] para todos os nós (incluindo i) na sink tree do pivo. • Arestas Pai-Filho na sink tree devem possuir ID, como? • Um nó envia IN_TREE para PARENT[pivo]; NOT_IN_TREE para os outros vizinhos • Recebendo um IN_TREE de k, k é um filho na sink tree do pivo • Esperar IN_TREE ou NOT_IN_TREE de todos os vizinhos. Essas mensagens são uma sincronização • Pivo broadcast LEN[*] para toda sua sink tree. Essas mensagens são uma sincronização. • Agora todos os Nós executam a inequação de triangulação em passos pseudo-exclusivos • Complexidade de tempo: O(n2) Execução / nós. Mais o tempo para n broadcasts • Complexidade de mensagens: n iterações • 2 IN_TREE ou NOT_IN_TREE msg de tamanho O(1) • ≤ n – 1 PIV_LEN msg de tamanho O(n): O(n) msg • Total O(n(l+n)) Mensagens; Total (nl + n3) espaço de mensagens.
Floyd-Warshall Distribuído: Sink Tree • Figura 5.7: Identificando os nós Pai-Filho da árvore
Enchente Controlada (sem ST) • Canais FIFO • Enchente assíncrona • Utilizado para Verificar o estado de links de roteamento no IPV4 • Complexidade: 2l mensagens no pior caso; Tempo: d seqüências de saltos • Enchente Síncrona(para adquirir um dado de cada processo) • STATEVE[k] é o dado do processo k • Complexidade de mensagens: 2dl mensagens, cada uma com tamanho n • Complexidade de tempo: d turnos
Minimum Spanning Tree (MST) • Assumindo um grafo não direcionado com pesos. Se os pesos não são únicos assume-se algum critério de desempate como ID dos nós para ordenação total dos pesos dos vértices • Revisão de definições: Floresta, Spanning forest, Spanning tree, MST • Kruskal's MST • Assumindo uma floresta de componentes de grafos • Manter uma lista ordenada de vértices • Em cada n – 1 iterações, identificar o vértice de peso minimo que conecta dois componentes diferentes • Incluir este nó na MST • O(l log(l) ) • Prim MST • Começar com apenas um único nó • Em cada n – 1 iteração, selecionar o vértice de peso mínimo incidente neste nó. Continua-se utilizando este novo nó • O(n2) (ou O(n log(n)) utilizando pilhas Fibonacci em grafos densos)
GHS algoritmo de MST síncrono Gallagher-Humblet-Spira MST distribuído utiliza estratégia de Kruskal. Começa com uma floresta de componentes do grafo. • MWOE (Aresta de peso mínimo de saída): “Saída” é saída lógica, ex. Indica a direção da expansão do componente. • Spanning tree de componentes conectados combinado com os MWOES mantem as propriedades das Spanning trees. • Combinação concorrente de MWOEs: • Depois da k-ésima iteração, ≤ n / 2k componentes. Até o máximo de log n iterações • Cada componente possui um nó líder na iteração • Cada iteração em um componente possui 5 passos iniciados pelo líder: • Fase de broadcast-convergecast: líder identifica as MWOE • Fase de broadcast: líder (potencial) para a próxima iteração é identificado • Ase de broadcast: entre as componentes agrupadas, 1 lider é selecionado; Ele se identifica para todos os novos componentes
Aresta de saída de peso mínimo: exemplo Observação 5.1 • Para qualquer Spanning forest {(Ni, Li) | i = 1..k } do grafo G, considerando qualquer componente (Nj, Lj). Denotamos por λj, o nó com o menor peso entre todos os incidentes apenas no no Nj. Então qualquer sub-grafo G da MST que inclui todos os nós em cada Li da spanning forest deve incluir λj. Figura 5.8: Agrupando os MWOE dos componentes. (a) Ciclo len = 2 é possível. (b) Ciclo len > 2 não é possível
MST: exemplo • Figura 5.9: Fases da iteração de um componente. • (a) Root broadcast SEARCH_MWOE; (b) Ocorre um convergecast REPLY_MWOE; (C) Root broadcast ADD_MWOE; (d) se a MWOE também é escolhido como MWOE pelo componente no outro lado do MWOE, O processo incidente com maior ID é o líder na proxima iteração; Broadcast NEW_LEADER
GHS: Complexidade • Log n rodadas (Síncrono). • Complexidade de tempo: O(n log n) • Complexidade de mensagens: • Em cada iteração, O(n) mensagens pelas arestas da árvore (passos 1,3,4,5) • Em cada iteração, L mensagens de EXAMINE para determinar as MWOEs • Corretude requerida pelas operações síncronas: • No passo (2), EXAMINE é utilizado para determinar se um vizinho não marcado pertence a mesma componente. Se o nó de uma aresta não marcada estiverem em níveis diferentes há problemas. • Considerando EXAMINE enviado na aresta (j,k) pertencente a mesma componente. Mas k pode não saber que esta pertence a nova componente e ao novo líder ID; responde com +ve • Pode levar a ciclos.
MST: Assíncrono • GHS síncrono é simulado utilizando-se mensagens / passos extras • Novo Líder faz BC / CC nas arestas marcadas da nova componente • No passo (2), destinatário de um EXAMINE pode atrasar a resposta se estiver em um turno anterior. • N log n mensagens extras • No novo turno, informar cada vizinho: • Enviar EXAMINE quando todos os vizinhos nas arestas não marcadas estiverem no mesmo nível • L log n mensagens extras • Engenharia de GHS Assíncrono • Mensagens O( n log n + l) tempo: O(n log n(l + d)) • Desafios • Determinar o nível de nós adjacentes • Se as componentes estão em níveis diferentes, busca coordenada pelas novas MWOEs