Sistemas distribuidos: características, arquitectura, tipos, objetivos, aplicaciones
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.
Índice del artículo
- 1 Distribución de datos
- 2 Características de los sistemas distribuidos
- 3 Arquitectura
- 4 Tipos de sistemas distribuidos
- 5 Objetivos
- 6 Aplicaciones
- 7 Ventajas
- 8 Desventajas
- 9 Ejemplos de sistemas distribuidos
- 10 Referencias
Distribución de datos
La distribución es clave para poder 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
Compatibilidad
Los dispositivos pueden funcionar con diferentes sistemas operativos. Esto no impide que puedan ofrecer siempre los mismos servicios a los usuarios. Por tal razón, todos los dispositivos conectados son compatibles entre sí.
Otro tema fundamental es el diseño del software, porque este también es compatible con todos los sistemas y usuarios que se tienen en cada computadora.
Tolerancia a fallos
Al ser una sola red con muchas computadoras, si falla alguno de sus componentes, los demás podrán seguir efectuando su función cabalmente, evitando los errores rápidamente.
Por tal razón, los sistemas distribuidos suelen brindar mucha confianza cuando se trabaja con ellos, porque es bastante raro que falle el sistema completamente, porque las tareas no residen en un solo aparato, sino en diferentes equipos.
Middleware y API
Los diferentes procesadores usan un middleware de distribución, ayudando a compartir diferentes recursos y capacidades para brindar a los usuarios una red coherente e integrada. También ofrece a las aplicaciones una serie de servicios, como seguridad y recuperación de fallos.
Actualmente, se escucha más sobre interfaces de programación de aplicaciones (API), que funcionan como puerta de enlace por donde las aplicaciones pueden comunicarse. Las aplicaciones no necesitan saber nada sobre otras aplicaciones, excepto su API.
Arquitectura
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
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
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
– Se pueden agregar fácilmente más nodos al sistema distribuido, es decir, se puede escalar según sea necesario.
– Todos los nodos en el sistema distribuido están conectados entre sí. Por tanto, cada uno de los nodos puede compartir datos fácilmente con los otros nodos.
– Recursos como las impresoras se pueden compartir con múltiples nodos en lugar de restringirse a uno solo.
– La falla de un nodo no conduce a la falla de todo el sistema distribuido. Los otros nodos aún se pueden comunicar entre sí.
Desventajas
– Pueden perderse algunos mensajes y datos en la red al pasar de un nodo a otro.
– Es difícil proporcionar una seguridad adecuada en los sistemas distribuidos porque tanto los nodos como las conexiones deben asegurarse.
– Puede ocurrir una sobrecarga en la red si todos los nodos del sistema distribuido intentan enviar datos a la vez.
– La base de datos conectada a los sistemas distribuidos es bastante complicada y difícil de manejar en comparación con un sistema de usuario único.
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
- Paul Krzyzanowski (2018). Distributed Systems. Tomado de: cs.rutgers.edu.
- Catherine Paganini (2019). Primer: Distributed Systems and Cloud Native Computing. The New Stack. Tomado de: thenewstack.io.
- Universidad Internacional de Valencia (2020). Sistemas distribuidos, características y clasificación. Tomado de: universidadviu.com.
- David Meador (2018). Distributed Systems. Tutorials Point. Tomado de: tutorialspoint.com.
- Robert Gibb (2019). What is a Distributed System? Tomado de: blog.stackpath.com.
- Stanislav Kozlovski (2018). A Thorough Introduction to Distributed Systems. Free Code Camp. Tomado de: freecodecamp.org.