• Nenhum resultado encontrado

1.1 Objetivos, contribuições e estrutura da tese

2.1.1 Do modelo de falhas

Sistemas computacionais são compostos por componentes, os quais podem desviar do com- portamento especificado. Se um componente do sistema desvia do comportamento especifi- cado, têm-se uma falha do sistema computacional. A falha pode implicar em alteração do estado do sistema, ocasionando o erro. O erro pode ocasionar um defeito, ou seja o serviço pro- vido pelo sistema computacional apresenta resultado diferente do comportamento especificado. O defeito de um sistema computacional pode ser visto como uma falha de um outro sistema que o utilize como componente. Os termos falha, erro e defeito, ora descritos são a tradução da nomenclatura respectiva fault, error e failure, apresentada em [21]. Por exemplo, suponha na execução de um programa em um sistema computacional, a ocorrência de uma falha em uma placa de memória pode implicar no erro de leitura do valor de uma dada variável no programa, e este erro no cálculo de um resultado incorreto da computação (defeito).

As hipóteses de falhas de componentes, processos e canais, são importantes para caracte- rizar a execução do sistema distribuído e desenvolver mecanismos de tolerância a falhas. Tais hipóteses são determinadas por meio do modelo de falhas. Ao prover serviços computacionais por meio de um sistema distribuído, tais serviços podem ser desenhados de modo a prevenir ou tolerar falhas – utilizando, por exemplo, replicação de processos–, de modo a assegurar a execução dos serviços mesmo na presença de até um dado subconjunto de componentes falhos

3O termo churn descreve o fenômeno de rotatividade de processos no sistema, i.e. chegada e saída de processos do conjunto de processos do sistema. Em condições de churn, um algoritmo distribuído deve ser projetado de forma distinta de cenários com um conjunto fixo de processos [20].

(processos ou canais de comunicação).

Um processo correto pi– ou seja, que não falha ao longo da execução – executa um algo-

ritmo pré-determinado em função da ocorrência do histórico de eventos Hi. Um canal bidire-

cional (pi, pj) correto, também dito confiável, permite que o evento sendi(m) ∈ Hi de envio de

uma mensagem m no tempo global t1 em pi, se reflita no evento receivej(m) ∈ Hj de recebi-

mento de uma mensagem m no tempo global t2> t1em pj. O modelo de falhas associado a um

componente do sistema distribuído DS define as hipóteses em que e como o componente pode desviar da especificação correta ao longo da execução.

Em sistemas reais, processos podem falhar de diferentes modos. A forma como é equipada a infraestrutura subjacente para execução dos processos, como, por exemplo, nós processadores, sistema operacional, conjunto de APIs etc., e a infraestrutura subjacente de comunicação, como, por exemplo, rede de computadores, define quão fortes são as hipóteses sobre a robustez do sistema à ocorrência de falhas em processos e canais de comunicação.

Dentre as hipóteses de falhas de processos da literatura destacamos as falhas arbitrárias, relacionadas a execução deliberada fora da especificação do algoritmo. Por exemplo, um pro- cesso comprometido, ou executando sobre um sistema operacional comprometido por um ata- cante malicioso, pode prejudicar a execução do algoritmo – como, por exemplo, ao parar sua execução ou alterar mensagens enviadas ou recebidas. A leitura incorreta de uma variável de memória também pode ocasionar resultados inesperados ao longo da execução do algoritmo. Falhas arbitrárias são também conhecidas como falhas bizantinas em referência ao problema apresentado em [22].

Podemos equipar a infraestrutura subjacente, protegendo o ambiente de comprometimento de segurança e de falhas de hardware, como por exemplo, utilizando paridade no subsistema de memória. Desta forma, pode-se reduzir substancialmente a vulnerabilidade do sistema a um conjunto de falhas, tornando mais fortes as hipóteses do modelo. Ainda assim, este ambiente pode estar sujeito à parada de execução, devido, por exemplo, a queda de energia elétrica ou ao defeito do sistema operacional em face a uma falha não recuperável. A não execução do próximo passo computacional é dita omissão e quando o sistema falha por omissão sem se recuperar, temos a chamada falha por colapso (crash). Se for possível o reinício do componente defeituoso e que o processo continue sua execução após o reinício em um ponto de execução anterior ao do colapso, o modelo de falhas é dito crash-recovery.

Os algoritmos apresentados nesta tese poderão fazer referência às hipóteses de falhas de processos associadas aos modelos de falhas por crash, omissão, crash-recovery e bizantino. Em geral, os algoritmos assumem condição de execução tolerando um dado número k de processos falhos de acordo com o modelo.

Canais de comunicação podem também falhar de forma arbitrária ou bizantina: mensagens podem ser perdidas ao longo da rede ou a infraestrutura subjacente de comunicação pode ser comprometida. Por exemplo, se um nó de roteamento intermediário for comprometido, mensa- gens podem ser alteradas ao serem roteadas, ou mesmo descartadas deliberadamente, ou ainda

2.1 DOS MODELOS DE SISTEMAS DISTRIBUÍDOS 11 criadas mensagens em nome de um processo pertencente à computação distribuída. Se utilizar- mos mecanismos de segurança como assinatura digital e estabelecimento de criptografia fim-a- fim na comunicação entre processos, ainda assim, é possível que mensagens sejam descartadas, em face, por exemplo, do congestionamento dos nós roteadores intermediários. Assim, canais de comunicação podem falhar por omissão.

Mecanismos de verificação fim-a-fim com retransmissão podem ser empregados, e os canais podem ser quasi-confiáveis [23]: se os processos do canal mantém-se corretos, mesmo em face à omissão, a mensagem será retransmitida pelo remetente o quanto for necessário e será recebida a termo pelo destinatário. Podemos ainda assumir que se os canais forem quasi-confiáveis, eles simulam o comportamento de canais confiáveis, onde a eventual falha do canal é reproduzida como falha do processo remetente ou destinatário imediatamente antes do envio ou da recepção da mensagem. Canais quasi-confiáveis são implementáveis sobre canais fair-lossy por meio de retransmissão de mensagens [24]. Um canal de comunicação fair-lossy não cria ou duplica mensagens e assume que se um processo p enviar um infinito número de mensagens ao processo q, o mesmo receberá um infinito número de mensagens de p.

Os algoritmos apresentados na tese podem fazer referência às hipóteses de falhas de canais associadas aos modelos bizantino, por omissão, e (quasi-)confiáveis.