Códigos de Eliminação no VMware vSAN versus Arrays de Armazenamento

A Importância da Codificação de Eliminação (Erasure Coding) na Disponibilidade de Dados
A disponibilidade de dados é uma competência central dos sistemas de storage empresariais. Por décadas, esses sistemas têm tentado oferecer altos níveis de disponibilidade de dados, garantindo, ao mesmo tempo, que as expectativas de desempenho e eficiência de espaço também sejam atendidas. Alcançar os três objetivos simultaneamente não é fácil. A erasure coding (codificação de eliminação) tem desempenhado um papel importante no armazenamento de dados de forma resiliente e, ao mesmo tempo, eficiente em termos de espaço.
Este artigo ajudará você a entender melhor como a erasure coding é implementada no VMware vSAN, como ela difere do que pode ser encontrado em storage arrays tradicionais e qual é a melhor forma de interpretar as capacidades de uma erasure code em relação à disponibilidade de dados.
O Propósito da Erasure Coding
A principal responsabilidade de qualquer sistema de storage é devolver o bit de dado que foi solicitado. Para garantir que possa fazer isso de forma confiável, os sistemas de storage devem armazenar esses dados de maneira resiliente.
Uma forma simples de resiliência de dados seria através do uso de múltiplas cópias, ou "mirrors" (espelhamentos), que ajudariam a manter a disponibilidade no caso de algum tipo de falha discreta no sistema de storage, como um disco em um storage array ou um host em um sistema de storage distribuído como o vSAN.
Um dos desafios dessa abordagem é que armazenar cópias completas dos dados se torna muito caro em termos de consumo de capacidade. Uma cópia adicional dobraria a quantidade de dados armazenados, enquanto duas cópias adicionais triplicariam a quantidade de dados armazenados.
As erasure codes são usadas para armazenar dados de forma resiliente, mas com muito mais eficiência de espaço em comparação com o espelhamento tradicional de dados. Elas não utilizam a abordagem de cópias. Em vez disso, espalham uma unidade de dados por múltiplos locais – onde cada local pode ser considerado um ponto de falha, como um disco ou, em um sistema distribuído como o vSAN, um host.
Os pedaços de dados criam uma "faixa" (stripe) juntamente com dados de paridade adicionais criados quando os dados são gravados inicialmente. Os dados de paridade são derivados de cálculos matemáticos. Se algum dos pedaços estiver faltando, o sistema pode ler os dados da porção disponível da stripe e realizar um cálculo com a paridade para preencher o buraco dos dados ausentes. Em seguida, ele pode satisfazer a solicitação de leitura original in-line ou reconstruir os dados ausentes em um novo local.
O tipo de erasure code determinará se ela pode tolerar a ausência de um único pedaço, dois pedaços ou mais, mantendo a disponibilidade dos dados.
Essas erasure codes oferecem economias substanciais de capacidade em comparação com as cópias espelhadas tradicionais de dados. A economia de espaço é determinada pelas características da erasure code, como quantas falhas ela foi projetada para tolerar e em quantos locais ela está distribuída.
As erasure codes vêm em todos os formatos e tamanhos. Elas são tipicamente identificadas pelo número de pedaços de dados (data chunks) e pelo número de pedaços de paridade (parity chunks). Por exemplo, a notação de 6+3 ou 6,3 significa que a stripe é composta por 6(k) pedaços de dados e 3(m) pedaços de paridade, totalizando 9(n) pedaços na stripe com paridade. Este tipo de erasure code poderia tolerar a falha de até três pedaços quaisquer, mantendo os dados disponíveis. Ela pode alcançar essa resiliência com um consumo adicional de 50% de capacidade.
No entanto, nem tudo é perfeito nesta abordagem para armazenar dados de forma resiliente. As operações de I/O podem se tornar mais complexas, onde uma única operação de gravação pode se traduzir em várias operações de leitura e gravação, conhecido como "amplificação de I/O" (I/O amplification). Isso pode retardar o processamento do storage, além de exigir mais recursos de CPU e mais largura de banda em qualquer tipo de resource bus.
Se implementadas corretamente, as erasure codes podem ser usadas para combinar resiliência com desempenho. Por exemplo, a arquitetura inovadora no ESA (vSAN Express Storage Architecture) desafia as penalidades comuns de desempenho das erasure codes, onde uma erasure code RAID-6 no ESA pode oferecer o mesmo ou melhor desempenho do que um mirror RAID-1.
Armazenamento de Dados no vSAN versus um Storage Array
Antes de compararmos as erasure codes no vSAN com o storage tradicional, faremos uma breve comparação de como o vSAN armazena dados em relação a um storage array tradicional.
Os storage arrays geralmente apresentam um grande pool de recursos de storage na forma de uma LUN. No contexto do vSphere, ela é formatada como um datastore com VMware Virtual Machine File System (VMFS), onde múltiplas VMs residirão. Comandos SCSI são passados das VMs através dos hosts vSphere e para o sistema de storage.
Este datastore formatado no storage array abrange um grande número de dispositivos de storage em seu enclosure, o que significa que há não apenas um grande limite lógico (um filesystem em cluster contendo várias VMs), mas também um grande limite físico (abrangendo múltiplos discos). Assim como muitos outros sistemas de arquivos convencionais, este filesystem em cluster deve permanecer intacto, com todos os metadados e dados prontamente disponíveis.
O vSAN adota uma abordagem muito diferente. Em vez de usar um filesystem clássico com um grande limite lógico de dados espalhados por todos os hosts, ele utiliza um pequeno limite lógico de dados para suas entidades. Exemplos incluem um VMDK de uma máquina virtual, um volume persistente para uso por um container ou um compartilhamento de arquivos fornecido pelos file services do vSAN. É isso que torna o vSAN análogo a um object store, embora seja um block storage usando semântica SCSI, ou semântica de arquivo no caso de compartilhamentos de arquivos.
[A Figura 1, mencionada no original, ilustraria o uso de um clustered file system em um storage array versus um object store no vSAN.]
Este tipo de abordagem prepara o vSAN para todos os tipos de vantagens técnicas em relação a um filesystem monolítico em cluster em um storage array. As erasure codes são aplicadas a objetos de forma independente e granular. Isso permite que os clientes projetem clusters vSAN da maneira que desejarem, seja um cluster padrão de site único, um cluster usando fault domains para rack-awareness ou stretched clusters. Também permite que o vSAN escale de maneiras que não podem ser igualadas pelas abordagens tradicionais.
Comparando Erasure Codes no vSAN versus Storage Tradicional
Com uma compreensão básica de como arrays tradicionais e vSAN fornecem recursos de storage, vejamos como eles abordam a erasure coding de maneira diferente. Essas comparações assumem falhas simultâneas, pois muitos sistemas de storage têm métodos para lidar com falhas únicas ao longo de um período de tempo.
Storage Array
Neste exemplo, um storage array tradicional usa uma erasure code 22+3 (k=22, m=3, n=25).
[A Figura 2, mencionada no original, ilustraria um storage array usando uma erasure code 22+3 para uma LUN ou datastore.]
Vantagens:
- Overhead de capacidade relativamente baixo: O consumo adicional de capacidade pelos dados de paridade necessários para manter a disponibilidade no caso de falhas de fault domain (dispositivo de storage) é de cerca de 14%. Ele alcança esse baixo overhead espalhando os dados por uma quantidade muito grande de dispositivos de storage.
- Nível relativamente alto de falhas que pode tolerar (3): Quaisquer três dispositivos de storage podem falhar e o volume manterá a disponibilidade. Mas, como observado abaixo, esta é apenas parte da história.
Trade-Offs:
- Raio de explosão (blast radius) relativamente grande: Se o número de falhas para o qual o array foi projetado for excedido, seu limite de impacto é bastante grande. Todo o array pode ser potencialmente impactado nessas condições.
- Protege apenas contra falhas de dispositivos de storage: As erasure codes em storage arrays protegem apenas contra a falha(s) de dispositivos de storage. Os arrays podem estar sujeitos a degradação significativa no desempenho e disponibilidade se ocorrerem outros tipos de falhas, como interconexões defeituosas, storage controllers defeituosos, atualizações de firmware ruins, etc. Nenhuma erasure code pode manter a disponibilidade de dados se você perder mais storage controllers do que o array pode tolerar.
- Impacto no desempenho relativamente alto durante ou após a falha: Falhas usando grandes valores de k e m podem exigir muitos recursos para reparos e ser mais propensas a alta latência de cauda (tail latency).
- Potenciais pontos de falha por paridade relativamente altos: A proporção de 8.33:1 reflete um alto número de potenciais pontos de falha versus o(s) bit(s) de paridade que contribuem para manter a disponibilidade. Uma proporção alta destaca uma fragilidade maior.*
O último ponto é extremamente importante. As erasure codes não devem ser julgadas apenas pelo seu nível de resiliência declarado (m), mas sim, pela resiliência declarada versus o número de potenciais pontos de falha contra os quais está protegendo (n). Isso fornece uma abordagem melhor para entender a confiabilidade probabilística de uma solução de storage.
vSAN
Neste exemplo, assumiremos um cluster vSAN de 24 hosts onde os dados de objeto de uma VM são prescritos com uma erasure code RAID-6 de 4+2 (k=4, m=2, n=6). Observe que os componentes que compõem um objeto vSAN usando uma erasure code RAID-6 terão data bits e parity bits. Conforme Christos Karamanolis descreve em seu artigo, o vSAN não cria componentes de paridade dedicados.
[A Figura 3, mencionada no original, ilustraria o vSAN usando uma erasure code RAID-6, 4+2 para um objeto vSAN.]
Vantagens:
- Raio de explosão (blast radius) relativamente pequeno: Um cluster que excede duas falhas simultâneas de host afetará apenas alguns objetos, mas não derrubará o datastore inteiro.
- Protege contra uma variedade de condições de falha: As erasure codes no vSAN podem contabilizar falhas em dispositivos de storage discretos, hosts e fault domains explicitamente definidos, como rack.
- Impacto no desempenho relativamente baixo durante ou após a falha: Os valores menores de k ajudam a reduzir o esforço computacional nos reparos.
- Potenciais pontos de falha por paridade relativamente baixos: A proporção de 3:1 reflete um baixo número de potenciais pontos de falha versus o(s) bit(s) de paridade que contribuem para manter a disponibilidade.
Trade-Offs:
- Tolerância absoluta de falhas dentro de um objeto menor (2): A resiliência declarada da erasure code 4+2 do vSAN é menor. Mas observe que o limite de falha (o objeto) é menor, e ele tem um número muito menor de potenciais pontos de falha por paridade.
- Overhead relativamente maior: O consumo adicional de capacidade pelos dados de paridade necessários para manter a disponibilidade no caso de um fault domain (host) é de 50%.
Embora a erasure code RAID-6 do vSAN proteja contra 2 falhas em oposição a 3, ela é extremamente robusta devido ao número relativamente pequeno de potenciais pontos de falha: apenas 6 versus 25. Isso confere à erasure code 4+2 do vSAN a vantagem técnica sobre a erasure code 22+3 de um storage array ao comparar a confiabilidade como resultado das probabilidades de falha.
Com o vSAN usando uma erasure code com um pequeno valor "n", isso proporciona muito mais flexibilidade para nossos clientes construírem clusters para todos os tipos de cenários. Por exemplo, nossa erasure code RAID-6 (4+2) pode rodar em apenas 6 hosts. Uma erasure code 22+3 precisaria, em teoria, de pelo menos 25 hosts dentro de um cluster.
Desacoplando Tamanho do Cluster e Disponibilidade
A erasure coding RAID-6 do vSAN permanece um esquema 4+2, independentemente do tamanho do cluster. Quando uma política de storage de FTT=2 usando RAID-6 é aplicada a um objeto, isso significa que ele pode tolerar duas falhas simultâneas dos hosts onde o objeto reside. Isso se aplica ao estado do objeto, não ao cluster. Outras falhas em outros hosts não têm relevância para o estado deste objeto, a não ser para ajudar a recuperar o nível de resiliência prescrito de um objeto após qualquer tipo de falha. O vSAN reconhecerá esses outros hosts como potenciais hosts que pode usar para reconstruir a porção ausente da stripe com paridade.
[A Figura 4, mencionada no original, ilustraria o posicionamento de objetos em relação ao tamanho do cluster.]
Essa abordagem permite que o vSAN desacople a relação entre o tamanho do cluster e a disponibilidade. Enquanto muitos sistemas de storage scale-out se tornam mais frágeis à medida que escalam, a abordagem do vSAN reduz o risco à medida que o cluster cresce.
Para mais informações sobre disponibilidade e tratamento de falhas no vSAN, consulte o documento “vSAN Availability Technologies” no VMware Resource Center.
Resumo
A erasure coding é uma técnica poderosa para armazenar dados de forma altamente resiliente e, ao mesmo tempo, eficiente em termos de espaço. Mas nem todas as erasure codes são criadas da mesma forma. O vSAN usa erasure codes que fornecem uma combinação ideal de durabilidade, flexibilidade e eficiência de espaço em um ambiente distribuído.
Combinado com recursos oportunistas de eficiência de espaço, como a compressão de dados do vSAN e os novos recursos de global deduplication do ESA no VCF 9.0, seu storage vSAN está mais capaz do que nunca.
Precisa de ajuda com suas soluções de TI?
A VirtuAllIT Solutions oferece consultoria especializada em virtualização, cloud computing e infraestrutura tecnológica.

