De Wikipedia, la enciclopedia libre.
La computación
distribuida, computación en grilla o informática en rejilla, es
un nuevo modelo para resolver problemas de computación masiva utilizando un
gran número de ordenadores organizados en racimo
incrustados en una infraestructura de telecomunicaciones distribuida.
La computación en rejilla ha sido diseñada para resolver
problemas demasiado grandes por cualquier simple superordenador, mientras mantiene la
flexibilidad de trabajar en multiples problemas más pequeños. Por tanto, la
computación en rejilla es un entorno multi-usuario.
Debido a esta razón, las técnicas de autorización segura
son esenciales para permitir que los recuros informáticos sean controlados por
usuarios remotos (distantes).
La informática en rejilla consiste en compartir recursos
heterogéneos (basadas en distintas plataformas,
arquitecturas de equipos y programas, lenguajes de programación), situados en
distintos lugares pertenecientes a diferentes dominios de administración sobre
una red que utiliza estándares abiertos.
Dicho brevemente, consiste en virtualizar los recursos informáticos.
En términos de funcionalidad, las Rejillas se clasifican
en Rejillas computacionales ( incluyendo las rejillas In terms of
functionality, Grids are classified into Computational Grids (incluyendo
rejillas de barrido de la CPU ) y en Rejillas de Datos.
La herramienta Globus ha emergido como
el estándar de facto para la capa intermedia (middleware) de la
rejilla. Globus tiene recursos para manejar:
a) La gestión de
recursos(Protocolo de Gestión de Recuros en Rejilla o Grid Resource
Management Protocol - GRAM)
b) Servicios de Información (Servicio de Descubrimiento y
Monitorización o Monitoring and Discovery Service - MDS)
c) Gestión y Movimiento de Datos (Acceso Global al
Almacenamiento Secunda Global Access to secondary Storage(GASS) y FTP
en Rejilla GridFTP)
La mayoría de rejillas que se expanden sobre las
comunidades académicas y de investigación de Norteamérica y Europa están basadas en las herramienta Globus Toolkit
como núcleo de la capa intermedia.
Los servicios web
basados en XML ofrecen una forma de acceder a diversos
servicios/aplicaciones en un entorno distribuido. Recientemente, el mundo de la
informática en rejilla y los servicios web caminan juntos para ofrecer la
Rejilla como un servicio web (Servicio de Rejilla). La arquitectura está
definida por la Open Grid Services Architecture (OGSA). Serán
ofrecidas varias funcionalidades, adheridas a la semántica de los Servicios de
Rejilla.
La versión 3.0 de Globus Toolkit, que actualmente se
encuentra en fase alfa, será una implementación de referencia acorde con el
estándar OGSA.
La rejilla ofrece una forma de resolver los problemas de Gran
Reto como el plegamiento de las proteinas y descubrimiento de
medicamentos, modelización financiera, simulación de terremotos, inundaciones y
otras catástrofes naturales, modelización del clima/tiempo, etc. Ofrecen un
camino para utilizar los recursos de las tecnologías de la información de forma
óptima en una organización.
Vease también:
16 de agosto del 2003
En un
sistema distribuido los procesos están repartidos en distintas máquinas, e
intercambian información mediante paso de mensajes sobre algún sistema de
comunicación. Cuando se les compara con los sistemas tradicionales,
“centralizados”, surgen nuevos problemas, debidos a la propia distribución:
retardos, particiones de la red, fallo independiente de máquinas, etc. Pero
también hay nuevas posibilidades, como por ejemplo la replicación de procesos
en diferentes máquinas para incrementar la tolerancia a fallos. Todo esto hace
que el diseño y la implementación de sistemas distribuidos sea una tarea
compleja y difícil. Así, es particularmente útil encontrar formas de
simplificar los problemas, y proporcionar módulos o paradigmas probados y
listos para usar, que resuelvan algún aspecto difícil de la construcción de
sistemas distribuidos. Esto se aplica en particular a los protocolos de
comunicación que se usan: dependiendo de las características que proporcione un
protocolo, la construcción de algún tipo de sistema distribuido sobre él puede
ser mucho más fácil.
Desde
un punto de vista histórico, las primeras primitivas de comunicación y los
primeros protocolos que se usaron para el intercambio de información
interproceso proporcionaban paso de mensajes entre dos procesos (comunicación
uno a uno), con diferentes calidades de servicio (QoS). La transmisión
orientada a conexión, FIFO y fiable y la no fiable orientada a datagramas son
las QoS más habituales en este caso, y ambas especifican el comportamiento en
caso de fallos de comunicación. Más adelante, con la adopción del modelo
cliente-servidor, se desarrollaron protocolos uno a uno optimizados para la
interacción con RPCs, especificando alguna QoS en caso de fallos de proceso
(semánticas al menos una vez o como mucho una vez).
Pero
cuando comenzaron a considerarse aplicaciones tolerantes a fallos, replicadas y
de tipo difusión, se reconoció la importancia de enviar mensajes a un conjunto
de procesos (comunicación uno a varios) como un
paradigma útil. En este escenario, los modelos de fallo útiles son muchos, y
las garantías que son útiles dependen mucho de la aplicación. Como las QoS más
estrictas son costosas, el diseñador está interesado normalmente en usar el
protocolo más barato posible, entre los que garanticen la QoS que requiera la
aplicación.
En
este capítulo se ofrece una descripción general de estos conceptos, con la
intención de centrar los problemas, las soluciones y las cuestiones abiertas
más habituales en el campo donde se sitúa esta tesis. Esta descripción comienza
presentando el concepto mismo de sistema distribuido (sección 2.1).
Más adelante, en la sección 2.2,
se introducen los modelos más habituales de computación distribuida, para poner
en perspectiva los problemas y las soluciones que se analizarán a lo largo de
esta tesis. En la sección 2.3
se detallan los conceptos específicos relacionados con los grupos de procesos
replicados, que son de gran importancia para el resto de esta exposición, ya
que los grupos replicados son uno de los paradigmas más habituales en la
computación distribuida tolerante a fallos. El capítulo termina con tres
secciones dedicadas más específicamente a temas relacionados con los sistemas
de comunicación: 2.4 se
dedica a la comunicación uno a uno en general (incluyendo diferentes semánticas
multienvío y QoS), 2.5 a
aproximaciones modulares para la construcción de protocolos (tanto unienvío
como multienvío) y 2.6 a
una descripción breve de algunos sistemas de comunicación.
Antes
de analizar asuntos más específicos, vamos a introducir algunos conceptos
genéricos relacionados con los sistemas distribuidos.
Una de
las primeras caracterizaciones de un sistema distribuido fue realizada por
Enslow, ya en 1978 [Ens78],
que le atribuye las siguientes propiedades:
A
pesar del tiempo transcurrido, esta definición sigue siendo, en esencia,
válida. Así, para Coulouris [CDK94]
un sistema distribuido es aquél que está compuesto por varios ordenadores
autónomos conectados mediante una red de comunicaciones y equipados con
programas que les permitan coordinar sus actividades y compartir recursos. Bal
ofrece una definición muy similar [Bal90]:
``Un sistema de computación distribuida está compuesto por varios procesadores
autónomos que no comparten memoria principal, pero cooperan mediante el paso de
mensajes sobre una red de comunicaciones''. Y según Schroeder [Sch93],
todo sistema distribuido tiene tres características básicas:
En cuanto
a los campos de aplicación, podemos distinguir por un lado aquellos donde la
distribución es fundamentalmente un medio para conseguir un fin y por otro
aquellos donde es un problema en sí misma [SC91].
Con respecto a los primeros, el uso de soluciones distribuidas sirve para
acercarse a las siguientes metas:
En
los segundos, son los propios requisitos de la aplicación los que fuerzan a
evolucionar hacia soluciones distribuidas:
Cuando se construye cualquier tipo de sistema distribuido
hay varios problemas que deben ser resueltos. Estos problemas son fundamentales
porque están presentes en cualquier sistema de este tipo, por su propia
naturaleza. De hecho, algunos autores deciden incluso si un sistema es ``más o
menos distribuido'' según el grado en que los presenta (y hablan entonces de síntomas
de distribución [Mul93b]).
Los más relevantes son los siguientes [Sch93]:
Los
campos donde se concentra la investigación en sistemas distribuidos suelen
estar, bien relacionados con estos problemas, o bien con los dominios de
aplicación donde se pretende usar la distribución. También hay campos donde
temas ``tradicionalmente'' resueltos cobran nueva vida al intentar extenderlos
con soluciones distribuidas (por ejemplo, los servicios de nombrado de un
sistema operativo o los planificadores de procesos) . A continuación se ofrece
una lista, extensa pero por supuesto no exhaustiva, de las áreas más activas en
el ámbito de los sistemas distribuidos en los últimos años, construida a partir
de la ofrecida en [Sta94]:
redes de área local y extensa, sistemas operativos distribuidos, bases de datos
distribuidas, servidores de ficheros distribuidos, lenguajes de programación
concurrentes y distribuidos, lenguajes de especificación para sistemas
concurrentes, teoría de algoritmos paralelos, teoría de computación
distribuida, arquitecturas paralelas y estructuras de interconexión, sistemas
ultraconfiables y tolerantes a fallos, sistemas distribuidos de tiempo real,
técnicas de resolución cooperativa de problemas, depuración distribuida,
simulación distribuida, aplicaciones distribuidas y metodologías para el
diseño, construcción y mantenimiento de sistemas distribuidos grandes y
complejos, y herramientas de trabajo cooperativo.
Aunque los
dominios de aplicación de los sistemas distribuidos son muchos, hay una serie
de problemas comunes a todos ellos. Precisamente la recurrencia de estos
problemas es lo que hace que sistemas en principio muy diferentes (como por
ejemplo, bases de datos distribuidas o sistemas de encaminamiento en redes)
puedan tratarse, al menos parcialmente, de forma similar. Para resolverlos se
han ido desarrollando en los últimos años unas técnicas que componen hasta
cierto punto el ``corpus teórico'' en el que se apoya la investigación sobre
sistemas distribuidos. Para ver cuáles son éstas, basta con consultar el índice
de cualquiera de los textos clásicos sobre el tema ([CDK94,Mul93a,CS94b,Tan95]).
La siguiente lista incluye los más habituales:
La
mayor parte de estas técnicas están fuertemente interrelacionadas, y a menudo
se utilizan juntas en los sistemas reales. Por ejemplo, uno de los niveles de
comunicaciones más utilizados proporciona multienvío atómico y causal2.1. Para
conseguirlo se usan habitualmente comunicaciones uno a varios, consenso
distribuido, sincronización lógica de relojes y cálculo de instantáneas
globales.
Antes de
hablar sobre cualquier aspecto de un sistema, es conveniente definir claramente
qué supuestos hemos realizado sobre él. En otras palabras, cuál es el modelo
del sistema. Según [HT93],
los parámetros que determinan un modelo de sistema distribuido son los
siguientes:
Esta
caracterización, aunque será la utilizada de aquí en adelante, no es en
absoluto la única propuesta. Entre otras, cabe destacar la propuesta en [Jal94].
Según ella, un sistema distribuido puede considerarse a dos niveles:
A
continuación, retomamos los parámetros propuestos en [HT93],
y pasamos a estudiarlos con cierto detalle.
Las propiedades de sincronía se
definen no sólo sobre los protocolos de comunicación que usa un sistema, sino
también sobre las características de los procesos que trabajan en él. En
sentido estricto, se dice que un sistema es síncrono si [HT93]:
Los
sistemas síncronos son muy útiles porque permiten usar plazos para
detectar fallos. Como en estos sistemas el retardo de un mensaje, en ausencia
de fallos, está acotado, basta con que se detecte un retraso para que el
receptor suponga que algo ha ido mal en el emisor o en el sistema de
comunicaciones. Además, en estos sistemas, incluso en presencia de fallos, los
relojes de los procesos pueden mantenerse sincronizados, de forma que la deriva
entre dos de ellos cualesquiera esté acotada [LMS85].
De estos relojes se dice que están sincronizados aproximadamente, y son
muy útiles para diseñar protocolos de comunicaciones. Para ciertas aplicaciones
esta propiedad es imprescindible (por ejemplo, sistemas de control con
requisitos de tiempo real).
Para
muchos problemas es posible simular, a partir de relojes sincronizados aproximadamente,
otros sincronizados perfectamente (con deriva cero). Con ellos se simplifica
mucho el diseño de algoritmos distribuidos.
Por otra
parte, en un sistema asíncrono no se puede hacer ninguna suposición
sobre el comportamiento temporal del sistema (retardos de mensajes, deriva de
relojes, etc.). Este modelo es atractivo por su sencillez, y porque las
soluciones que se encuentren para él serán válidas en prácticamente cualquier
sistema. Además, en el mundo real, raramente es posible encontrar un sistema
que se comporte siempre como sistema síncrono. Es habitual que, por el
contrario, cargas inesperadas o puntuales conviertan un sistema en asíncrono,
al menos en esos momentos. Sin embargo, las soluciones para sistemas asíncronos
son también, habitualmente, más complejas, y a veces incluso no existen (por
ejemplo, en ellos es imposible resolver el problema del consenso en presencia
de fallos [FLP85]).
Por
supuesto, el modelo síncrono y el asíncrono son los dos extremos de un amplio
espectro. Otros modelos intermedios pueden ser también de interés. Por ejemplo,
aquél donde los procesos tiene velocidades acotadas y relojes sincronizados perfectamente
pero los retardos de los mensajes no están acotados [DDS87].
Un
proceso falla en su ejecución si se desvía de lo que prescribe el
algoritmo que está ejecutando. En caso contrario, el proceso es correcto.
El modelo de fallo especifica de qué formas puede un proceso desviarse del
funcionamiento correcto. Según [CASD85],
los modelos de fallo que se suelen considerar son los siguientes:
Figura 2.1: Diagrama que muestra
algunos modelos de fallo de procesos, y las relaciones de inclusión entre
ellos.

Estos
tipos de fallos representan diferentes niveles de ``severidad''. El más leve es
el de caída, y el más severo, y que incluye a todos los demás, el bizantino.
Por otra
parte, nada se ha dicho sobre los fallos que afectan al tiempo. Estos sólo son
de interés en sistemas síncronos, y habitualmente consisten, bien en derivas de
los relojes más grandes que las permitidas, o bien en violaciones de los plazos
en los que un proceso ejecuta un paso. Si incluimos estos fallos en la
clasificación anterior, podemos considerarlos más severos que los fallos de
omisión, pero menos que los bizantinos. La relación entre los cuatro tipos de
fallos (incluidos los de tiempo) es estudiada en [CAS86].
Puede
incluirse aún otro tipo de fallo, el debido a una computación incorrecta [Jal94].
Este es un subconjunto del tipo bizantino, pero que no implica fallo de tiempo,
sino que simplemente produce una salida incorrecta en respuesta a una entrada
dada.
En la
figura 2.1
se muestra un diagrama con las relaciones entre todos estos tipos de fallos.
Los tipos
de fallos que afectan al sistema de comunicaciones pueden clasificarse de una
forma muy similar a la utilizada para los procesos [HT93]:
Igual
que en el caso anterior, si consideramos sistemas síncronos, tenemos también la
posibilidad de fallos temporales (mensajes transmitidos más rápido o más
despacio que lo especificado).
En
general, una red de comunicaciones puede ser modelada como un grafo. Estudiando
el grafo se deducen propiedades interesantes como, por ejemplo, si es posible
que se produzcan particiones2.2. En muchos
casos, el comportamiento de un algoritmo estará influenciado por la topología
de la red.
Un
proceso puede modelarse como un autómata, de número de estados quizás infinito.
Si es determinista, basta con conocer la relación de transiciones de estado
para determinar el estado resultante de la ejecución de un paso cualquiera de
su computación. Sin embargo, si el proceso tiene un comportamiento no
determinista, la ejecución de un paso dado puede resultar en uno cualquiera de
varios estados posibles. En este caso la transición a cada uno de éstos suele
llevar asociada una función de probabilidad.
Una partición de red tiene lugar cuando
los nodos (máquinas) de una red se dividen en al menos dos conjuntos, con
máquinas que son capaces de comunicarse sólo con otras máquinas de su conjunto.