Sistemas de Armazenamento Escaláveis
Sistemas de armazenamento escaláveis distribuem dados por várias máquinas para fornecer capacidade, rendimento e disponibilidade que superam as de um único servidor, ao mesmo tempo que mascaram as falhas de nós individuais.
Definition
Um sistema de armazenamento escalável armazena dados em um cluster de máquinas, particionando-os para capacidade e rendimento e replicando-os para durabilidade e disponibilidade, de modo que o sistema agregado escala com o número de nós, tolerando falhas de nós individuais.
Scope
Este tópico abrange sistemas de arquivos distribuídos projetados para clusters de commodities, armazenamentos distribuídos de chave-valor e de coluna larga, e as técnicas de sobreposição estruturada — hashing consistente e tabelas hash distribuídas — usadas para particionar e localizar dados em escala. Ele aborda o particionamento de dados (sharding), a replicação para durabilidade e as compensações de consistência e disponibilidade que distinguem armazenamentos fortemente consistentes de armazenamentos altamente disponíveis.
Core questions
- Como os dados são particionados e localizados em um conjunto grande e mutável de nós?
- Como a durabilidade e a disponibilidade são alcançadas apesar das falhas frequentes de nós?
- Que garantias de consistência um armazenamento escalável pode oferecer, e a que custo?
Key theories
- Sistemas de arquivos em cluster
- Sistemas como o Google File System armazenam arquivos enormes como blocos replicados em servidores de commodity, otimizando para acesso sequencial grande e tratando as falhas como a norma, e não como a exceção.
- Armazenamentos estruturados distribuídos
- Armazenamentos de coluna larga e chave-valor, como Bigtable e Dynamo, particionam dados por chave entre nós e os replicam, trocando expressividade de consulta e consistência por escalabilidade horizontal e disponibilidade.
- Hashing consistente e tabelas hash distribuídas
- O hashing consistente mapeia chaves e nós para um anel de forma que adicionar ou remover um nó move apenas uma pequena fração das chaves, e tabelas hash distribuídas como Chord fornecem pesquisa de chave escalável e descentralizada com roteamento logarítmico.
Clinical relevance
O armazenamento escalável é o alicerce durável das plataformas em nuvem e de grandes serviços web: armazenamentos de objetos, bancos de dados e pipelines de análise repousam sobre sistemas de arquivos distribuídos e armazenamentos de chave-valor cujas escolhas de particionamento e replicação definem as garantias de durabilidade e consistência do sistema.
History
Tabelas hash distribuídas peer-to-peer como Chord (2001) demonstraram pesquisa descentralizada escalável; o Google File System (2003) e o Bigtable (2006-2008) demonstraram armazenamento em escala de cluster para dados estruturados; e o Dynamo da Amazon (2007) popularizou o armazenamento de chave-valor altamente disponível, juntos fundando o cenário moderno de armazenamento escalável e NoSQL.
Debates
- Consistência forte versus alta disponibilidade no armazenamento
- Armazenamentos fortemente consistentes simplificam a lógica da aplicação, mas devem sacrificar a disponibilidade sob partições, enquanto armazenamentos altamente disponíveis como o Dynamo aceitam divergência temporária e empurram a resolução de conflitos para a aplicação; a escolha certa depende da tolerância dos dados à desatualização.
Key figures
- Sanjay Ghemawat
- Werner Vogels
- Ion Stoica
- Hari Balakrishnan
Related topics
Seminal works
- ghemawat2003
- decandia2007
- stoica2001
Frequently asked questions
- Que problema o hashing consistente resolve?
- Quando os dados são particionados entre nós por hashing de chaves, o hashing ingênuo reorganiza quase tudo quando um nó é adicionado ou removido. O hashing consistente organiza chaves e nós em um anel de modo que tal mudança realoca apenas uma pequena e limitada fração de chaves, o que é essencial para clusters elásticos e em constante mudança.