
¿Qué son los sistemas distribuidos?
Los sistemas distribuidos son piezas de software que sirven para coordinar las acciones de varias computadoras. Esta coordinación se logra mediante el intercambio de mensajes, es decir, con trozos de datos que transmiten información.
Los sistemas distribuidos requieren componentes concurrentes, una red de comunicación y un mecanismo de sincronización. Permiten compartir recursos, incluyendo el software, por los sistemas conectados a una red. Por tanto, el sistema se basa en una red que conecta las computadoras y maneja el enrutamiento de los mensajes.
La computación distribuida es un área de la informática que se encarga de analizar los sistemas distribuidos. El programa informático que se ejecuta en un sistema distribuido se denomina programa distribuido.
En un contexto donde pueden existir centenares o millares de computadoras, que es una proporción común en las grandes empresas de Internet, es muy común que haya fallas de los componentes, sean de hardware, red, discos, etc., y el sistema debe estar preparado para afrontarlas en todo momento.
Distribución de datos en sistemas distribuidos
La distribución es clave para manejar conglomerados de datos muy grandes. Es necesaria para lograr escalabilidad, que son los medios para mantener un desempeño estable cuando los cúmulos de datos crecen al agregar nuevos recursos al sistema.
Por otro lado, la distribución presenta una serie de problemas técnicos que hacen que el diseño e implementación de un almacenamiento y cómputo distribuido sean importantes de considerar. Un punto a tomar en cuenta es el riesgo de posibles fallos.
Características de los sistemas distribuidos

– Conjunto de nodos interconectados. Están formados por múltiples computadoras (nodos) que se comunican a través de una red.
– Transparencia. El sistema intenta ocultar al usuario la complejidad de la distribución. Tipos comunes: Transparencia de acceso; Transparencia de ubicación; Transparencia de replicación.
– Concurrencia. Permiten que varios procesos o usuarios accedan simultáneamente a los recursos sin interferencias.
– Escalabilidad. Pueden crecer fácilmente añadiendo más nodos, sin afectar significativamente el rendimiento.
– Tolerancia a fallos. Si un nodo falla, el sistema puede seguir funcionando gracias a la redundancia y replicación.
– Comunicación por red. Los componentes se comunican mediante protocolos de red (como HTTP, TCP/IP, etc.).
– Compartición de recursos. Permiten compartir datos, almacenamiento, aplicaciones y servicios entre diferentes nodos.
– Sincronización y consistencia. Deben manejar problemas como la coordinación entre procesos y la consistencia de datos distribuidos.
– Seguridad. Requieren mecanismos de seguridad para proteger datos y comunicaciones (autenticación, cifrado, etc.).
Arquitectura de los sistemas distribuidos
- Arquitectura cliente-servidor. Una computadora en particular llamada servidor puede realizar ciertas tareas, que se denominan servicios. Por ejemplo, ofrecer archivos a través de la red, capacidad de ejecutar ciertos comandos o enrutar datos a una impresora. El cliente es la computadora que solicita los servicios. La computadora conocida principalmente por el servicio que brinda puede denominarse servidor de impresión, servidor de archivos, etc.
- Arquitectura de igual a igual (peer-to-peer). Asume que cada computadora tiene capacidades similares y que ninguna máquina está dedicada a servir a las demás. Un ejemplo de esto es un conjunto de microcomputadoras en una pequeña oficina. La red permite a las personas acceder a los archivos de los demás y enviar correos electrónicos, pero ninguna computadora brinda un conjunto específico de servicios.
- Arquitecturas de varios niveles. Para ciertos servicios puede tener sentido tener una conectividad jerárquica. Por ejemplo:
- Un servidor al realizar sus tareas puede contactar a otro servidor de diferente tipo.
- La arquitectura cliente-servidor es una arquitectura de dos niveles.
- Arquitectura de grupo de procesadores. Un sistema operativo podría iniciar automáticamente procesos en computadoras inactivas e incluso migrar procesos a sistemas con una mayor cantidad de ciclos disponibles de CPU. En otros casos, un usuario puede iniciar o mover procesos manualmente en los sistemas disponibles.
Tipos de sistemas distribuidos
- Computación en cluster. Es un conjunto de computadoras similares conectadas a través de una red de área local de alta velocidad. Se usa frecuentemente para la programación en paralelo, donde un solo programa intensivo en cómputo se ejecuta en paralelo en varias computadoras. Cada cluster consiste de un conjunto de nodos de cómputo que son monitoreados y administrados por uno o más nodos llamados maestros.
- Computación en red. Se compone de nodos con marcadas diferencias en hardware y tecnología de red. La tendencia actual a tener una configuración específica de nodos para ciertas tareas ha llevado a que haya una mayor diversidad, que es lo más frecuente en la computación en red.
- Computación en la nube. Es un conjunto de recursos virtualizados alojados en el centro de datos de un proveedor de la nube. Los clientes pueden establecer una infraestructura virtualizada para aprovechar una variedad de servicios en la nube. Para el usuario, pareciera que está alquilando su propia computadora exclusiva. Sin embargo, en realidad es probable que la esté compartiendo con otros clientes. Lo mismo se aplica al almacenamiento virtual. Estos recursos virtualizados pueden configurarse dinámicamente, permitiendo así la escalabilidad. Si se necesitan más recursos informáticos, el sistema puede adquirir más.
Objetivos de los sistemas distribuidos
- Compartir recursos. Sean instalaciones de almacenamiento, archivos de datos, servicios o redes, es posible que se desee compartir estos recursos entre las aplicaciones, por simple economía. Resulta mucho más barato tener una instalación de almacenamiento compartida entre múltiples aplicaciones, que tener que comprar y mantener almacenamiento para cada una por separado.
- Abstracción. Para ocultar que los procesos y recursos se encuentran distribuidos en varias computadoras, posiblemente diseminadas geográficamente. Es decir, los procesos y recursos quedan abstraídos del usuario.
- Apertura. Indica básicamente que un sistema distribuido esté erigido con elementos que se puedan integrar con facilidad a otros sistemas. Cumpliendo con las reglas normalizadas, cualquier proceso con esa interfaz puede comunicarse con otro proceso con la misma interfaz.
- Interoperabilidad y portabilidad. Se refiere cuando dos sistemas de diferentes fabricantes pueden funcionar en conjunto. La portabilidad determina hasta qué punto una aplicación realizada para el sistema A pueda funcionar en el sistema B sin modificaciones.
- Escalabilidad. Es necesaria cuando hay un aumento de usuarios que necesitan más recursos. Un buen ejemplo es el aumento de la audiencia de Netflix cada viernes por la noche. Significa agregar dinámicamente más recursos, tal como aumentar la capacidad de la red permitiendo una mayor transmisión de video y reducirla una vez que el consumo se haya normalizado.
Aplicaciones de los sistemas distribuidos

- Máquina virtual Erlang. Erlang es un lenguaje funcional que tiene una gran semántica para la concurrencia, distribución y tolerancia a fallas. Una máquina virtual Erlang maneja la distribución de una aplicación Erlang. Este modelo funciona teniendo muchos procesos aislados, todos con la capacidad de comunicarse entre sí a través de un sistema incorporado de transmisión de mensajes. La máquina virtual de Erlang se puede conectar a otras máquinas virtuales que se encuentren en diferentes lugares. Este enjambre de máquinas virtuales ejecuta una sola aplicación, manejando las fallas de una máquina programando su ejecución en otro nodo.

- BitTorrent. Es uno de los protocolos más utilizados para transferir archivos grandes en la web. La idea principal es facilitar la transferencia de archivos entre diferentes pares en la red sin tener que pasar por un servidor principal. Al usar un cliente BitTorrent, se puede conectar a múltiples computadoras en todo el mundo para descargar un archivo. Una computadora que actúa como coordinadora ayuda a mostrar los nodos en la red que tienen el archivo que se desea. BitTorrent permite alojar archivos de forma voluntaria y subirlos para otros usuarios que los deseen. Es tan popular porque fue el primero de su tipo en ofrecer incentivos por contribuir a la red.
Ventajas y desventajas de los sistemas distribuidos
Ventajas
- Escalabilidad. Se pueden agregar más nodos fácilmente para aumentar la capacidad sin cambiar todo el sistema.
- Alto rendimiento. Permiten procesamiento paralelo, lo que mejora la velocidad y eficiencia.
- Tolerancia a fallos. Si un nodo falla, el sistema puede seguir funcionando gracias a la redundancia.
- Disponibilidad. Los servicios pueden estar disponibles casi siempre, ya que no dependen de una sola máquina.
- Compartición de recursos. Facilitan el acceso a datos, aplicaciones y servicios desde distintos lugares.
- Flexibilidad y crecimiento. Se adaptan fácilmente a cambios y a nuevas demandas tecnológicas.
Desventajas
- Complejidad. Son más difíciles de diseñar, implementar y mantener que los sistemas centralizados.
- Dificultad para detectar errores. Los fallos pueden ser difíciles de identificar y depurar debido a la distribución.
- Problemas de sincronización. Mantener la consistencia de datos entre nodos puede ser complicado.
- Dependencia de la red. El rendimiento depende de la red; pueden surgir problemas de latencia o caídas de conexión.
- Seguridad. Al haber múltiples puntos de acceso, aumenta el riesgo de ataques o vulnerabilidades.
- Costos iniciales. Requieren inversión en infraestructura, configuración y administración.
Ejemplos de sistemas distribuidos
Los sistemas distribuidos se pueden utilizar en una gran cantidad de casos, como los sistemas de banca electrónica, los juegos en línea multijugador masivos y las redes de sensores.
- StackPath. Utiliza un sistema distribuido particularmente grande para impulsar su servicio de red de entrega de contenido. Cada uno de sus puntos de presencia (PoP) tiene nodos, formando un sistema distribuido a nivel mundial. StackPath almacena el contenido solicitado más recientemente y con más frecuencia en las ubicaciones más cercanas al sitio que se está utilizando. Al interconectar computadoras virtuales, además de aprovechar la velocidad y agilidad de una informática de punta, el sistema puede manejar muy rápidamente miles de solicitudes simultáneas.
- Internet. Es el mayor sistema distribuido del mundo. Cualquier usuario siente como si fuera un solo sistema, aunque está compuesto por millones de computadoras. Mediante el concepto de abstracción no se tiene idea sobre dónde están almacenados los datos, cuántos servidores están involucrados o cómo llega la información al navegador. El navegador disuelve la complejidad de Internet. Esto se aplica también a aplicaciones tales como el correo electrónico Gmail o cualquier otra aplicación que se pueda usar. Todas las personas interactúan diariamente con aplicaciones distribuidas.
Referencias
- Distributed Systems. Recuperado de cs.rutgers.edu.
- Primer: Distributed Systems and Cloud Native Computing. Recuperado de thenewstack.io.
- Distributed Systems. Recuperado de tutorialspoint.com.
- What is a Distributed System? Recuperado de blog.stackpath.com.
- A Thorough Introduction to Distributed Systems. Recuperado de freecodecamp.org.