• Nenhum resultado encontrado

2.2 Mecanismos de tolerância a falhas

2.2.2 RAID e erasure codes

Até aqui foram estudadas várias abordagens no que diz respeito ao correto funciona- mento do sistema perante a ocorrência de falhas bizantinas. O sistema foi visto como um conjunto de nós servidores que são responsáveis pelo processamento dos pedidos, por parte dos clientes, e os dados são mantidos de forma replicada ao longo dos mes- mos. Como se verificou, a problemática consiste em manter a consistência entre os vários objetos replicados, bem como o estado dos mesmos, sem que a performance seja significa- tivamente afetada. Nesta secção pretende-se introduzir o conceito deRAID[CLGKP93], nomeadamente o RAID 5 e RAID 6 e de que forma estes poderiam ser aplicados ao sis- tema a desenvolver.

ORAIDconsiste em associar um conjunto de dispositivos de armazenamento (regra geral, discos rígidos) a um único dispositivo lógico, ou seja, é criado um disco lógico através da utilização conjunta de dois ou mais discos, como se de um só se tratasse. Esta forma de armazenamento trás benefícios a nível de segurança dos dados, devido à re- dundância, e ao nível de performance. Existem dois conceitos importantes, que são o de

9http://searchsoftwarequality.techtarget.com/definition/denial-of-service ace-

stripinge redundancy. Striping consiste em distribuir os dados pelos vários discos, dando a ideia de um único disco bastante rápido e de elevada capacidade. O aumento da per- formance é notório, principalmente em escritas, pois os discos são acedidos em paralelo e não é introduzida redundância. Já o conceito de redundancy introduz redundância a nível dos dados armazenados. A performance poderá ser inferior, pois uma escrita implica a introdução de redundância que tanto pode ser a nível de replicação dos dados por inteiro ou o uso de erasure codes10. Posto isto, existem várias formas de organizar os discos em

RAID, com diferentes combinações que favorecem uma ou outra propriedade (striping e redundancy).

O RAID 5 faz uso de bits de paridade, introduzindo redundância nos dados, de modo a permitir que os mesmos possam ser recuperados face a uma falha num dos discos. O que distingue o RAID 5 do RAID 4 é o facto de a informação acerca da paridade dos dados se encontrar distribuída ao longo dos vários discos que constituem o array (Figura

2.1111), em vez de armazenada num disco dedicado. Esta distribuição permite oferecer

um maior desempenho relativamente ao RAID 3 e RAID 4 (estes têm um único disco dedicado à paridade), bem como capacidade para tolerância a falhas, não introduzindo assim um ponto único de falha. Os dados de paridade são distribuídos pelos vários dis- cos, permitindo assim que todos participem nas operações de escrita. Comparativamente aos mencionados acima, este modo oferece a melhor performance a nível de leituras e a nível de escritas de grandes volumes de dados.

RAID 5 Dp C1 B1 A1 Disk 0 D1 Cp B2 A2 Disk 1 D2 C2 Bp A3 Disk 2 D3 C3 B3 Ap Disk 3

Figura 2.11: Array de discos em RAID 5

O RAID 6 (Figura 2.1212) é, em muito, semelhante ao RAID 5. A grande diferença

está no uso do dobro dos bits de paridade, permitindo assim que dois discos do array possam falhar simultaneamente e os dados possam ser recuperados na mesma. Como desvantagens está a necessidade de reservar um maior volume de armazenamento para a paridade, bem como a maior lentidão verificada nas escritas.

Tanto o RAID 5 como o RAID 6 poderiam ser implementados num sistema como o

10http://www.networkcomputing.com/deduplication/229500204acedido a 03-02-2012 11http://upload.wikimedia.org/wikipedia/commons/6/64/RAID_5.svg acedido a 06-03-

2012

12http://upload.wikimedia.org/wikipedia/commons/7/70/RAID_6.svg acedido a 06-03-

2. TRABALHO RELACIONADO 2.2. Mecanismos de tolerância a falhas RAID 6 Dp C1 B1 A1 Disk 0 Dq Cp B2 A2 Disk 1 D1 Cq Bp A3 Disk 2 D2 C2 Bq Ap Disk 3 D3 C3 B3 Aq Disk 4 Eq E1 E2 E3 Ep

Figura 2.12: Array de discos em RAID 6

que se pretende desenvolver, assumindo as clouds de armazenamento como sendo dis- cos rígidos. A grande vantagem está no uso de erasure codes. O RAID 6, que usa códi- gos Reed–Solomon [Ree], garante a integridade/recuperação dos dados caso dois discos falhem ao mesmo tempo. A utilização de RAID 6 com as técnicas de erasure codes asso- ciadas pode representar uma mais valia no sentido em que a recuperação dos dados não pressupõe a falha de um disco apenas.

2.2.3 Discussão

Para suporte de tolerância a falhas bizantinas em ambientes assíncronos com conse- quente recuperação do estado normal do sistema, várias abordagens foram revistas. Fo- ram estudadas soluções baseadas em replicação bizantina e soluções de armazenamento com interfaceRAID(RAID 5) ou baseadas em soluções com erasure codes (RAID 6).

No caso de sistemas de replicação bizantina, apresentaram-se soluções orientadas a máquinas de estados, com uma réplica primária coordenadora, como PBFT [CL99], Zyzzyva [KADCW07] e BFT-SMaRt[Bft]. São ainda discutidas soluções baseadas em quó- rum bizantino, como o Query/Update [AEMGGRW05] e o Upright [CKLWADR09], bem como soluções híbridas como HQ replication [CMLRS06].

O algoritmo Paxos por si só seria insuficiente para lidar com o problema da tolerância a falhas bizantinas. Foi apresentado como uma solução interessante no contexto e intro- dução a esta problemática tendo em conta que representa, em parte, o protocolo usado nos algoritmos de tolerância a falhas bizantinas, nomeadamente, o consenso e ordenação das operações efetuadas, bem como a replicação dos dados.

A biblioteca BFT-SMaRt apresenta-se como uma solução promissora a integrar no sistema a desenvolver, tendo em conta os objetivos para a qual foi desenhada e desen- volvida. É de fácil integração e permite ultrapassar os obstáculos que o sistema a desen- volver poderia apresentar a este nível. As razões pela qual seria interessante o uso desta biblioteca são em grande parte idênticas às apresentadas pelos autores no próprio artigo DepSky [BCQAS11]. Por um lado, visto estarmos a lidar com clouds cuja funcionalidade remete apenas para o armazenamento, o protocolo não está dependente da execução de código por parte dos servidores. Para além disso, muitos fornecedores de clouds não ofe- recem garantias de consistência idênticas às de um disco, o que pode afetar o correto

funcionamento deste tipo de protocolos. Esta biblioteca prevê tais situações. Por fim, es- tando esta implementada na linguagem Java, tendo sido desenhada com o uso de clouds públicas de armazenamento de dados em vista, e tendo sido aplicada em diversos pro- jectos13apresenta-se como uma forte candidata a ser aplicada no sistema a desenvolver,

de modo a dotar o mesmo da capacidade de tolerância a falhas bizantinas.

No caso de sistemas orientados para armazenamento em RAID (RAID 5 ou RAID 6), tendo como benefício o uso de erasure codes, é possível diminuir o espaço de arma- zenamento necessário para garantir uma recuperação completa dos dados face a falhas. As soluções de armazenamento fiável com soluções RAID ou com uma perspetiva mais genérica de nível middleware, baseado em protocolos bizantinos, possuem características diversas. As primeiras permitem disponibilizar uma interface de escrita/leitura de da- dos com semântica equivalente às interfaces de escrita e leitura em arrays de discos. As soluções de middleware baseadas em sistemas bizantinos, são mais flexíveis para conceção de uma camada intermédia de acesso a dados armazenados em múltiplas clouds de arma- zenamento (do tipo "key-value store"). No entanto, é possível implementar uma interface de escrita e leitura de blocos com base numa especificação RAID 5 ou RAID 6, no topo de um sistema de middleware baseado em acordos bizantinos. Tal permite que diferentes cloudsde armazenamento sejam vistas como discos de um array de discos.