Disponibilidade, tolerância a falhas e resiliência Conceitos básicos Falha x erro x defeito • Falha: Ocorre quando o comportamento de um elemento se desvia do especificado. Pode ocorrer em relação ao hardware ou software. Exemplo: Erro em um dos HDs de um RAID 1 (espelhamento de dados). • Erro: É um estado ocasionado por uma falha. Pode ser detectado e tratado, por ser mais previsível que a falha. Exemplo: Devido a uma falha na memória, ao invés de gravar 00000000 foi gravado 11111111. • Defeito: Quando o usuário final do serviço é afetado. Geralmente temos a queda parcial ou total do serviço, ou “travamentos”, perda de informações, etc. Falha x erro x defeito – cont. FALHA ERRO DEFEITO MTBF e MTTR • MTBF (mean time between failures): Tempo médio entre falhas. • MTTR (mean time to repair): Tempo médio para reparar / de recuperação. Disponibilidade • Disponibilidade (availability): Tempo que um serviço ficará disponível sem a ocorrência de falhas. • Cálculo da disponibilidade Disponibilidade = MTBF / (MTBF + MTTR) • Alta disponibilidade ≥ 99.999 Obs.: Em um ano ± 5 minutos de indisponibilidade Disponibilidade – cont. • Podemos usar o modo de porcentagem ou de defeitos por milhão (defects-per-million), ou realizar a conversão entre os modos. • No modo de porcentagem a forma de expressar os dados pode ser 0.999... ou 99.9... • Exemplo: Se um roteador tem 200 defeitos a cada milhão de horas, então o MTBF é 5.000 horas. Conhecendo o MTTR teremos a conversão para o modo de porcentagem. • Obs.: O MTTR geralmente será estipulado em algum contrato de prestação de serviço ou assistência técnica. Componentes seriais e paralelos • Seriais: Todos os componentes precisam funcionar. Se um possui uma falha, então toda a rede falha. O valor final da disponibilidade do sistema sempre será menor que qualquer um dos seus componentes. A1 A2 Exemplo: Com dois componentes com disponibilidade de 0.995, temos 0.995 x 0.995 = 0.990. Componentes seriais e paralelos • Paralelo: A rede continua funcionando, se ao menos um dos componentes continua a funcionar. Para calcular a probabilidade da falha do componente é preciso subtrair a disponibilidade do valor um. A1 A2 Componentes seriais e paralelos Exemplo: Dois componentes paralelos com disponibilidade de 0.0995, temos [ 1 – (1 – 0.995) x (1 – 0.995) ] = 0.999975. A1 A2 Obs.: O uso de componentes redundantes em sistemas paralelos é o que o faz aumentar disponibilidade. Tolerância a falhas • Tolerância a falhas (fault tolerance): Forma de mascarar um defeito utilizando redundância de um ou mais componentes. • Após a detectar o problema com o componente é necessário confinar os danos e diagnosticar o ocorrido, realizar a recuperação do erro e por último reparar o defeito. Técnicas de tolerância a falhas • Redundância N-modular: Utilização de N componentes, onde é realizada uma votação e a partir da maior quantidade de votos será gerada a saída da solicitação. Exemplo: Utilização de 3 soluções de roteamento (Quagga, Bird, Xorp) para prover tolerância a falhas relacionadas a bugs em softwares de roteamento (ambientes virtualizados). Técnicas de tolerância a falhas – cont. • Probe packets e self-checking: Envio de dados prédefinidos para que possa ser avaliado o funcionamento correto de um ou mais componentes. Exemplo: Checagem de disponibilidade (e/ou erros) de um enlace ou estimativa de largura de banda. Técnicas de tolerância a falhas – cont. • Hot‐sparing: Mais de um componente ativo, porém apenas um ou um segmento é o “principal”. Com a falha, outro assume o controle. Exemplo: Redundância de servidor LDAP, banco de dados distribuído MongoDB, utilização de técnica de DRBD para dados em geral, etc. Dependability • Capacidade de fornecer um serviço razoavelmente confiável, evitando falhas frequentes. • São meios para garantir a “dependability”: – – – – prevenção de falhas tolerância a falhas remoção de falhas previsão de falhas Resiliência • Definição 1: Persistência da “dependability” quando ocorrem mudanças. A resiliência é uma evolução do termo “dependability”. • Definição 2: Resiliência em redes é a habilidade de uma entidade de tolerar (resistir e automaticamente se recuperar de) desafios nas condições da rede, ataques coordenados e anomalias no tráfego. Resiliência – cont. • Exemplo: Para garantir a resiliência de um slice de rede, podemos virtualizar parcialmente os componentes, como os mecanismos de roteamento, e utilizar redundância ativa, onde um slice protegerá o outro, em caso de falhas. A utilização de esquemas de migração de máquinas virtuais, com alguma técnica de pré-cópia também pode ser utilizada para aumentar a disponibilidade do serviço. Referências • Fault tolerance in distributed systems – Pankaj Jalote • Increasing Router Availability through Virtualization – Sergio Correia, Omar Cherkaoui, Joaquim Celestino Junior • From Dependability to Resilience – Jean-Claude Laprie • High Availability Network Fundamentals: A Practical Guide to Predicting Network Availability – Christopher Oggerino • Wireless Mesh Networking – George Angelou