Arquitectura de sistemas distribuidos: Define cómo se estructuran los componentes y cómo estos interactúan entre sí.
El diseño de la arquitectura es esencial para alcanzar ciertos objetivos, como:
• Escalabilidad: Capacidad del sistema de crecer al agregar más nodos sin perder eficiencia.
• Disponibilidad: El sistema debe estar disponible y operativo a pesar de fallos en algunos componentes.
• Tolerancia a fallos: El sistema debe continuar funcionando aunque uno o más nodos fallen.
Sistemas distribuidos:
Es un conjunto de computadoras que trabajan juntas para ofrecer un servicio común o ejecutar una aplicación. Cada nodo puede estar
en una ubicación física diferente, pero actúan como un solo sistema.
Ejemplos de sistemas distribuidos: Servicios en la nube, redes sociales y aplicaciones financieras, como blockchain.
Importancia de los sistemas distribuidos: Permiten manejar grandes volúmenes de datos, ofrecer servicios con alta disponibilidad y
tolerancia a fallos, y escalar de forma eficiente según las necesidades de las aplicaciones.
Componentes clave de los sistemas distribuidos:
Nodos: Es cualquier computadora o dispositivo conectado a la red del sistema distribuido, los nodos pueden ser:
• Clientes: Dispositivos que hacen peticiones (Tu computadora accediendo a un servidor web).
• Servidores: Computadoras que responden a las peticiones de los clientes.
• Intermediarios: Dispositivos que retransmiten o gestionan datos entre los clientes y los servidores.
Protocolos de comunicación: Son las reglas que permiten la comunicación entre los nodos.
Tipos de protocolos de comunicación:
• IP (Internet Protocol): Protocolo fundamental para la comunicación en internet.
• HTTP (Protocolo de Transferencia de Hipertexto)/HTTPS (Protocolo Seguro de Transferencia de Hipertexto) : Utilizado
para la comunicación entre navegadores web y servidores.
• gRPC, SOAP, REST: Protocolos y arquitecturas para la comunicación entre servicios distribuidos.
• Redes: son el medio por el cual los nodos se comunican, ya sea a través de internet, redes locales LAN(Local Area Network)
o redes privadas.
Características de los sistemas distribuidos:
Transparencia: Es que el usuario o cliente no necesita saber que está interactuando con un sistema distribuido, ni los detalles de cómo
funciona.
Hay varios tipos de transparencia:
• Transparencia de acceso: Los usuarios acceden a los recursos de la misma manera, sin importar en qué parte del sistema
estén.
• Transparencia de ubicación: Los recursos pueden estar en cualquier lugar de la red, pero para el usuario parece que están
localizados.
• Transparencia de replicación: Si un recurso tiene copias en varios nodos, el sistema se encarga de gestionarlo sin que el
usuario lo note.
• Consistencia y replicación: La replicación de datos asegura que si un nodo falla, otros nodos aún tengan los datos disponibles.
El reto es mantener la consistencia, es decir, que todas las copias de los datos sean iguales en todos los nodos.
• Tolerancia a fallos: Los sistemas distribuidos están diseñados para manejar fallos. Por ejemplo, si un nodo falla, otro nodo
toma su lugar sin interrumpir el servicio.
Patrones de arquitectura:
Cliente-Servidor: Es el modelo más básico en el que un servidor central responde a las peticiones de varios clientes.
Ejemplo: Un servidor web que envía páginas HTML a navegadores.
De igual a igual: Todos los nodos tienen roles iguales, lo que significa que cada nodo puede actuar tanto como cliente o como servidor.
Microservicios: En lugar de tener una sola aplicación, la aplicación se divide en servicios más pequeños, cada uno de los cuales se
puede desplegar de manera independiente. Cada microservicio tiene su propia lógica y puede estar en diferentes servidores.
Ejemplo: Netflix utiliza microservicios para distribuir la carga de trabajo en su plataforma.
Desafios y soluciones:
Sincronización: Dado que los sistemas distribuidos operan en múltiples nodos, uno de los retos es mantener sincronizadas las
operaciones en diferentes nodos. Existen mecanismos como relojes y algoritmos de consenso para manejar esta sincronización.
Teorema CAPE: Establece que un sistema distribuido no puede garantizar simultáneamente Consistencia, Disponibilidad y Tolerancia.
Se debe escoger dos de esos tres atributos, lo que introduce ciertos compromisos de diseño.
Seguridad: Es un reto debido a la naturaleza distribuida de los sistemas. Los datos se transmiten por redes públicas, lo que significa
que deben estar cifrados, y es crucial tener medidas de autenticación y autorización para proteger los recursos.