Lista de leitura sobre sistemas distribuídos (2014)
(dancres.github.io)- A chave para aprender sistemas distribuídos está mais na mudança de mentalidade do que em uma tecnologia específica, e esta lista acompanha por tema os problemas que surgem ao projetar sistemas em escala de internet
- Os materiais se dividem em filosofia de projeto, latência, casos de sistemas de grande escala da Amazon e do Google, modelos de consistência, teoria, ferramentas, infraestrutura, armazenamento, algoritmos de consenso, protocolos de gossip e P2P
- CAP, evitar 2PC, eventual consistency e replicação otimista mostram os trade-offs operacionais de que é difícil maximizar consistência e disponibilidade ao mesmo tempo
- A coletânea de artigos do Google oferece casos de implementação de sistemas distribuídos em grande escala como MapReduce, Chubby, GFS, BigTable, Dremel, Spanner, Photon e Mesa, enquanto os materiais da Amazon também tratam da transição para arquitetura orientada a serviços e da cultura organizacional
- Lendo em sequência de Paxos, Raft, FLP, Relógios de Lamport, Generais Bizantinos, Chord, Kademlia e Pastry, é possível organizar em um único fluxo os problemas de consenso, tempo, replicação e roteamento
Mentalidade e perspectiva de projeto
- A parte mais difícil em sistemas distribuídos é mudar a forma de pensar, e a lista começa com textos e artigos que ajudam nessa transição
- “Thought Provokers” aborda a visão de que servidores grandes, bancos de dados e transações não resolvem todos os problemas por si só
- Harvest, Yield and Scalable Tolerant Systems: trata da aplicação prática de CAP
- On Designing and Deploying Internet Scale Services: material de James Hamilton sobre projeto e implantação de serviços em escala de internet
- The Perils of Good Abstractions: trata da dificuldade de criar APIs e interfaces perfeitas
- Chaotic Perspectives: enfatiza a imprevisibilidade, a desordem e o paralelismo de sistemas em grande escala
- Também inclui Data on the Outside versus Data on the Inside, Memories, Guesses and Apologies e Building on Quicksand, de Pat Helland
- Também valem a leitura Why Distributed Computing?, de Jim Waldo, e A Note on Distributed Computing, de Waldo, Wollrath e outros
Latência e serviços em escala de internet
- “Latency” trata de como a arquitetura é afetada pela premissa de que a latência sempre existe
- Latency Exists, Cope!: trata de formas de lidar com latência e seus efeitos na arquitetura
- Latency - the new web performance bottleneck: trata da latência como gargalo de desempenho na web
- The Tail At Scale: trata da latência em sistemas de grande escala, especialmente do problema de tail latency
- Os materiais da Amazon observam não apenas escolhas técnicas, mas também a cultura e a organização formadas durante a transição para uma arquitetura orientada a serviços
- A Conversation with Werner Vogels: trata da transição da Amazon para arquitetura orientada a serviços
- Discipline and Focus: aborda adicionalmente a transição da Amazon para arquitetura orientada a serviços
- Também inclui Vogels on Scalability e SOA creates order out of chaos @ Amazon
Artigos sobre sistemas do Google e modelos de consistência
- A coletânea do Google reúne em um só lugar artigos sobre sistemas de grande escala que podem ser vistos como a “rocket science” dos sistemas distribuídos, de MapReduce até Mesa
- MapReduce
- Chubby Lock Manager
- Google File System
- BigTable
- Dremel: análise interativa de conjuntos de dados em escala web
- Megastore: projeto para implementação de Paxos de baixa latência entre datacenters
- Spanner: banco de dados do Google escalável, multiversão, distribuído globalmente e com replicação síncrona
- Photon: junções tolerantes a falhas e escaláveis de fluxos contínuos de dados
- Mesa: data warehouse georreplicado, quase em tempo real e escalável que armazena dados centrais de medição do negócio de publicidade na internet do Google
- “Consistency Models” é composto por materiais para encontrar o ponto de equilíbrio entre consistência e disponibilidade de acordo com o ambiente do sistema
- CAP Conjecture: explica que não é possível satisfazer ao mesmo tempo Consistency, Availability e Partition Tolerance
- CAP Twelve Years Later: Eric Brewer expande a explicação original sobre o trade-off
- Inclui Consistency and Availability e Eventual Consistency, de Werner Vogels
- Avoiding Two-Phase Commit e 2PC or not 2PC, Wherefore Art Thou XA? tratam de evitar o commit em duas fases e de suas limitações
- Starbucks doesn't do two phase commit: trata de mecanismos assíncronos
- Optimistic Replication: trata de uma abordagem de consistência relaxada para replicação de dados
Teoria, linguagens, infraestrutura e armazenamento
- “Theory” reúne materiais necessários para entender economia, hipóteses de falha, tempo e limites do consenso que aparecem repetidamente no projeto de sistemas distribuídos
- Distributed Computing Economics: Jim Gray
- Rules of Thumb in Data Engineering: Jim Gray e Prashant Shenoy
- Fallacies of Distributed Computing: Peter Deutsch
- Impossibility of distributed consensus with one faulty process: artigo também conhecido como FLP; o acesso pode exigir conta ou pagamento, e também é fornecido um link para versão gratuita
- Unreliable Failure Detectors for Reliable Distributed Systems: trata de maneiras de lidar com a dificuldade apresentada por FLP
- Lamport Clocks: o problema de estabelecer uma visão global do tempo quando os relógios de cada computador são independentes
- The Byzantine Generals Problem
- Os materiais sobre linguagens e ferramentas mostram que só escolher uma tecnologia específica não elimina os problemas de confiabilidade
- Programming Distributed Erlang Applications: Pitfalls and Recipes: apenas escolher Erlang e OTP não torna simples construir aplicações distribuídas confiáveis
- Os materiais de infraestrutura tratam de como o gerenciamento de relógios é essencial até para tarefas básicas como depuração
- Os materiais de armazenamento levam a temas como cache distribuído e projetos de armazenamento como Dynamo
Consenso, gossip e P2P
- A coletânea sobre Paxos parte da premissa de que entender Paxos em si já é difícil e recomenda ler primeiro Paxos Made Simple e relê-lo depois de outros artigos
- The Part-Time Parliament: Leslie Lamport
- Paxos Made Simple: Leslie Lamport
- Paxos Made Live - An Engineering Perspective: Chandra e outros
- Revisiting the Paxos Algorithm: Lynch e outros
- How to build a highly available system with consensus: Butler Lampson
- Reconfiguring a State Machine: mudança de membros do cluster
- Implementing Fault-Tolerant Services Using the State Machine Approach: tutorial de Fred Schneider
- Outros artigos sobre consenso também tratam de ambientes WAN e de alternativas ao Paxos
- Mencius: algoritmo de consenso para redes de longa distância
- In Search of an Understandable Consensus Algorithm: versão estendida do artigo do Raft e alternativa ao Paxos
- Os materiais sobre protocolos de gossip reúnem protocolos de comunicação, monitoramento e membership com comportamento epidêmico
- How robust are gossip-based communication protocols?
- Astrolabe: técnica robusta e escalável para monitoramento, gerenciamento e mineração de dados em sistemas distribuídos
- SWIM: protocolo de membership de grupos de processos em estilo infection-style, escalável e fracamente consistente
- Os materiais de P2P acompanham consulta distribuída, roteamento, armazenamento e multicast em nível de aplicação
- Chord: protocolo de consulta P2P escalável para aplicações de internet
- Kademlia: sistema de informação P2P baseado na métrica XOR
- Pastry: localização de objetos e roteamento distribuídos e escaláveis para sistemas P2P de grande escala
- PAST: utilitário de armazenamento P2P persistente em grande escala sobre Pastry
- SCRIBE: infraestrutura de multicast em nível de aplicação, distribuída e em grande escala para mensagens de longa distância sobre Pastry
1 comentários
Opiniões no Hacker News
Esta lista parece um pouco antiga, e recomendo a lista de leitura sobre consenso distribuído da Heidi Howard
https://github.com/heidihoward/distributed-consensus-reading...
Achei estranho ver o MapReduce do Google apresentado como a “ciência de foguetes” da área
Fui conferir e esta lista é de 2014 [1], então é preciso ter cuidado, porque a situação mudou bastante desde então
[1] https://news.ycombinator.com/from?site=dancres.github.io
Existe uma meta-lista de listas de leitura sobre sistemas distribuídos que criei cerca de 10 anos atrás
Também acrescentei esta lista com uns 10 anos de atraso, e só Deus sabe quantos dos itens que reuni ainda estão no ar
https://gist.github.com/macintux/6227368
Também vale ver https://ferd.ca/a-distributed-systems-reading-list.html, que menciona a lista original
Ela pode ajudar quem está tentando levar os limites adiante ou procurar novas abordagens, mas, para o restante, é como perguntar como resolver uma equação do segundo grau e receber 100 artigos sobre teoria das categorias
A lista de Fred Herbert é mais recente que a original, mas, como ele mesmo diz, não é completa. Ele considera “Designing Data-Intensive Applications” essencial, mas ainda fala como se, para entendê-lo de verdade, fosse preciso ler muitos artigos primeiro
Quando listas assim são apresentadas como pré-requisito para entender o assunto, podem soar como elevação da barreira de entrada
Graças a décadas de trabalho acumulado de outras pessoas, não é preciso ler 100 artigos sobre nanokernels para se tornar um usuário eficaz de Linux. Criar um bom sistema operacional do zero continua sendo difícil, mas 99% das pessoas não precisam fazer isso; basta saber usar bem as ferramentas que já existem
Com sistemas distribuídos é a mesma coisa: se você não está tentando avançar a fronteira da área, não precisa ser tão difícil assim
Se você é um engenheiro de software que quer experiência prática em vez de mergulhar fundo em pesquisa, é melhor construir algo com NATS [1] ou YugaByte [2], ou fazer um tutorial prático como [3]
“Designing Data-Intensive Applications” também vale a leitura. É um daqueles livros que ficam melhores a cada releitura, então dá para simplesmente ler, mesmo sem ter lido 100 artigos. Se aparecer uma parte que você não entende, pergunte e peça ajuda; não há problema em pular a enorme lista de leituras
1: https://nats.io/
2: https://www.yugabyte.com/
3: https://pragprog.com/titles/tjgo/distributed-services-with-g...
E ainda assim não há menção à tecnologia CRDT?