Lista de lectura de sistemas distribuidos (2014)
(dancres.github.io)- La clave para aprender sistemas distribuidos no está tanto en una tecnología específica, sino en un cambio de mentalidad; esta lista guía por temas los problemas que aparecen al diseñar sistemas a escala de Internet
- El material se divide en filosofía de diseño, latencia, casos de sistemas a gran escala de Amazon y Google, modelos de consistencia, teoría, herramientas, infraestructura, almacenamiento, algoritmos de consenso, protocolos de gossip y P2P
- CAP, evitar 2PC, eventual consistency y la replicación optimista muestran los trade-offs operativos que dificultan maximizar al mismo tiempo consistencia y disponibilidad
- La colección de artículos de Google ofrece casos de implementación de sistemas distribuidos a gran escala como MapReduce, Chubby, GFS, BigTable, Dremel, Spanner, Photon y Mesa, mientras que el material de Amazon también aborda la transición a una arquitectura orientada a servicios y su cultura organizacional
- Si se sigue la lectura desde Paxos, Raft, FLP, Lamport Clock, Byzantine Generals, Chord, Kademlia y Pastry, se puede ordenar en una sola línea de pensamiento los problemas de consenso, tiempo, replicación y enrutamiento
Mentalidad y perspectiva de diseño
- La parte más difícil de los sistemas distribuidos es cambiar la forma de pensar, y la lista comienza con textos y papers que ayudan en esa transición
- “Thought Provokers” aborda la idea de que no todos los problemas pueden resolverse solo con servidores grandes, bases de datos y transacciones
- Harvest, Yield and Scalable Tolerant Systems: trata la aplicación práctica de CAP
- On Designing and Deploying Internet Scale Services: material de James Hamilton sobre diseño y despliegue de servicios a escala de Internet
- The Perils of Good Abstractions: trata la dificultad de crear APIs e interfaces perfectas
- Chaotic Perspectives: enfatiza la imprevisibilidad, el desorden y el paralelismo en sistemas a gran escala
- También se incluyen Data on the Outside versus Data on the Inside, Memories, Guesses and Apologies y Building on Quicksand de Pat Helland
- También se recomiendan Why Distributed Computing? de Jim Waldo y A Note on Distributed Computing de Waldo, Wollrath y otros
Latencia y servicios a escala de Internet
- “Latency” trata cómo se ve afectada la arquitectura bajo la premisa de que la latencia siempre existe
- Latency Exists, Cope!: trata formas de responder a la latencia y su impacto en la arquitectura
- Latency - the new web performance bottleneck: trata la latencia como cuello de botella del rendimiento web
- The Tail At Scale: trata la latencia en sistemas a gran escala, en especial el problema de tail latency
- El material de Amazon no solo revisa decisiones técnicas, sino también la cultura y la organización formadas durante la transición a una arquitectura orientada a servicios
- A Conversation with Werner Vogels: trata la transición de Amazon a una arquitectura orientada a servicios
- Discipline and Focus: amplía el tema de la transición de Amazon a una arquitectura orientada a servicios
- También se incluyen Vogels on Scalability y SOA creates order out of chaos @ Amazon
Papers de sistemas de Google y modelos de consistencia
- La colección de Google reúne en un solo lugar papers de sistemas a gran escala que pueden considerarse la “rocket science” de los sistemas distribuidos, desde MapReduce hasta Mesa
- MapReduce
- Chubby Lock Manager
- Google File System
- BigTable
- Dremel: análisis interactivo de datasets a escala web
- Megastore: diseño para una implementación de Paxos de baja latencia entre datacenters
- Spanner: base de datos de Google escalable, multiversión, distribuida globalmente y replicada de forma síncrona
- Photon: joins tolerantes a fallas y escalables sobre flujos continuos de datos
- Mesa: data warehouse georreplicado, escalable y casi en tiempo real que almacena datos clave de medición del negocio de publicidad en Internet de Google
- “Consistency Models” está compuesto por materiales para encontrar el punto de equilibrio entre consistencia y disponibilidad según el entorno del sistema
- CAP Conjecture: explica que no se pueden satisfacer al mismo tiempo Consistency, Availability y Partition Tolerance
- CAP Twelve Years Later: Eric Brewer amplía la explicación original del trade-off
- Se incluyen Consistency and Availability y Eventual Consistency de Werner Vogels
- Avoiding Two-Phase Commit y 2PC or not 2PC, Wherefore Art Thou XA? tratan cómo evitar el commit en dos fases y sus límites
- Starbucks doesn't do two phase commit: trata mecanismos asíncronos
- Optimistic Replication: trata un enfoque de consistencia relajada para la replicación de datos
Teoría, lenguajes, infraestructura y almacenamiento
- “Theory” reúne materiales necesarios para entender la economía, las suposiciones sobre fallas, el tiempo y los límites del consenso que aparecen una y otra vez al diseñar sistemas distribuidos
- Distributed Computing Economics: Jim Gray
- Rules of Thumb in Data Engineering: Jim Gray y Prashant Shenoy
- Fallacies of Distributed Computing: Peter Deutsch
- Impossibility of distributed consensus with one faulty process: paper también conocido como FLP; para acceder puede requerirse una cuenta o pago, y también se proporciona un enlace a una versión gratuita
- Unreliable Failure Detectors for Reliable Distributed Systems: trata cómo abordar la dificultad planteada por FLP
- Lamport Clocks: el problema de establecer una visión global del tiempo cuando los relojes de cada computadora son independientes
- The Byzantine Generals Problem
- Los materiales sobre lenguajes y herramientas muestran que elegir una tecnología específica no hace desaparecer por sí solo los problemas de confiabilidad
- Programming Distributed Erlang Applications: Pitfalls and Recipes: elegir Erlang y OTP no vuelve automáticamente simple la construcción de aplicaciones distribuidas confiables
- Los materiales de infraestructura tratan cómo la gestión de relojes es esencial incluso para tareas básicas como el debugging
- Los materiales de almacenamiento llevan a temas como el caché distribuido y diseños de almacenamiento como Dynamo
Consenso, gossip y P2P
- La sección de Paxos parte de la premisa de que Paxos es difícil de entender, y recomienda leer primero Paxos Made Simple y volver a leerlo después de otros papers
- The Part-Time Parliament: Leslie Lamport
- Paxos Made Simple: Leslie Lamport
- Paxos Made Live - An Engineering Perspective: Chandra y otros
- Revisiting the Paxos Algorithm: Lynch y otros
- How to build a highly available system with consensus: Butler Lampson
- Reconfiguring a State Machine: cambio de membresía del clúster
- Implementing Fault-Tolerant Services Using the State Machine Approach: tutorial de Fred Schneider
- Otros papers sobre consenso también cubren entornos WAN y alternativas a Paxos
- Mencius: algoritmo de consenso para redes de área amplia
- In Search of an Understandable Consensus Algorithm: versión extendida del paper de Raft y alternativa a Paxos
- Los materiales sobre protocolos de gossip reúnen protocolos de comunicación, monitoreo y membresía con comportamiento epidémico
- How robust are gossip-based communication protocols?
- Astrolabe: técnica robusta y escalable para monitoreo, administración y minería de datos en sistemas distribuidos
- SWIM: protocolo de membresía de grupos de procesos de estilo infection-style, escalable y débilmente consistente
- Los materiales sobre P2P permiten seguir el hilo de búsqueda distribuida, enrutamiento, almacenamiento y multicast a nivel de aplicación
- Chord: protocolo de búsqueda P2P escalable para aplicaciones de Internet
- Kademlia: sistema de información P2P basado en la métrica XOR
- Pastry: localización de objetos y enrutamiento distribuidos y escalables para sistemas P2P de gran escala
- PAST: utilidad de almacenamiento P2P persistente de gran escala sobre Pastry
- SCRIBE: infraestructura distribuida y escalable de multicast a nivel de aplicación para mensajería de gran alcance sobre Pastry
1 comentarios
Opiniones de Hacker News
Esta lista parece un poco antigua, y recomiendo la lista de lecturas sobre consenso distribuido de Heidi Howard
https://github.com/heidihoward/distributed-consensus-reading...
Me pareció algo raro ver que se presentara MapReduce de Google como la “ciencia de cohetes” de este campo
Al revisar, esta lista es de 2014 [1], así que hay que tener cuidado porque la situación cambió mucho desde entonces
[1] https://news.ycombinator.com/from?site=dancres.github.io
Hay una metalista de listas de lectura sobre sistemas distribuidos que armé hace unos 10 años
También agregué esta lista unos 10 años tarde, y solo el cielo sabe cuántos de los elementos que recopilé siguen vivos hoy
https://gist.github.com/macintux/6227368
También vale la pena ver https://ferd.ca/a-distributed-systems-reading-list.html, que menciona la lista original
Pueden servirle a quien está empujando los límites o buscando nuevos enfoques, pero para el resto se siente como preguntar cómo resolver una ecuación cuadrática y recibir 100 papers de teoría de categorías
La lista de Fred Herbert es más reciente que la original, pero incluso él dice que no es completa. Aunque señala “Designing Data-Intensive Applications” como lectura esencial, también habla como si para entenderla de verdad primero hubiera que leer muchos papers
Cuando estas listas se presentan como prerequisito para entender, pueden sentirse como una forma de subir la barrera de entrada
Gracias al trabajo de otras personas acumulado durante décadas, no hace falta leer 100 papers sobre nanokernels para convertirse en un usuario eficaz de Linux. Construir un buen sistema operativo desde cero sigue siendo difícil, pero el 99% no necesita hacerlo; basta con usar bien las herramientas que ya existen
Con los sistemas distribuidos pasa lo mismo: si no estás empujando la frontera, no tiene por qué ser tan difícil
Si eres un ingeniero de software que quiere experiencia práctica más que profundizar en investigación, conviene construir algo con NATS [1] o YugaByte [2], o hacer un tutorial práctico como [3]
“Designing Data-Intensive Applications” también vale la pena. Es uno de esos libros que mejora cada vez que lo relees, así que puedes leerlo aunque no hayas leído 100 papers. Si aparece algo que no entiendes, puedes preguntar y pedir ayuda; está bien saltarse la enorme lista de lecturas
1: https://nats.io/
2: https://www.yugabyte.com/
3: https://pragprog.com/titles/tjgo/distributed-services-with-g...
¿Y aun así no hay ninguna mención de la tecnología CRDT?