Falhas Bizantinas. Filipe Palma, Jonathan Nau, Liliana Semedo e Luís Rodrigues RESUMO ABSTRACT II. LESLEI LAMPORT I. INTRODUÇÃO



Documentos relacionados
Arquitecturas Tolerantes a faltas em Sistemas Distribuídos

SISTEMAS DISTRIBUÍDOS

Arquitetura de Rede de Computadores

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064

Tolerância a Faltas. 8/28/2003 José Alves Marques. Sistema Computacional

Resumo. Introdução Classificação Fases Curiosidades

Sistemas Distribuídos: Conceitos e Projeto Introdução a Tolerância a Falhas

Ferramentas de Modelação e Análise de Sistemas baseadas em Redes de Petri (RdP)

Rede de Computadores

Introdução ao Modelos de Duas Camadas Cliente Servidor

Sistemas Distribuídos. Aleardo Manacero Jr.

Wilson Moraes Góes. Novatec

Introdução. Arquitetura de Rede de Computadores. Prof. Pedro Neto

Sistemas Distribuídos e Paralelos

EAGLE TECNOLOGIA E DESIGN CRIAÇÃO DE SERVIDOR CLONE APCEF/RS

MÓDULO 7 Modelo OSI. 7.1 Serviços Versus Protocolos

Multiplexador. Permitem que vários equipamentos compartilhem um único canal de comunicação

Sistemas Distribuídos Aula 10

2. Representação Numérica

Entendendo como funciona o NAT

1 INTRODUÇÃO Internet Engineering Task Force (IETF) Mobile IP

Bancos de dados distribuídos Prof. Tiago Eugenio de Melo

Unidade VI. Validação e Verificação de Software Teste de Software. Conteúdo. Técnicas de Teste. Estratégias de Teste

Admistração de Redes de Computadores (ARC)

Objetivos: i) Verificar o impacto de loops em redes locais ii) Configurar o protocolo STP para remover loops da rede

Gerenciamento de Incidentes

MÓDULO 8 ARQUITETURA DOS SISTEMAS DE BANCO DE DADOS

1.1. Organização de um Sistema Computacional

Sistemas Distribuídos Grupos

Registro e Acompanhamento de Chamados

Unidade 13: Paralelismo:

Capítulo 4 - Roteamento e Roteadores

AUTOR: DAVID DE MIRANDA RODRIGUES CONTATO: CURSO FIC DE PROGRAMADOR WEB VERSÃO: 1.0

Protocolo TCP/IP. Neste caso cada computador da rede precisa de, pelo menos, dois parâmetros configurados:

COMPONENTES BÁSICOS DE

Quadro de consulta (solicitação do mestre)

Seja uma rede de Petri definida pela tripla (L, T, A), e por sua marcação inicial M 0.

5.2 MAN s (Metropolitan Area Network) Redes Metropolitanas

Fault Tolerance Middleware for Cloud Computing

Sistemas Operacionais. Prof. André Y. Kusumoto

5 Estudo de caso: utilizando o sistema para requisição de material

c. Técnica de Estrutura de Controle Teste do Caminho Básico

SISTEMAS DISTRIBUÍDOS E TOLERÂNCIA A FALHAS

Modelos Fundamentais. Carlos Ferraz.

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto

Um sistema SMS 1 simplificado

UML - Unified Modeling Language

Conceitos de Banco de Dados

Comunicação entre processos (grupos) COMUNICAÇÃO ENTRE PROCESSOS Comunicação de grupo. Comunicação entre processos (grupos)

Tecnologia e Infraestrutura. Conceitos de Redes

Sistemas Distribuídos. Ricardo Ribeiro dos Santos

SISTEMAS DISTRIBUÍDOS

Noções de. Microsoft SQL Server. Microsoft SQL Server

Desenvolvimento de Sistemas Orientados a Objetos com UML UP/RUP: Projeto

LISTA DE VERIFICAÇAO DO SISTEMA DE GESTAO DA QUALIDADE

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

Utilização de Sistemas Distribuídos em MMOGs (Massive MultiPlayer Online Games) Mauro A. C. Júnior

PARANÁ GOVERNO DO ESTADO

Subcamada MAC. O Controle de Acesso ao Meio

Capítulo 3. Avaliação de Desempenho. 3.1 Definição de Desempenho

ICORLI. INSTALAÇÃO, CONFIGURAÇÃO e OPERAÇÃO EM REDES LOCAIS e INTERNET

Programação Distribuída

Programação Concorrente Introdução

3 SERVIÇOS IP. 3.1 Serviços IP e alguns aspectos de segurança

Arquitetura de Redes: Camadas de Protocolos (Parte I) Prof. Eduardo

Requisitos de Software. Requisitos de Software. Requisitos de Software. Requisitos de Software. Requisitos de Software. Requisitos de Software

Licenciatura em Engenharia Informática Sistemas Distribuídos I 2ª chamada, 6 de Julho de º Semestre, 2004/2005

Programação 2ºSemestre MEEC /2011. Programação 2º Semestre 2010/2011 Enunciado do projecto

3 Dicas MATADORAS Para Escrever s Que VENDEM Imóveis

Resolução de problemas e desenvolvimento de algoritmos

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Processos Técnicos - Aulas 4 e 5

O que é RAID? Tipos de RAID:

Modelos de Sistemas Distribuídos. . Requerimentos de Projeto para Arquiteturas Distribuídas

Sistemas Distribuídos: Conceitos e Projeto Eleição de Coordenador

SISTEMAS OPERACIONAIS CAPÍTULO 3 CONCORRÊNCIA

Redes de Computadores (RCOMP 2014/2015)

BANCO DE DADOS DISTRIBUÍDOS e DATAWAREHOUSING

Segurança Internet. Fernando Albuquerque. (061)

Tabela de roteamento

Rede Corporativa. Tutorial 10 mar 2009 Fabio Montoro. Introdução

Dadas a base e a altura de um triangulo, determinar sua área.

4. Qual seria o impacto da escolha de uma chave que possua letras repetidas em uma cifra de transposição?

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO)

Sistemas Distribuídos

Um Driver NDIS Para Interceptação de Datagramas IP

Chord. Tecnologias de Middleware. Fernando Martins - fmp.martins@gmail.com

3 SCS: Sistema de Componentes de Software

Transcrição:

1 Falhas Bizantinas Filipe Palma, Jonathan Nau, Liliana Semedo e Luís Rodrigues RESUMO Implementar serviços confiáveis num sistema distribuído, onde cada máquina pode entrar e sair da rede aleatoriamente é uma tarefa de grande responsabilidade. Neste contexto, um aspecto de extrema importância, é deveras a segurança. Os detectores de falhas bizantinas (ou arbitrárias) permitem resolver problemas de segurança, uma vez que separam o tratamento das falhas do protocolo distribuído que os utiliza. Leslei Lamport investigou e resolveu diversos problemas de computação de grande importância da actualidade, sendo um contributo considerável nesta área. Neste artigo estudamos as falhas bizantinas e os mecanismos associados na detecção de erros recorrendo a pesquisas feitas por Leslei Lamport. Palavras-chave: Leslei Lamport, falhas bizantinas, acordo bizantino, tolerância a falhas. ABSTRACT Implementing dependable services in a distributed system, where each machine can enter and leave the network randomly is a very responsible task. In this context, an aspect of great importance, is indeed security. The Byzantine fault detectors (or arbitrary) allow to solve security problems, since separate treatment of the distributed fault protocol that uses them. Leslei Lamport investigated and resolved many computing issues of great importance of today, being a considerable contribution in this area. We study the Byzantine failures and the mechanisms associated with the error detection using the research by Leslei Lamport. Keywords: Leslei Lamport, byzantine failure, byzantine agreement, fault tolerance. F I. INTRODUÇÃO ALHAS BIZANTINAS foi uma das investigações feitas por Leslei Lamport quando ele tratava de procurar solução para problemas comuns do dia-a-dia, como o problema da padaria entre outros. As suas pesquisas começaram por pequenas situações reais observadas por Leslei. Um sistema distribuído é constituído por vários computadores em rede que podem, a qualquer momento da execução do sistema, ficar indisponíveis. As características comuns de um sistema distribuído são: imprevisibilidade da latência na transmissão das mensagens, a rede não estar totalmente conectada, não existem elementos centralizados na rede, não ser possível prover aos processos uma visão global da topologia da rede, de maneira que cada computador tem um conhecimento parcial do sistema e, os postos podem alterar a sua posição quanto à topologia da rede. Um factor preocupante nos sistemas distribuídos é a segurança. O facto de estes sistemas serem compostos por vários postos em rede, comunicando entre si através da internet e das redes sem fios de forma dinâmica, estes são susceptíveis a intrusões maliciosas que podem comprometer todo o sistema. O modelo de falhas bizantinas lida com este tipo de problemas ao considerar a existência de processos corruptos, que podem agir de maneira arbitrária na tentativa de impedir que o sistema funcione dentro da normalidade. Um processo bizantino pode, por exemplo, tentar assumir a identidade de outro, enviar mensagens com valores incorrectos, duplicar mensagens ou simplesmente não enviar mensagens que o protocolo em execução especificar. O desenvolvimento de sistemas tolerantes a faltas bizantinas, isto é, que mantenham o seu funcionamento correcto apesar do comportamento maligno de alguns de seus processos, é portanto de especial interesse. Este artigo apresenta um estudo às falhas bizantinas, ao seu mecanismo e uma referência a Leslei Lamport pela dedicação no estudo destes problemas, que sem a sua contribuição não estaríamos neste ponto. II. LESLEI LAMPORT Leslie Lamport nascido em 1941, é um cientista computacional norte-americano. Formou-se em matemática pela Massachutsetts institute of technology em 1960, e completou o mestrado e doutorado pela Universidade Brandeis, concluídos respetivamente em 1963 e 1972. Ele começou a sua carreira como cientista computacional no Massachusetts Computer Associates, SRI Internacional, Digital e Compaq. Em 2001, ele

2 juntou-se à Microsoft Research em Mountain View na Califórnia. Suas pesquisas contribuíram com a fundação da teoria de sistemas distribuídos. Alguns dos seus mais notáveis papéis nesta área são os seguintes: "Time, Clocks, and Ordering of events in a Distributed System" "Distributed snapshots: determining global states of distributed systems" " The Byzantine Generals Problem" "The Part-time Parliament" Os seus artigos introduziram novos conceitos na ciência computacional e descrevem algoritmos para a resolução de muitos problemas fundamentais em sistemas distribuídos. Lamport também é conhecido por ter ajudado a desenvolver LaTeX, o software de composição e linguagem de marcação amplamente usado nas ciências. Lamport recebeu quatro títulos de Doutor 'Honoris Causa' por universidades europeias: Universidade de Rennes e Universidade Christian Albrechts de Kiel em 2003, EPFL em 2004, University of Lugano em 2006. Em 2004 ele também recebeu o IEEE Piore Award e em 2013 recebeu o prémio Turing [2]. Com a crescente mudança para sistemas cada vez maiores de escala distribuídos e computação em nuvem, o trabalho de Lamport assumiu um aumento significativo de impacto. Os seus resultados têm beneficiado muitas comunidades de pesquisa, incluindo aqueles em sistemas paralelos e de alto desempenho de computação, algoritmos simultâneos e confiabilidade do software. E além disso, o seu trabalho tem tido implicações não apenas na comunidade teórica, mas também com os engenheiros e programadores a projetar e implementar muitos tipos de sistemas. III. CONTRIBUIÇÕES Vencedor do prémio Turing ACM Award (Turing Association for Computing Machinery), Leslie Lamport deu o seu contributo para evolução da computação distribuída lançando muitos algoritmos, como por exemplo os seguintes: Time, Clocks, and Ordering of events in a Distributed systems, algoritmo que gere a ordenação de eventos em sistemas distribuídos; How to Make a Correct Multiprocess Program Execute Correctly on a Multiprocessor, um algoritmo que permite a computação simultânea de vários processos; Sequential Consistency algoritmo que dá a garantia que todos os nós de um sistema veem as operações de escrita na mesma ordem embora esta possa ser diferente da definida em tempo real; The Byzantine Generals Problem, algoritmo que permite identificar e ultrapassar informações falsas ou conflituosas num sistema distribuído com diferentes nós; Distributed Snapshots, este algoritmo permite que um processo determine o estado global de um sistema durante um cálculo. Leslie Lamport lançou outros algoritmos com base nos descritos acima, como o The Part-Time Parliament, the Paxos algorithm e o Bakery Algorithm. IV. TOLERÂNCIA A FALHAS Nos sistemas distribuídos a execução de processos e a comunicação de dados estão suscetíveis a falhas arbitrárias, também conhecida como falhas bizantinas. Esse tipo de falha é a mais séria que pode ser encontrada, pois num simples acesso a base de dados, ou numa chamada de processos, podem ocorrer falhas de comunicação ou hardware, mas também pode ocorrer falhas provenientes dos utilizadores, seja introduzindo dados incorretos voluntariamente ou intencionalmente. Devido aos grandes problemas que essas falhas podem causar, os sistemas em geral precisam utilizar algoritmos, métodos e técnicas que permitam prever, identificar e concertar as falhas do sistema, até que a ocorrência de falhas seja equivalente a zero ou que os sistemas consigam se recuperar ou continuar após a ocorrência das falhas. A tolerância a falhas é uma propriedade indispensável em sistemas onde se exige uma alta disponibilidade ou aplicações de caráter crítico, como por exemplo, sistemas e aplicações dedicados para a área da medicina. V. FALHAS BIZANTINAS As falhas bizantinas são essencialmente caracterizadas pela satisfação de dois requisitos: 1. os processos verdadeiros devem possuir uma visão coerente das mensagens enviadas por cada processo e; 2. os processos verdadeiros devem poder verificar se as mensagens enviadas pelos demais processos estão consistentes com os requisitos do algoritmo a ser executado, o que evidencia que a detecção de falhas bizantinas é definida em função de determinado algoritmo ou protocolo. O primeiro requisito pode ser atendido utilizando duas técnicas distintas: a redundância da informação e o uso de assinaturas digitais não alteráveis. O segundo, pela adição de informação às mensagens, na forma de certificados, que possam ser utilizados para validar o conteúdo a ser transmitido.

3 Entretanto, as suspeitas são identificadas de maneira assíncrona, sem recorrer ao uso de temporizadores (mecanismos de timeout) para detectar falhas de omissão. Além disso, a detecção segue um padrão de troca de mensagens local, ou seja, entre os nós que se encontram na vizinhança. Figura 1 Categorização de falhas bizantinas A Figura 1 ilustra as classes de falhas bizantinas descritas por Kihlstrom et al., distinguindo-se duas superclasses: detectáveis, quando comportamento externo do processo falso fornece evidências de que o mesmo falhou e não-detectáveis, caso contrário. Falhas não-detectáveis podem ser subdivididas em nãoobserváveis, quando os demais processos não podem notar a ocorrência da falha (por exemplo, um processo falso informa um parâmetro fornecido pelo utilizador incorrectamente) e não-diagnosticáveis, quando não é possível identificar o processo que gerou a falha (por exemplo, os processos recebem uma mensagem não assinada). As falhas detectáveis são classificadas em falhas de progresso (ou falhas por omissão) e falhas de segurança (ou falhas por comissão). Falhas de progresso atrapalham a terminação da computação, uma vez que o processo faltoso não envia mensagens requeridas por sua especificação ou as envia a apenas parte dos processos do sistema. Falhas de segurança violam propriedades invariantes às quais os processos devem atender, podendo ser definidas como o não-cumprimento de uma das seguintes restrições: 1. um processo deve enviar as mesmas mensagens para todos os outros (um processo falso poderia, portanto, enviar a mesma mensagem com valores distintos para processos distintos); 2. as mensagens enviadas devem estar de acordo com o algoritmo a ser executado. a. Modelo de troca de mensagens: Grande parte dos protocolos de detecção de falhas por colapso baseiam-se num mecanismo de troca de mensagens do tipo eu estou vivo (I m alive). Entretanto, no modelo bizantino, devido à ocorrência de processos maliciosos, tal mecanismo não é mais suficiente. Um processo falso pode responder corretamente às mensagens do detector de falhas sem no entanto garantir o progresso e a segurança do algoritmo sendo executado. Em consequência, a detecção das falhas deve se basear no padrão das mensagens enviadas na execução do algoritmo A que utiliza o detector de falhas. Assim sendo, de forma similar ao feito por Kihlstrom et al., as suspeitas são levantadas em função das mensagens requeridas por A. b. Suspeitas e equívocos: Cada suspeita sobre um processo p i está associada a uma mensagem m requerida por A. Requer-se, portanto, que as mensagens recebam identificadores únicos. As suspeitas são propagadas na rede e um processo correto adotará uma suspeita não gerada por ele próprio se e apenas se receber pelo menos f + 1 ocorrências devidamente autenticadas provenientes de processos distintos, sendo f a cobertura bizantina. O requisito de pelo menos f + 1 ocorrências impede que processos maliciosos imponham suspeitas sobre processos corretos. Figura 2 Geração de suspeitas no protocolo proposto (f=1) A Figura 2 ilustra esse mecanismo, os vizinhos de um processo p 1, falso por omissão, perceberão que p 1 não está enviando as mensagens que deveria. Numa rede com f-cobertura bizantina, pelo menos dois (f + 1) dos processos vizinhos a p 1, neste caso p 2 e p 3, serão corretos e divulgarão uma suspeita de falha S para os seus respectivos vizinhos. Qualquer processo correto da rede, por exemplo, p 10, terá pelo menos um caminho para p 2 (p 10p 9 p 5p 2) e p 3 (p 10p 3) formado apenas por processos corretos, recebendo pelo menos duas (f +1) ocorrências de S, adotando portanto a suspeita. Seja p i um processo suspeito de não ter enviado uma mensagem m. Se em algum momento um processo correto p j receber m de p i, p j declarará um equívoco (mistake) sobre a suspeita e difundirá a mensagem m aos demais, a fim de que façam o mesmo. Na Figura 3, um processo lento p 1, sobre o qual foi levantada uma suspeita, envia a mensagem requerida m (representada pelo envelope) a um processo correto p 2. Numa rede com f cobertura bizantina, haverá pelo menos um

4 caminho formado apenas por processos corretos de cada processo correto até p 2. Por exemplo, para p 10, temos o caminho p 2p 5 p 9p 10. Logo p 10 (e qualquer outro processo correto) receberá m e poderá retirar sua suspeita correspondente. `argumento hexágono". Este algoritmo é utilizado para várias situações sempre que existe um nó que envia mensagens defeituosas para diferentes partes do sistema, em que parece indistinguível de uma situação simétrica na qual os papéis corretos e defeituosos são invertidos. O problema Acordo bizantino e suas soluções tornaramse a marca registrada dos sistemas tolerantes a falhas. A maioria dos sistemas construídos com redundância fazem uso dele internamente para replicação e para a coordenação de processos. VII. STATE MACHINE REPLICATION Figura 3 Geração de equívoco no protocolo proposto (f=1) VI. ACORDO BIZANTINO Supõe-se frequentemente que quando um componente falha ele irá comportar-se de uma maneira bem definida, apesar deste comportamento ser diferente do comportamento normal esperado. Entretanto, normalmente quando um componente falha ele se comporta de maneira totalmente arbitrária. O problema de alcançar um entendimento entre os componentes de um sistema distribuído, onde eles podem falhar de maneira arbitrária, é chamado de Problemas Gerais Bizantinos. Os protocolos usados para se atingir este entendimento são chamados de Protocolos de Acordo Bizantino. Falhas bizantinas analisam as faltas que podem acontecer num sistema. Mas como evitar essas faltas? Uma formulação abstrata do problema é utilizar a coordenação entre processos para despistar as falhas bizantinas; isto é conhecido como o problema do "Acordo bizantino". Esta formulação consiste em estabelecer o controlo na coordenação dos processos de maneira a estabelecer um acordo para um bit individual, começando com entradas potencialmente diferentes bits para cada componente. Depois de ter um acordo sobre um único bit, é possível utilizá-lo várias vezes, a fim de manter todo um sistema complexo coordenado. Para formar um acordo sobre um único bit para lidar com uma avaria são necessários quatro computadores. Três não são suficientes, porque com três unidades, uma unidade defeituosa pode enviar valores em conflito para as outras duas unidades, e formam uma maioria diferente com cada um. Geralmente, 3F + 1 unidades são necessárias a fim de superar F simultaneamente componentes defeituosos. Para provar isso, usa-se um argumento de simetria que ficou conhecido como o Esta foi talvez a mais significativa de muitas contribuições de Lamport para os sistemas distribuídos, foi introduzido no famoso papel no tempo, relógios, e a ordenação de eventos em um sistema distribuído, e desenvolvido logo depois. Lamport percebeu que as tarefas difíceis de replicar um serviço durante vários computadores podem ser feitas notavelmente simples se você apresentar a mesma sequência de comandos de entrada para todas as réplicas e eles passam através de uma sucessão de estados idênticos. O SMR (state machine replication) é um método geral para a implementação de um serviço tolerante a falhas, replicando servidores e coordenando as interações dos clientes com réplicas do servidor. Muitos serviços atuais têm disponibilidade e os requisitos de desempenho muito rigoroso. Essa alta disponibilidade implica na tolerância de falhas em componentes e é normalmente realizado com replicação. Para muitos serviços, alta performance significa, essencialmente, a capacidade de servir uma carga muito grande, algo que pode ser alcançado se o serviço pode escalar rendimento com o número de réplicas. O SMR é uma técnica bem conhecida para fornecer tolerância a falhas sem sacrificar a consistência. SMR regulamenta a forma como os comandos dos clientes são propagadas e executado pelas réplicas, cada réplica que não é defeituoso deve receber e executar todos os comandos na mesma ordem.

5 VIII. CONCLUSÃO Um sistema distribuído é constituído por processos que cooperam de forma a atingirem um objectivo comum. O facto de um sistema distribuído, deste tipo, ser constituído por diferentes processos, normalmente ligados em rede, leva a que possam acontecer erros em vários pontos e por diferentes motivos, provocando respostas igualmente diferentes. A segurança nas comunicações entre sistemas é um ponto muito importante em qualquer sistema ligado em rede. Desta forma é importante saber em que pontos desse sistema podem acontecer esses erros e ter estratégias para os combater e os evitar. As falhas bizantinas são difíceis de detectar por serem arbitrários. São das que podem ter consequências piores por ser difícil de prever que parte do sistema podem atingir e quando. A tolerância a falhas permite aumentar a qualidade de um sistema computacional. Apesar da tolerância a falhas não garantir comportamento correto na presença de todo e qualquer tipo de falha e apesar das técnicas empregadas envolverem algum grau de redundância e, portanto, tornarem os sistemas maiores e mais caros, ela permite alcançar a confiabilidade para os sistemas computacionais. REFERÊNCIAS 1. Lesley Lamport, My Writings, em http://research.microsoft.com/enus/um/people/lamport/pubs/pubs.html 2. Dahlia Malkhi, Leslei Lamport em http://amturing.acm.org/award_winners/lamport_1205376.cfm 3. Byzantine Agreement em http://www.ime.usp.br/