Pular para o conteúdo

Conceitos

Armazenamento morno e erasure coding

Intuição

Imagine um arquivo-morto com documentos antigos que quase ninguém consulta. Guardar três cópias completas de cada papel seria um desperdício de prateleira; é mais barato dividir o conteúdo em pedaços e guardar alguns pedaços extras de reserva, de modo que, se alguns se perderem, dê para refazer o original a partir dos que sobraram. Em troca, recuperar um documento depois de uma perda dá mais trabalho do que simplesmente pegar uma cópia pronta.

Como funciona

Nos BLOBs do Facebook, a taxa de leitura cai com a idade do dado, e a maior parte dos objetos dos tipos analisados acaba morna: poucas leituras por terabyte, de modo que o gargalo passa a ser capacidade e não throughput (análise do paper do f4). O Haystack, que serve o conteúdo quente, mantém três réplicas com RAID-6 em cada máquina, um fator de replicação efetivo de 3,6. O f4 troca as cópias inteiras por erasure coding Reed-Solomon (10,4): cada stripe tem 10 blocos de dados e 4 de paridade, espalhados por racks diferentes, e até 4 blocos quaisquer perdidos podem ser reconstruídos, a um custo de 1,4 vez o tamanho dos dados. Isso é simples de operar porque o f4 só guarda volumes travados, que aceitam apenas leitura e deleção, sem appends nem sobrescritas que obriguem a recalcular paridade; a deleção destrói a chave de criptografia do BLOB em vez de reescrever o stripe. Na leitura normal, o nó de armazenamento devolve os dados direto; se o bloco de dados que guarda o BLOB estiver indisponível, backoff nodes reconstroem sob demanda só o BLOB pedido, a partir dos outros blocos do stripe, enquanto rebuilder nodes refazem blocos inteiros em segundo plano, com taxa limitada para não prejudicar os usuários. Para sobreviver à perda de um datacenter, a primeira solução guarda uma segunda réplica da célula em outro datacenter (1,4 × 2 = 2,8); a seguinte emparelha volumes de duas regiões e grava o XOR deles numa terceira, de modo que a perda de qualquer uma das três pode ser recuperada com as outras duas, o que dá (1,4·2 + 1,4)/2 = 2,1. O preço é menor throughput máximo de leitura e custo maior de leitura e reconstrução quando algo falha; no caso normal, a leitura fica um pouco mais lenta que a do Haystack.

Na prática

O paper do f4 reporta que, em leituras dentro da mesma região, a latência mediana do f4 é de 17 ms contra 14 ms do Haystack, o que os autores consideram suficiente para uma boa experiência do usuário, e que o f4 complementa o Haystack em vez de substituí-lo. A escolha faz sentido quando os dados são imutáveis, pouco lidos por terabyte e limitados por capacidade, e o corte entre quente e morno vem da análise do padrão de acesso por idade (na análise do paper, cerca de um mês para a maioria dos tipos e três meses para Photos). Para dados ainda quentes ou muito lidos, continua valendo a camada de réplicas completas, que oferece mais throughput de leitura e não depende de reconstrução quando uma cópia falha.

Use em um desenho

Pratique na escola de System Design os casos que dependem deste conceito.