Tolerância a Falhas Carlos Oberdan Rolim Ciência da Computação Conteúdo Conceitos básicos de segurança de funcionamento (dependabilidade). Aplicações de tolerância a falhas. Técnicas para incremento de confiabilidade e disponibilidade. Identificação e seleção de técnicas de projeto tolerante a falhas. Tolerância a falhas em sistemas distribuídos e arquiteturas paralelas. Medidas e ferramentas para avaliação e simulação de sistemas tolerantes a falhas. Arquiteturas de sistemas tolerantes a falhas. Bibliografia Pradhan, D. K. “Fault-Tolerant System Design”. Englewood Cliffs:Prentice Hall, 1996. SIEWIOREK and SWARZ. “Reliable Computer Systems: Design and Evaluation”. Second Edition. Digital Press, 1992. JALOTE, P. “Fault Tolerance in Distribuited Systems”. Prentice-Hall. Englewood Cliffs, New Jersey, 1994. ANDERSON, T and LEE. P.A. *Fault Tolerance - Principles and Practice*. Second Edition. Springer-Verlag, 1990. Mullender, S. “Distributed Systems”. New York: AddisonWesley, 1993. Introdução Uso do computador diariamente em diversas atividades Sistemas robustos em relação a falhas eram preocupação exclusiva de projetistas de sistemas críticos Falhas são inevitáveis, mas as conseqüências das falhas, ou seja o colapso do sistema, a interrupção no fornecimento do serviço e a perda de dados, podem ser evitadas pelo uso adequado de técnicas viáveis e de fácil compreensão Para desenvolvedores de software, projetistas de hardware e gerentes de rede o domínio das técnicas de tolerância a falhas torna essencial na seleção de tecnologias, na especificação de sistemas e na incorporação de novas funcionalidades aos seus projetos Introdução Problemas com sistemas de computação Necessidade de confiabilidade e disponibilidade Complexidade dos projetos necessidade não somente de hardwares confiáveis mas também de softwares Desafios: Como evitar, detectar e contornar bugs no projeto de hardware e software? Como gerenciar a altíssima complexidade dos sistemas atuais de computação construídos com dezenas de chips de milhões de transistores e com software de centenas de milhares de linhas de código? Como explorar paralelismo para aumentar o desempenho sem comprometer a qualidade dos resultados mesmo em caso de falha de um ou mais componentes do sistema? Introdução Desafios: Como aproveitar novas tecnologias mais rápidas, baratas e eficientes (mas ainda não totalmente provadas e testadas) sem saber ainda seu comportamento em situações inesperadas sob falha ou sobrecarga? Como aproveitar, para aplicações críticas e para operação em tempo real, o modelo de sistemas distribuídos construídos sobre plataformas não confiáveis de redes, contornando os problemas de perdas de mensagens, particionamento de rede e intrusão de hackers? Como desenvolver computadores móveis e sistemas embarcados, garantindo confiabilidade e segurança nesses dispositivos, e assegurando simultaneamente baixo consumo de potência, sem recorrer as técnicas usuais de replicação de componentes que aumentam peso e volume? Como conciliar alta confiabilidade e alta disponibilidade com as crescentes demandas por alto desempenho? Problemas com sistemas de computação Conceitos não consolidados Painéis e discussões a respeito de nomenclatura comum para a área Conceitos e Termologia Falha (fault): Causa Física ou algorítmica do erro; Erro: O sistema está em estado errôneo, se o processamento posterior a este estado levar a um defeito; Defeito (failure): Desvio da especificação; não podem ser tolerados, mas deve ser evitado que o sistema apresente defeito Interessante observar que uma falha não necessariamente leva a um erro (porção da memória pode nunca ser usada) e um erro não necessariamente conduz a um defeito (a informação de vôo lotado poderia eventualmente ser obtida a partir de outros dados redundantes da estrutura) Conceitos e Termologia