Saltar a contenido

Introducción a sistemas distribuidos

Un sistema distribuido es un conjunto de computadoras que trabajan juntas de manera coordinada para lograr un objetivo común, presentándose a los usuarios como un sistema único y coherente.

Características fundamentales

  • Estado compartido entre nodos: Los nodos mantienen y acceden a información común
  • Operación concurrente: Múltiples procesos se ejecutan simultáneamente en diferentes nodos
  • Tolerancia a fallos: Un nodo puede fallar sin afectar el servicio general del sistema

Diferencias clave

Paralelismo vs. Distribución

  • Paralelismo: Ejecución de varias tareas simultáneas en una misma máquina (multiprocesador, multinúcleo)
  • Distribución: Ejecución de tareas en varias máquinas coordinadas a través de una red

Problemas de latencia en sistemas distribuidos

Uno de los mayores desafíos en sistemas distribuidos es la diferencia en los tiempos de acceso a los diferentes componentes:

Acceso a la RAM -> nanosegundos (ns)
Acceso a SSD -> microsegundos (μs)
Acceso a la red -> orden de milisegundos (ms)

Relación de magnitudes: - La RAM es aproximadamente 1000 veces más rápida que un SSD - El SSD es aproximadamente 1000 veces más rápido que la red

Conclusión: En sistemas distribuidos ganamos capacidad de procesamiento y almacenamiento, pero perdemos velocidad debido a la latencia de red.

Escalabilidad

La escalabilidad se refiere a la capacidad de un sistema para manejar un crecimiento en la carga de trabajo. Existen dos enfoques principales:

  1. Escalabilidad horizontal: Aumentar el número de nodos (más máquinas)
  2. Ventajas: Mayor tolerancia a fallos, límites teóricos más altos
  3. Desventajas: Mayor complejidad en coordinación y consistencia

  4. Escalabilidad vertical: Aumentar la capacidad de un nodo existente (más CPU, RAM, almacenamiento)

  5. Ventajas: Más simple de implementar, sin problemas de consistencia distribuida
  6. Desventajas: Límites físicos, punto único de fallo

Tolerancia a fallos

Un cluster (grupo de nodos que trabajan juntos) puede sobrevivir a caídas parciales, mientras que un servidor único no puede hacerlo.

Métricas clave de disponibilidad

  1. MTBF (Mean Time Between Failures): Tiempo promedio entre fallas
  2. Indica la confiabilidad del sistema
  3. MTBF alto = sistema más confiable

  4. MTTR (Mean Time To Recovery): Tiempo promedio para recuperación

  5. Indica la capacidad de recuperación del sistema
  6. MTTR bajo = sistema se recupera rápidamente

  7. Uptime: Tiempo durante el cual el sistema está operativo

  8. Se expresa comúnmente en "nueves" (nines)
  9. Ejemplos:
    • 99.9% = "tres nueves" ≈ 8.76 horas de downtime por año
    • 99.99% = "cuatro nueves" ≈ 52.6 minutos de downtime por año
    • 99.999% = "cinco nueves" ≈ 5.26 minutos de downtime por año
    • 99.9999% = "seis nueves" ≈ 31.5 segundos de downtime por año
  10. AWS generalmente ofrece "seis nueves" (99.9999%) en sus servicios

Chaos Engineering

La ingeniería del caos es la disciplina de experimentar en un sistema distribuido para construir confianza en su capacidad para resistir condiciones turbulentas en producción.

Herramientas y conceptos

  • Chaos Monkey: Apaga instancias al azar para probar la resiliencia del sistema
  • Chaos King: Simula la caída de una región completa de AWS
  • Simian Army: Conjunto de herramientas que agrupan todas las anteriores y más
  • Gremlin: Plataforma para inyectar fallos de manera controlada

Filosofía: Un sistema siempre va a fallar eventualmente; debemos asegurarnos de que falle de manera controlada y con gracia (graceful degradation).

Teorema CAP

El teorema CAP establece que es imposible para un sistema distribuido que presenta un fallo parcial (partición de red) garantizar simultáneamente las tres propiedades siguientes:

Las tres propiedades del teorema CAP

  1. C (Consistency) - Consistencia: Toda lectura retorna la escritura más reciente o un error
  2. Todos los nodos ven los mismos datos al mismo tiempo

  3. A (Availability) - Disponibilidad: Toda solicitud recibe una respuesta (no necesariamente la más reciente)

  4. El sistema siempre responde, incluso si algunos nodos están caídos

  5. P (Partition tolerance) - Tolerancia a particiones: El sistema sigue funcionando si la red se divide (desconecta parcialmente)

  6. El sistema continúa operando a pesar de fallos de comunicación entre nodos

Implicaciones del teorema

Según el teorema CAP, durante una partición de red, un sistema distribuido solo puede garantizar dos de las tres propiedades:

  • CP (Consistencia + Tolerancia a particiones): Prioriza consistencia sobre disponibilidad
  • Ejemplo: Bases de datos relacionales distribuidas
  • AP (Disponibilidad + Tolerancia a particiones): Prioriza disponibilidad sobre consistencia
  • Ejemplo: DynamoDB, Cassandra
  • CA (Consistencia + Disponibilidad): Solo posible en sistemas no distribuidos o sin particiones

Modelos de consistencia

ACID (Atomicity, Consistency, Isolation, Durability)

  • Prioriza consistencia sobre disponibilidad
  • Propiedades:
  • Atomicidad: Las transacciones son completas o no ocurren
  • Consistencia: Las transacciones llevan la base de datos de un estado válido a otro
  • Aislamiento: Las transacciones concurrentes no interfieren entre sí
  • Durabilidad: Los cambios persisten después de confirmados

BASE (Basically Available, Soft state, Eventually consistent)

  • Prioriza disponibilidad sobre consistencia inmediata
  • Propiedades:
  • Básicamente disponible: El sistema responde incluso durante fallos
  • Estado suave: El estado puede cambiar con el tiempo sin nuevas entradas
  • Consistencia eventual: El sistema se volverá consistente con el tiempo si no hay nuevas escrituras

Tabla de resumen

Concepto Descripción Ejemplos/Notas
Sistema distribuido Conjunto de computadoras que trabajan coordinadamente Cluster, grid computing, cloud
Paralelismo Varias tareas en una máquina Multiprocesador, multihilo
Distribución Varias tareas en varias máquinas coordinadas en red Microservicios, sistemas en cluster
Latencia Tiempo de acceso a diferentes componentes RAM: ns, SSD: μs, Red: ms
Escalabilidad horizontal Aumentar número de nodos Más máquinas, mayor complejidad
Escalabilidad vertical Aumentar capacidad de un nodo Más CPU/RAM, límites físicos
MTBF Tiempo promedio entre fallas Indicador de confiabilidad
MTTR Tiempo promedio para recuperación Indicador de resiliencia
Uptime Tiempo de operación del sistema Expresado en "nueves" (99.9...%)
Chaos Engineering Experimentar con fallos para construir confianza Chaos Monkey, Gremlin
Teorema CAP Limitación fundamental de sistemas distribuidos Solo 2 de 3: C, A, P
Consistencia (C) Todas las lecturas ven la escritura más reciente Prioridad en sistemas CP
Disponibilidad (A) Toda solicitud recibe respuesta Prioridad en sistemas AP
Tolerancia a particiones (P) Funciona durante fallos de red Requerida en sistemas distribuidos
ACID Modelo que prioriza consistencia Bases de datos relacionales
BASE Modelo que prioriza disponibilidad Bases de datos NoSQL distribuidas

Comentarios adicionales

  1. Patrones de diseño distribuido:
  2. Leader election: Selección de un nodo coordinador
  3. Sharding: Particionamiento de datos entre nodos
  4. Replicación: Copia de datos en múltiples nodos
  5. Consenso distribuido: Algoritmos como Paxos, Raft

  6. Desafíos adicionales:

  7. Relojes distribuidos: Sincronización de tiempo entre nodos
  8. Transacciones distribuidas: Atomicidad a través de múltiples nodos
  9. Detección de fallos: Identificar nodos caídos de manera confiable
  10. Balanceo de carga: Distribución equitativa del trabajo

  11. Tendencias modernas:

  12. Service Mesh: Capa de infraestructura para comunicación entre servicios
  13. Serverless: Ejecución de código sin gestión de servidores
  14. Edge Computing: Procesamiento cerca del origen de los datos
  15. Kubernetes: Orquestación de contenedores a escala

  16. Consideraciones prácticas:

  17. Ley de Amdahl: El paralelismo tiene límites debido a las partes secuenciales
  18. Ley de Moore: Ya no es sostenible para escalabilidad vertical
  19. Ley de Conway: La arquitectura de software refleja la estructura organizacional

  20. Herramientas comunes:

  21. Monitoreo: Prometheus, Grafana, Datadog
  22. Tracing: Jaeger, Zipkin
  23. Mensajería: Kafka, RabbitMQ
  24. Orquestación: Kubernetes, Docker Swarm

Los sistemas distribuidos son fundamentales en la computación moderna, permitiendo construir aplicaciones escalables, resilientes y de alto rendimiento, aunque introducen complejidades significativas que deben ser cuidadosamente gestionadas.