La computación distribuida es un modelo para resolver problemas de computación masiva utilizando un gran número de ordenadores organizados en clústeres incrustados en una infraestructura de telecomunicaciones distribuida.
La computación distribuida es un modelo informático que permite hacer grandes cálculos utilizando miles de ordenadores de voluntarios. Este sistema se basa en repartir la información a través de Internet mediante un software, previamente descargado por el usuario, a diferentes ordenadores, que van resolviendo los cálculos y una vez tienen el resultado lo envían al servidor. Este proyecto, casi siempre solidario, reparte la información a procesar entre los miles de ordenadores voluntarios para poder alcanzar cuotas de procesamiento a menudo mayores que las de superordenadores y a un costo mucho menor.
El beneficio de la computación distribuida es que la actividad de procesamiento se puede asignar a la ubicación o ubicaciones donde sea posible realizarlo con más eficiencia. Podemos tomar como ejemplo la computación distribuida en una empresa: cada oficina puede organizar y manipular los datos para satisfacer necesidades específicas, así como compartir el producto con el resto de la organización. También nos permite la optimización de los equipos y mejora el balanceo del procesamiento dentro de una aplicación. Este último es de gran importancia, ya que en algunas aplicaciones simplemente no hay una máquina que sea capaz de realizar todo el procesamiento.
Para ello se puede hablar de "procesos". Un proceso realiza dos tipos de operaciones:
Declaración Inicial y las Solicitudes Externas realizadas por otros procesos. Estas operaciones se ejecutan una a la vez intercalándose entre sí. Esto continúa hasta que la declaración termina o espera que una condición se convierta en realidad.
Luego se inicia otra operación (como resultado de una solicitud externa). Cuando esta operación, a su vez, termina o espera, el proceso comenzará otra operación (volver a cuestionado por otro proceso) o reanudará una operación anterior (como resultado de que una condición se convierta en verdadera).
Este entrelazado de la declaración inicial y las solicitudes externas continúa para siempre. Si la declaración inicial termina, el proceso continúa existiendo, a pesar de que el primer proceso termine, continuará aceptando solicitudes Externas.
Introducción
Desde el surgimiento de la computadora moderna en 1945 hasta mediados de la década de 1980, la computación se caracterizó principalmente por un modelo centralizado. Sin embargo, a partir de esa época comenzaron a emerger dos avances tecnológicos fundamentales que sentaron las bases de la computación distribuida:
El desarrollo de microprocesadores potentes y económicos, disponibles en arquitecturas de 8, 16, 32 y 64 bits. La aparición de redes de área local (LAN) de alta velocidad, capaces de conectar cientos de computadoras con tasas de transferencia del orden de millones de bits por segundo.
Estos avances permitieron la transición de los sistemas centralizados a los sistemas distribuidos, en los cuales los componentes de hardware o software están ubicados en computadoras diferentes, interconectadas mediante una red de comunicaciones.
Un sistema distribuido es una colección de computadoras independientes que se presenta como un sistema coherente para los usuarios. Los sistemas operativos diseñados para entornos distribuidos han tenido avances significativos, aunque aún presentan desafíos en aspectos como la transparencia, la escalabilidad y la tolerancia a fallos. Gracias a estos sistemas, los usuarios pueden acceder a una amplia gama de recursos, tanto de hardware como de software, distribuidos entre múltiples máquinas.
Un sistema distribuido posee características fundamentales como:
Concurrencia: La ejecución simultánea de procesos en distintos nodos es una práctica común. Ausencia de reloj global: La coordinación entre procesos debe lograrse sin una referencia temporal compartida. Tolerancia a fallos independientes: Pueden producirse fallos por desconexiones de red, errores de hardware o terminaciones anómalas de software, sin afectar necesariamente al sistema completo.
Evolución histórica El concepto de transmisión de mensajes se originó a finales de la década de los 60. A pesar de que el multiprocesador de propósito general y las redes de computadoras no existían en ese momento, surgió la idea de organizar un sistema operativo como una colección de procesos de comunicación donde cada proceso tiene una función específica, en la cual, no pueden interferir otros (variables no compartidas). De esta forma, en los años 70 nacieron los primeros sistemas distribuidos generalizados, las redes de área local (LAN) como Ethernet.
Este suceso generó inmediatamente una gran cantidad de lenguajes, algoritmos y aplicaciones, pero no fue hasta que los precios de las LANs bajaron, cuando se desarrolló la computación cliente-servidor. A finales de la década de 1960, se creó ‘Advanced Research Projects Agency Network’ (ARPANET). Esta agencia fue la espina dorsal de Internet hasta 1990, tras finalizar la transición al protocolo TCP/IP, iniciada en 1983. En los primeros años de 1970, nace el correo electrónico ARPANET, el que es considerado como la primera aplicación distribuida a gran escala.
Durante las dos últimas décadas se han realizado investigaciones en materia de algoritmos distribuidos y se ha avanzado considerablemente en la madurez del campo, especialmente durante los años ochenta. Originalmente la investigación estaba muy orientada hacia aplicaciones de los algoritmos en redes de área amplia (WAN), pero hoy en día se han desarrollado modelos matemáticos que permiten la aplicación de los resultados y métodos a clases más amplias de entornos distribuidos.
Existen varias revistas y conferencias anuales que se especializan en los resultados relativos a los algoritmos distribuidos y la computación distribuida. La primera conferencia sobre la materia fue el simposio ‘Principles of Distributed Computing’ (PoDC) en 1982, cuyos procedimientos son publicados por ‘Association for Computing Machinery, Inc’. ‘International Workshops on Distributed Algorithms’ (WDAG) se celebró por primera vez en Ottawa en 1985 y después en Ámsterdam (1987) y Niza (1989). Desde entonces, sus actas son publicadas por Springer-Verlag en la serie ‘Lecture Notes on Computer Science’. En 1998, el nombre de esta conferencia cambió a Distributed Computing (DISC). Los simposios anuales sobre teoría de computación (‘SToC’) y fundamentos de informática (FoCS) cubren toda las áreas fundamentales de la informática, llevando a menudo documentos sobre computación distribuida. Las actas de ‘SToC’ son publicadas por ‘Association for Computing Machinery, Inc.’ y los de FoCS por el IEEE. ‘The Journal of Parallel and Distributed Computing (JPDC), ‘Distributed Computing’ e ‘Information Processing Letters’ (IPL) publican algoritmos distribuidos regularmente.
Así fue como nacieron los sistemas distribuidos.
¿Qué esperar del paralelismo? Una cuestión clave en la computación distribuida es qué tan eficiente puede ser la ejecución paralela de tareas. En 1967, Gene Amdahl formuló una ley que establece los límites del rendimiento en entornos multiprocesador, indicando que si una fracción de un programa no es paralelizable, esta limitará la ganancia total que puede obtenerse al distribuir su ejecución entre varios procesadores.
Formalmente, si T(1) es el tiempo de ejecución en un solo procesador, T(P) es el tiempo usando P procesadores, tₛ es el tiempo de la parte secuencial, y tₚ(P) es el tiempo de la parte paralelizable, entonces la ganancia (g) estará restringida por la porción no paralelizable. Esta observación sigue siendo crucial al diseñar algoritmos para entornos distribuidos.
Esta observación, conocida como la Ley de Amdahl, llevó a que por varias décadas el cómputo paralelo fuera relegado al cómputo de propósito específico, para necesidades muy focalizadas en soluciones altamente paralelizables, como el cómputo científico.
La Ley de Amdahl fue posteriormente contrarrestada por la Ley de Gustafson, la cual introduce una perspectiva más práctica y optimista. Mientras Amdahl parte de la base de un problema de tamaño fijo, Gustafson observa que, en la práctica, al disponer de más recursos de procesamiento, lo habitual es enfrentarse a problemas de una escala mayor. Bajo este modelo, la porción secuencial del código se diluye como porcentaje del trabajo total, permitiendo que la ganancia de rendimiento escale de manera mucho más efectiva con el número de procesadores. Esta ley explica la viabilidad del paralelismo masivo en aplicaciones modernas de big data e inteligencia artificial, donde el objetivo no es solo acelerar un cálculo fijo, sino realizar análisis más complejos y ambiciosos en un tiempo razonable.
Por ello, investigaciones posteriores, como la Ley de Gustafson, destacaron que si el tamaño del problema crece proporcionalmente al número de procesadores, es posible aprovechar de manera mucho más eficiente el paralelismo disponible. En conjunto, estas teorías complementarias han guiado la evolución del cómputo paralelo hacia arquitecturas masivas y distribuidas, donde la eficiencia final depende tanto de un diseño algorítmico astuto como de la minimización de las dependencias y la sobrecarga de comunicación entre tareas.
Comparación Computación Paralela-Distribuida thumb|right|300px|(a), (b): a sistema distribuido.(c): a sistema paralelo.
Al igual que ocurre con los sistemas distribuidos, en los sistemas paralelos no existe una definición clara. Lo único evidente es que cualquier sistema en el que los eventos puedan ordenarse de manera parcial se consideraría un sistema paralelo y por lo tanto, esto incluiría a todos los sistemas distribuidos y sistemas de memoria compartida con múltiples hilos de control. De esta forma, se podría decir que los sistemas distribuidos forman una subclase de sistemas paralelos, donde los espacios de estado de los procesos no se superponen.
Aunque comparten similitudes, la computación paralela y la distribuida se distinguen por su arquitectura y objetivos. En términos generales:
Computación paralela: Los procesadores suelen compartir una memoria común, lo que permite una comunicación rápida. Está enfocada principalmente en el rendimiento. Computación distribuida: Cada nodo tiene su propia memoria local y se comunica mediante paso de mensajes. Su objetivo principal es la escalabilidad y la tolerancia a fallos.
Desde esta perspectiva, los sistemas distribuidos pueden considerarse una subcategoría de los sistemas paralelos, pero con un acoplamiento débil entre sus componentes. En cambio, los sistemas paralelos suelen tener un acoplamiento fuerte al compartir memoria y estado global.
Una representación gráfica de esta diferencia muestra, por un lado, una red de computadoras autónomas (sistema distribuido) y, por otro, un conjunto de procesadores conectados a una memoria compartida (sistema paralelo).
Algunos distinguen los sistemas paralelos de los sistemas distribuidos en función de sus objetivos: los sistemas paralelos se centran en el aumento del rendimiento, mientras que los sistemas distribuidos se centran en la tolerancia de fallos parciales.
Desde otro punto de vista, en la computación paralela, todos los procesadores pueden tener acceso a una memoria compartida para intercambiar información entre ellos y en la computación distribuida, cada procesador tiene su propia memoria privada, donde la información se intercambia pasando mensajes entre los procesadores.
Luego se podría decir que la computación en paralelo es una forma particular de computación distribuida fuertemente acoplada, y la computación distribuida una forma de computación paralela débilmente acoplada.