Dependabilidade
Da necessidade de se poder depender de um sistema, surge a ideia de dependabilidade, isto é, de um sistema ter a propriedade de se poder depender do mesmo.
Um pouco mais formalmente, dizemos que um componente \(C\) depende de um componente \(C'\) se a corretude do comportamento de \(C\) depende da corretude do componente \(C'\) e dizemos também que um componente é "dependável" (dependable) na medida em que outros podem depender dele. A dependabilidade é essencial aos componentes de sistemas distribuídos, pois como diz o ditado, uma corrente é tão forte quanto seu elo mais fraco.
Esta propriedade por ser dividida em outras propriedades mais "simples":1
- Disponibilidade (Availability) - Prontidão para uso.
- Confiabilidade/Fiabilidade (Reliability) - Continuidade do serviço.
- Segurança (Safety) - Tolerância a catástrofes.
- Integridade (Integrity) - Tolerância a modificações.
- Manutenabilidade (Maintainability) - Facilidade de reparo.
Disponibilidade
A disponibilidade (em inglês, availability) especifica o quão pronto para uso o sistema está.
Disponibilidade
The term 'availability' means ensuring timely and reliable access to and use of information.
NIST SP 800-59, no termo Availability 44 U.S.C., Sec. 3542 (b)(1)(C))
Na prática, esta medida é dada como a percentagem de tempo que o sistema está disponível para uso e, embora qualquer percentagem seja válida, normalmente se usa valores muito próximos a 100% e descritos em termos de "noves". Por exemplo, três 9 quer disponibilidade de 99,9% e cinco 9 quer dizer 99,999%. A seguinte tabela resume o que significa na práticas os valores mais comuns de disponibilidade:2
Disponibilidade
A porcentagem do tempo que infraestrutura, sistema ou solução está operacional sob circunstâncias normais ou a probabilidade do sistema estar operacional em um certo instante.
Disponibilidade (%) | "noves" | downtime anual | downtime mensal | downtime semanal |
---|---|---|---|---|
90 | 1 | 36,5 dias | 72 horas | 16,8 horas |
99 | 2 | 3,65 dias | 7,2 horas | 1,68 horas |
99,9 | 3 | 8,76 horas | 43,8 minutos | 10.1 minutos |
99,99 | 4 | 52,56 minutos | 4,38 minutos | 1,01 minutos |
99,999 | 5 | 5,26 minutos | 25,9 segundos | 6,06 segundos |
99,9999 | 6 | 31,5 segundos | 2,59 segundos | 0,605 segundos |
99,99999 | 7 | 3,15 segundos | 0,259 segundos | 0,0605 segundos |
Apesar da precisão dos valores, o que exatamente esta disponibilidade significa é variável. Se você contratar algum serviço na nuvem, por exemplo, o fornecedor pode garantir 99,99% de disponibilidade, mas especificar que o serviço é considerado disponível desde que 80% das requisições sejam atendidas em menos de 1s. Os detalhes do que exatamente é considerado são especificados em um acordo de nível de serviço, ou SLA (do inglês, service level agreement).3 O valor final da disponibilidade é dado pela seguinte fórmula, onde
- Tempo de disponibilidade acordado é o tempo que o serviço deve ficar no ar, de acordo com a SLA; e,
- Tempo de indisponibilidade é o tempo que o serviço ficou fora do ar.
Confiabilidade
A confiabilidade é uma métrica frequentemente confundida com a disponibilidade, mas enquanto esta última mede a prontidão para uso em algum instante, a primeira mede a prontidão para uso por um período, tal que durante tal período o sistema não precise cessar o funcionamento e mantenha um nível de desempenho previamente acordado.
Para se falar em confiabilidade é necessário pensar em termos de falhas, da frequência com que acontecem e dos atrasos que causam. Mais adiante discutiremos falhas no contexto de sistemas distribuídos, mas por enquanto podemos pensar em falhas simplesmente como manifestações de problemas do sistema que o impede de executar as operações para as quais foi construído; se seu sistema é uma lâmpada, então um defeito pode ser a lâmpada queimar ou emitir menos luz do que o necessário. Com esta visão de falhas, podemos definir quatro métricas
- Tempo médio para falha, MTTF (do inglês, mean time to failure) é a expectativa de quanto tempo resta até que o sistema apresente o próximo defeito (relevante);
- Tempo médio para diagnóstico, MTTD (do inglês, mean time to diagnose), é a expectativa de quanto tempo leva perceber que o sistema apresentou um defeito e iniciar sua correção;
- Tempo médio para reparo, MTTR (do inglês, mean time to repair) é a expectativa de quanto tempo leva para corrigir o sistema e retorná-lo ao estado funcional, uma vez que o defeito foi percebido
- Tempo médio entre falhas, MTBF (do inglês, mean time between failures) é a expectativa de quanto tempo transcorre entre falhas.
A frequência de falhas de um único componente é dada por \(\lambda = \frac{1}{MTBF}\) e, dada a taxa de falhas de um componente, é possível calcular sua confiabilidade em um certo instante \(t\) como \(R(t) = e^{-\lambda t}\). Calcular estas métricas para sistemas com múltiplos componentes, como um sistema distribuído, é possível mas requer uma imersão em probabilidade condicional.
Manutenabilidde
Manutenabilidade é uma medida da expectativa do quão rápido um sistema é reparado uma vez identificado sua falha. Uma manutenabilidade de 95% para 1 hora implica que com 95% de probabilidade chance o sistema voltará a estar funcional dentro de 1 hora. A manutenabilidade está intimamente ligada ao tempo médio de reparo (MTTR), mencionado acima.
Segurança (Safety)
TODO
Integridade
TODO
Segurança (Security)
Além da dependabilidade, outra propriedade importante e desejável para os sistemas é a Confidencialidade, que quando combinada à Integridade é também chamada de Segurança (Security).
- Confidencialidade (Confidentiality) - informação somente é acessível a quem é devido.
- Integridade (Integrity) - Ausência de corrupções.
Cálculo da Dependabilidade
A dependabilidade é facilmente definida mas não facilmente calculada. Simplifiquemos o problema e consideremos um único computador, muito mais simples que um sistema distribuído. O quanto você pode confiar neste computador para desempenhar suas tarefas? Este computador tem memórias, CPU, barramentos, discos, etc. Cada um falha independentemente e por isso a dependabilidade do computador é uma combinação da dependabilidade de todos os componentes do mesmo.
Simplifiquemos mais ainda e consideremos apenas um tipo de componente, por exemplo um chip de memória. Consideremos também apenas a confiabilidade, uma das componentes da dependabilidade. Digamos que experimentos foram feitos em chips individuais e que assim se determinou que cada chip tem uma confiabilidade de 99%. Wow! Agora suponha que os chips foram organizados em série, isto é, que para que os dados de um chip sejam acessíveis e manipuláveis, os dados de todos os outros também devem estar acessíveis e manipuláveis. A probabilidade do sistema estar funcionando é a probabilidade de o primeiro da série estar funcionando, e o segundo da série estar funcionando, e o terceiro da série..., bem, você entendeu a ideia. Assim, se a sua configuração tem 10 chips, então a confiabilidade do conjunto é de \(0,99^{10} = 0,9034\). Se fossem 20 chips, a confiabilidade seria de \(0,99^{10} = 0,81\).
Se os componentes estivessem ligados em paralelo, ou seja, propiciando formas redundantes de uso, o cálculo seria diferente. Neste caso, a probabilidade do sistema não estar funcional seria a probabilidade de nenhum deles estar funcional; dado que um componente não está funcional com probabilidade \(1-0,99 = 0,01\), todos não estariam funcionais com probabilidade \(0,01* 0,01 * 0,01 \ldots\). Já a probabilidade do sistema estar funcional, sua confiabilidade, é de 1 menos a probabilidade de não estar funcional, isto é, \(1 - (0,01*0,01*0,01\ldots)\). Se forem 4 componentes, temos \(1 - 0,01^4 = 0,9999999\).
Por isso, não basta ter dispositivos individualmente confiáveis; a forma como os mesmos são combinados tem um grande impacto no resultado final.
Embora seja óbvio que quanto mais redundância (caminhos paralelos) tivermos no sistema, maior será a confiabilidade, o que pode lhe induzir a querer aumentar a redundância, lembre-se de que redundância tem um custo, e este custo pode chegar a ser maior que o benefício que esta redundância lhe trará.
-
Basic Concepts and Taxonomy of Dependable and Secure Computing. ↩
-
A SLA especifica, por exemplo, como a qualidade do serviço é medida, qual o nível de serviço almejado (SLO, do inglês, service level objetive), e penalidades caso o SLO não seja alcançado. ↩