Introducción a los Sistemas Distribuidos
Prácticamente todos los grandes sistemas informáticos son en la actualidad sistemas distribuidos. Un sistema distribuido es aquel en el que el procesamiento de información se distribuye sobre varias computadoras, en lugar de estar confinado en una única máquina. Obviamente, la ingeniería de sistemas distribuidos tiene mucho en común con la ingeniería de cualquier otro software, pero existen consideraciones específicas que deben tenerse en cuenta al diseñar este tipo de sistemas.
Ventajas Clave de los Sistemas Distribuidos
Se identifican las siguientes ventajas al adoptar una aproximación distribuida para el desarrollo de sistemas:
Compartición de recursos. Un sistema distribuido permite compartir recursos de hardware y software —como discos, impresoras, archivos y compiladores— que se asocian con computadoras de una red.
Apertura. Los sistemas distribuidos son normalmente sistemas abiertos, lo que significa que se diseñan sobre protocolos estándar que permiten combinar equipamiento y software de diferentes proveedores.
Concurrencia. En un sistema distribuido, varios procesos pueden operar al mismo tiempo sobre diferentes computadoras de la red. Estos procesos pueden (aunque no necesariamente) comunicarse entre sí durante su funcionamiento normal.
Escalabilidad. Al menos en principio, los sistemas distribuidos son escalables, ya que la capacidad del sistema puede incrementarse añadiendo nuevos recursos para cubrir nuevas demandas. En la práctica, la red que une las computadoras individuales del sistema puede limitar la escalabilidad. Si se añaden muchas computadoras nuevas, la capacidad de la red podría resultar inadecuada.
Tolerancia a fallos. La disponibilidad de varias computadoras y el potencial para reproducir información significa que los sistemas distribuidos pueden ser tolerantes a algunos fallos de funcionamiento del hardware y del software. En la mayoría de los sistemas distribuidos, se puede proporcionar un servicio degradado cuando ocurren fallos; una completa pérdida de servicio solo ocurre cuando existe un fallo en la red.
Desafíos y Desventajas de los Sistemas Distribuidos
Para sistemas organizativos a gran escala, estas ventajas han significado que los sistemas distribuidos han reemplazado ampliamente a los sistemas heredados centralizados desarrollados en los años 80 y 90. Sin embargo, comparados con sistemas que se ejecutan sobre un único procesador o un clúster de procesadores, los sistemas distribuidos presentan varias desventajas:
Complejidad. Los sistemas distribuidos son más complejos que los sistemas centralizados. Esto hace más difícil comprender sus propiedades emergentes y probarlos. Por ejemplo, en lugar de que el rendimiento del sistema dependa de la velocidad de ejecución de un procesador, depende del ancho de banda y de la velocidad de los procesadores de la red. Mover los recursos de una parte del sistema a otra puede afectar de forma radical al rendimiento.
Seguridad. Puede accederse al sistema desde varias computadoras diferentes, y el tráfico en la red puede estar sujeto a escuchas indeseadas. Esto dificulta asegurar la integridad de los datos y que los servicios del sistema no se degraden por ataques de denegación de servicio.
Gestionabilidad. Las computadoras en un sistema pueden ser de diferentes tipos y ejecutar versiones distintas de sistemas operativos. Los defectos en una máquina pueden propagarse a otras con consecuencias inesperadas. Esto significa que se requiere más esfuerzo para gestionar y mantener el funcionamiento del sistema.
Impredecibilidad. Como es bien sabido por los usuarios de la World Wide Web (WWW), los sistemas distribuidos tienen una respuesta impredecible. La respuesta depende de la carga total en el sistema, de su organización y de la carga de la red. Como todos ellos pueden cambiar con mucha rapidez, el tiempo requerido para responder a una petición de usuario puede variar drásticamente de una petición a otra.
El desafío de diseño radica en desarrollar el software y hardware para proporcionar las características deseables de los sistemas distribuidos, minimizando al mismo tiempo los problemas inherentes. Para lograrlo, es fundamental comprender las ventajas y desventajas de las diferentes arquitecturas de sistemas distribuidos.
Arquitecturas Comunes de Sistemas Distribuidos
A continuación, se abordan varios tipos de arquitecturas de sistemas distribuidos:
Arquitectura Cliente-Servidor
En esta arquitectura, el sistema puede ser visto como un conjunto de servicios que se proporcionan a los clientes que hacen uso de dichos servicios. Los servidores y los clientes se tratan de forma diferenciada en estos sistemas.
Arquitecturas de Objetos Distribuidos
En este caso, no hay distinción entre servidores y clientes, y el sistema puede ser visto como un conjunto de objetos que interactúan cuya localización es irrelevante. No hay distinción entre un proveedor de servicios y el usuario de estos servicios.
Ambas arquitecturas (Cliente-Servidor y Objetos Distribuidos) se usan ampliamente en la industria, pero la distribución de las aplicaciones generalmente tiene lugar dentro de una única organización. La distribución soportada es, por lo tanto, intraorganizacional.
Arquitecturas Peer-to-Peer (P2P) y Orientadas a Servicios
Aquí también se plantean dos tipos más de arquitecturas distribuidas que son más adecuadas para la distribución interorganizacional:
- Arquitectura de sistemas Peer-to-Peer (P2P)
- Arquitecturas Orientadas a Servicios
El Rol del Middleware en Sistemas Distribuidos
Los componentes en un sistema distribuido pueden implementarse en diferentes lenguajes de programación y pueden ejecutarse en tipos de procesadores completamente distintos. Los modelos de datos, la representación de la información y los protocolos de comunicación pueden ser todos diferentes. Un sistema distribuido, por lo tanto, requiere software que pueda gestionar estas partes distintas y asegurar que dichas partes se puedan comunicar e intercambiar datos.
El término middleware se usa para hacer referencia a ese software; se sitúa en medio de los diferentes componentes distribuidos del sistema. El middleware es un software de propósito general que normalmente se adquiere como un componente comercial, en lugar de ser desarrollado específicamente por los programadores de la aplicación. Ejemplos de middleware incluyen software para gestionar comunicaciones con bases de datos, administradores de transacciones, convertidores de datos y controladores de comunicación.
Enfoque Orientado a Objetos en Sistemas Distribuidos
Los sistemas distribuidos se desarrollan normalmente utilizando una aproximación orientada a objetos. Estos sistemas están formados por partes independientes débilmente acopladas, cada una de las cuales puede interactuar directamente con los usuarios o con otras partes del sistema. Algunas partes del sistema pueden tener que responder a eventos independientes. Los objetos software reflejan estas características; por lo tanto, son abstracciones naturales para los componentes de sistemas distribuidos.
