Este texto, publicado originalmente en 2013, ofrece una introducción accesible a los sistemas distribuidos, un tema crucial en la era de la computación en la nube y el big data. La necesidad de estos sistemas surge cuando los problemas superan la capacidad de una sola máquina, ya sea por limitaciones de almacenamiento o de poder de cómputo. Aunque teóricamente podríamos tener una única máquina 'mágica' para resolver cualquier problema, la realidad económica dicta que es más rentable utilizar hardware de gama media y commodity, siempre y cuando se pueda mantener la tolerancia a fallos a través de software robusto.
El núcleo de la programación distribuida se centra en dos desafíos fundamentales: la velocidad finita de la luz (la distancia importa) y la independencia de fallos (cada componente puede fallar por sí solo). Esto define el espacio de diseño de los sistemas, obligando a considerar cómo la distancia, el tiempo y los modelos de consistencia interactúan. El texto explora conceptos clave como escalabilidad (la capacidad de manejar un aumento de carga sin degradación significativa), disponibilidad, rendimiento, latencia y tolerancia a fallos. Se abordan temas avanzados como el teorema CAP (que limita la capacidad de un sistema para garantizar consistencia, disponibilidad y partición), el FLP impossibility result (que demuestra la imposibilidad de construir un sistema distribuido que sea completamente fiable), y modelos de consistencia más allá de la consistencia estricta, incluyendo la consistencia eventual.
El documento profundiza en la gestión del tiempo y el orden en sistemas distribuidos, crucial para evitar inconsistencias. También analiza la replicación de datos, explorando métodos desde las soluciones menos tolerantes a fallos (como el 2PC) hasta algoritmos más sofisticados como Paxos. Se introduce el concepto de replicación con garantías de consistencia más débiles, ejemplificado por el diseño de Amazon Dynamo, y se presentan enfoques innovadores como los CRDTs (Data Types con Concurrencia Solucionable) y el teorema CALM. El objetivo principal es proporcionar una comprensión de los principios subyacentes de los sistemas distribuidos utilizados en centros de datos, evitando detalles de implementación específicos y centrándose en el diseño del sistema en sí mismo.
En resumen, este texto sirve como una puerta de entrada a la complejidad de los sistemas distribuidos, proporcionando los fundamentos necesarios para comprender arquitecturas modernas y tecnologías como Hadoop, BigTable y Dynamo, y preparando al lector para explorar temas más avanzados.
