Artigos Técnicos

Análise de Subsistemas Avançados de Armazenamento

II – Componentes

3 – Esquemas de Proteção (RAIDs)

    O final dos anos 80 assistiu ao surgimento dos inicialmente conhecidos como “Redundant Array of Inexpensive Disks”, e que foram rapidamente renomeados para “Independent”, uma vez que os controles adicionais necessários a sua operação muito cedo os tornaram bem mais caros que em sua concepção original. Um documento do Berkeley Research de 1988 é ainda hoje considerado como o início da definição destas estruturas e compõe grande parte dos padrões conhecidos como “RAIDs Oficiais”, de acordo com o RAB – RAID Advisory Board.

    Projetados para substituir os que passaram a ser conhecidos como “SLEDs” ou “Single Large Expensive Disks” (e nos quais o termo “expensive” curiosamente não foi substituído), as matrizes de discos baratos propunham que um hardware mais barato, somado a algoritmos inteligentes de proteção poderiam prover os mesmos níveis de serviço e confiabilidade de seus irmãos maiores.

    A idéia era bastante simples. Discos mais baratos quebravam mais, eram mais lentos e bem menores que os “gigantes” 3380 e 3390 da época. Portanto, para torná-los equivalentes, usar-se-ia vários deles simultaneamente, com algum esquema de proteção de dados, e de forma que a soma permitisse a emulação das capacidades. É importante lembrar-se de que naquele período, enquanto os 3390 dispunham de 1, 2 e 3 GigaBytes de espaço, os pequenos HDs ainda eram medidos em MegaBytes, com um MTBF (“Mean Time Between Failures”) bastante reduzido.

    Os esquemas de proteção criados para estas matrizes tornaram-se (infelizmente) conhecidos como NÍVEIS de RAID. Infelizmente porque, o termo nível passa uma idéia de hierarquia, como se o RAID-4 fosse maior, mais completo, e de alguma forma superior aos RAIDs 1 ou 3, o que não poderia estar mais distante da verdade. Cada esquema RAID é diferente, não sendo maior, menor ou abrangendo as soluções de seu antecessor.

 

Níveis de RAID

 RAID-0 (Striping) : Não fazendo parte da definição original, o RAID-0 deveria omitir o “R” de sua definição, pois não apresenta qualquer forma de redundância. Simplesmente divide os dados entre os discos que compõe a matriz. Uma vez que não há esquemas de proteção, é o nível que apresenta o melhor desempenho entre todos, sendo também o de custo mais baixo, pois utiliza 100% do espaço disponível em disco para dados.

            Figura 7 : RAID-0

RAID-1 (Espelhamento) : Todos os dados são gravados em duplicidade, sendo cada cópia mantida em um disco físico diferente. Mais caro, pois utiliza somente 50% do espaço para dados (a outra metade destina-se somente à replicação). Em algumas implementações pode apresentar um desempenho melhor de leitura, pois se pode ler o mesmo dado de qualquer um dos dois discos envolvidos no espelhamento.

            Figura 8 : RAID-1

RAID-2 (Bit-Striping + Hamming ECC) : Os dados originais são divididos em nível de seus bits e espalhados entre a matriz de discos físicos. Adicionalmente, uma forma de ECC (“Error Checking and Correction”), chamada de Hamming, é calculada e gravada em discos adicionais. Esta forma de RAID foi há muito abandonada por uma serie de razões. A controladora necessária para sua implementação era muito complexa, a quantidade de discos era grande para a quantidade de dados suportada e, principalmente, porque os próprios discos físicos passaram a utilizar o ECC internamente, tornando-o redundante. Além disso, seu desempenho em ambientes transacionais mostrou-se inaceitavelmente inferior as outras implementações. Não é usado por nenhum dos subsistemas atuais.

RAID-3 (Byte-Striping + Paridade dedicada) : Nesta implementação, os dados são divididos em grupos de bytes (geralmente menores que 1024) e gravados nos discos de dados da matriz e, posteriormente, a paridade é gerada para esses mesmos dados, e gravada em um único disco dedicado a esta finalidade. De um modo geral, as implementações de RAID-3 e 4 são algo difíceis de distinguir.

            Figura 9 : RAID-3

 

RAID-4 (Block-Striping + Paridade dedicada) : Apresenta os mesmos mecanismos do RAID-3, com a única diferença notável ficando à cargo do tamanho dos blocos gravados em cada disco de dados (“stripe size”), geralmente maior que no anterior. Utiliza ainda o mesmo esquema de disco de paridade dedicado que, também como no último, pode resultar em um ponto de estrangulamento durante sua operação normal.

RAID-5 (Block-Striping + Paridade distribuida) : Esta forma implementa ainda a distribuição dos dados originais em blocos de dados através dos discos da matriz, porem, diferentemente das anteriores, o disco no qual a paridade é gravada não é mais dedicado. Neste caso, a paridade de cada grupo de dados é gravada em um disco diferente, evitando o engargalamento das anteriores.

            Figura 10 : RAID-5

 

RAID-6 (Block-Striping + Paridade dupla distribuida) : Bem semelhante ao RAID-5, esta distribuição implementa a geração de uma paridade adicional, o que permite a recuperação da perda de até dois discos físicos na matriz.

            Figura 11 : RAID-6

    O RAID-7 não é realmente uma implementação pública de RAID como as outras, mas um nome patenteado pela Storage Computer Corporation para sua implementação proprietária dos níveis 3 e 4.

 

    Além das implementações simples conforme descritas acima, já há algum tempo utiliza-se a combinação de níveis de RAID para formar o que é conhecido como multi-RAID ou RAID ANINHADO (“nested-RAID”). Estes níveis são formados pela combinação de 2 das implementações simples, sendo a mais utilizada nos ambientes MainFrame a chamada RAID 0+1 ou 0/1 ou 10 (padronizações eficazes e universalmente aceitas para este tipo de definição ainda estão longe de ser obtidas). Esta forma de combinação permite que se explore as vantagens de uma sem (todas) as desvantagens que ela possa apresentar, compensadas parcialmente pela segunda. No caso do RAID 0+1, a grande vantagem é o paralelismo apresentado pelo RAID-0, sem o risco de segurança causado pela falta de redundância. Veja a figura abaixo :

            Figura 12 : RAID 0+1

 

         Um ponto importante para se manter em mente em relação aos esquemas de proteção RAID é que eles alteram a quantidade de operações físicas realizadas para uma dada operação de HOST. Por exemplo, uma única gravação de bloco vinda do sistema, em uma implementação em RAID-0 pode, dependendo do stripe-size definido para a matriz, resultar em varias operações de disco. De forma análoga, uma gravação em RAID-5 resultaria em pelo menos 3 operações a mais que a original (5 para RAID-6). Mesmo quando todos os blocos de um grupo devem ser gravados, haverá pelo menos n+1 operações (sendo “n” o número de discos de dados da matriz, mais a operação de paridade). Este é um ponto a ser considerado quando se pensa no número total de operações que se deseja que um subsistema execute, ou quando se necessita de funcionalidades adicionais, como replicação de dados (remota ou local), que também acrescentam ao número total de operações realizadas pelos discos no final. Operações de leitura também são afetadas da mesma maneira. Tomando-se por exemplo a leitura de um bloco de 32KB pelo host, em uma matriz com stripe-size de 8KB, serão necessários 4 acessos a disco para completá-la. A vantagem do paralelismo nessa forma de operação depende da implementação do subsistema. Caso todos os discos de um grupo residam sob controle de uma única placa adaptadora, as 4 operações (deste exemplo) terão de ocorrer uma após a outra.

 

Paulo Sasaki HomePage Artigos 2 - Interfaces a disco 4 - Cache