Introducción
La creciente
necesidad de comunicación a todos los niveles entre particulares y
organizaciones ha extendido el uso de los sistemas de comunicación entre
ordenadores, desde las redes de área local y las redes de área extensa
hasta Internet. En la actualidad el uso de ordenadores aparece
generalmente asociado al de algún sistema de comunicación, y es posible
disponer de grupos de ordenadores que presten conjuntamente un mismo
servicio. En el futuro encontraremos cada vez más redes heterogéneas de
ordenadores, con aplicaciones que compartan recursos geográficamente
distribuidos, fl uno de información y coordinación entre sus actividades.
Como prueba de esta tendencia encontramos ejemplos actuales en los
sistemas de reservas aéreas on-line o las aplicaciones de soporte a
trabajo colaborativo, como vídeo-conferencias. El concepto de sistema
distribuido, aparecido hace ya varias décadas, se puede defi nir como un
conjunto de ordenadores interconectados mediante una red que colaboran
para la realización de alguna tarea conjunta. Tales sistemas pueden estar
compuestos de pequeños ordenadores de bajo coste que combinen sus
capacidades. A diferencia de otros sistemas de ordenadores
interconectados, los ordenadores (nodos) que forman un sistema distribuido mantienen
un estado compartido. Esto requiere una coordinación entre ellos
para mantener ese estado consistentemente.
Las principales ventajas que ofrecen los sistemas distribuidos son:
·
Tolerancia a fallos. Una consecuencia de tal estado compartido es
precisamente la capacidad de los sistemas distribuidos para tolerar fallos en
alguno de sus componentes. En un sistema centralizado el estado se mantiene en
un único ordenador, el servidor, de modo que el fallo de este (o cualquier
reparación, sustitución, etc. a que deba someterse) hace que el sistema deje de
estar disponible. Por el contrario, un sistema distribuido cuenta con diversas
unidades de cómputo y gestión de recursos, y por tanto con una
menor probabilidad de fallo de todo el sistema, si bien es necesario un
esfuerzo especial de gestión para lograr que las aplicaciones no adviertan los
fallos de los distintos componentes.
·
Escalabilidad. Para aumentar la capacidad de servicio de un sistema
centralizado no existe más alternativa que sustituir el servidor por una máquina
más potente. En cambio un sistema distribuido puede aumentar su capacidad
añadiendo nuevos nodos al sistema existente.
A cambio de las ventajas ofrecidas,
sin embargo, los sistemas distribuidos son notablemente más complejos que los
centralizados. En particular es preciso contemplar en su diseño una serie de
cuestiones específicas:
·
Fallos en cada componente. En un sistema distribuido no existe un
servidor central cuyos fallos inutilicen el sistema. Sin embargo, cada uno de
los ordenadores que lo forma puede fallar independientemente. El sistema debe
diseñarse de modo que sus especificaciones sigan siendo respetadas aunque falle
algún componente aislado.
·
No fiabilidad de las comunicaciones. Igualmente el diseño debe tener en
cuenta la imperfección del sistema de comunicaciones entre nodos, y la
posibilidad de pérdidas, desorden y duplicación en los mensajes.
·
Coste de las comunicaciones. En general los canales de comunicación que
interconectan los distintos nodos de un sistema distribuido tienen mayor retardo
y coste que los que conectarían distintos procesos dentro del mismo ordenador.
·
Mantenimiento de la consistencia. Si la solución adoptada pasa por la
replicación, en cada uno de los nodos, de la información necesaria para que la
aplicación realice sus tareas, resulta imprescindible realizar una gestión
adecuada de la consistencia de cada una de las vistas que los diferentes nodos
tengan de esa información global. Esto obliga a que se incluya en el diseño
algoritmos específicos que proporcionen, en cada caso, las garantías
sufi cientes para el correcto
funcionamiento de las aplicaciones.
Asimismo, hay otros factores que difi
cultan el desarrollo de los sistemas distribuidos. Por una parte, la
programación en estos entornos es más compleja, y por tanto también la
depuración y gesteo del software son más costosos. Por otro lado, un
sistema distribuido cuenta con un mayor número de potenciales puntos de
intrusión, lo cual, unido a la posible inseguridad de la red de comunicaciones,
multiplica los riesgos para la seguridad del sistema y complica el diseño de un
sistema distribuido seguro.
ALTA DISPONIBILIDAD
En buena medida los
sistemas distribuidos se diseñan eliminar las limitaciones en el servicio
proporcionado debido a fallos en el servidor. Una forma de cuantifi car la
tolerancia a fallos de un sistema es mediante el concepto de disponibilidad.
Este parámetro representa el porcentaje de tiempo durante el cual el sistema se
encuentra operativo y depende tanto de la probabilidad de que se den fallos
como de la capacidad del sistema para recuperarse frente a estos. En función de
su valor se puede establecer una clasifiacción del grado de disponibilidad de
un sistema. Así se habla de alta disponibilidad cuando el tiempo en que el
sistema no está operativoes menor del 0.001‰ (menos de 30 segundos al año).
La técnica
fundamental para mejorar la disponibilidad de un servicio es la replicación de
los componentes que lo proporcionan. Cada réplica de un mismo componente se
ubicará en un nodo diferente del sistema, de modo que si un componente falla,
una de sus réplicas puede atender el servicio correspondiente. Para lograr esta
continuidad del servicio en caso de fallo, la replicación ha de apoyarse en una
serie de servicios complementarios, como el monitor de pertenencia, que vigila
el estado de los componentes del sistema para detectar y notifi car sus fallos
y recuperaciones, y los mecanismos de checkpoints, para realizar
actualizaciones de estado, lo cual generalmente requiere a su vez el uso de
algún soporte transaccional.
Existen diversas alternativas a la
hora de implementar replicación. Así hay que decidir cuántas réplicas se
incluirán, dónde estarán ubicadas, qué nivel de consistencia se exigirá entre
el estado de las distintas réplicas, etc. Todas estas opciones, que infl huirán
en el comportamiento ofrecido por el servidor, configuran un modelo de
replicación. Los más importantes son la replicación activa y la replicación
pasiva. En la primera, las peticiones enviadas al servicio se dirigen a todas
las réplicas, y cada una de ellas realiza idéntica tarea, actualiza su estado y
responde. En el segundo modelo, en cambio, solo una de las réplicas procesa las
peticiones y se encarga de actualizar el estado de las otras. Existen múltiples
variantes de cada modelo, así como modelos intermedios. La elección de uno u
otro depende del entorno en que se trabaje y del comportamiento deseado para el
servicio.
TITULO: Sistemas
Distribuidos
AUTOR: Marica
Carmen Bañuls, Luis Irun
FECHA DE ACCESO: 29
de septiembre 2014
Escalabilidad
Las diferentes
técnicas de replicación proporcionan, además, distintas características en
cuanto a la escalabilidad del sistema. Así, puede verse que la replicación
también sirve para aumentar la accesibilidad de la información, proporcionando
a los diferentes nodos del sistema la independencia necesaria para convertirse
en una unidad computacional activa en el sistema.
La forma en que se
integre cada unidad computacional en el sistema influye también en las
prestaciones y en la escalabilidad de los servicios que ofrezca este. Además,
la elección del modelo de replicación que se implante en el sistema deberá
tener en cuenta el tipo de uso que las aplicaciones del sistema distribuido
vayan a hacer de este.
Por ejemplo, si se
implanta el modelo de replicación pasivo, la escalabilidad del sistema será
mejor que la del modelo activo si las operaciones que se realizan sobre la
información replicada son mayoritariamente de escritura. Esto es porque el
modelo pasivo permite que cada nodo se responsabilice de los accesos a un
subconjunto de objetos, actuando así de réplica primaria para dicho
subconjunto. De esta forma, todos los nodos pueden hacer el papel de primario
para diferentes porciones de la información que replican.
Existen multitud de
técnicas para mejorar la escalabilidad y prestaciones del sistema, basadas en
diferentes aspectos y principios. El uso de diferentes métodos para la difusión
de las actualizaciones es una de las fuentes más comunes para ello. Por
ejemplo, si cuando un objeto es modificado se notifican los cambios
inmediatamente al resto de nodos, los costes serán mayores que si se retardan
las difusiones en el tiempo, con la esperanza de que se realicen más
modificaciones de ese objeto antes de difundir los cambios primeros (en este
caso, solo sería necesario realizar la última difusión, puesto que la primera
sería oculta por las siguientes).
Otras técnicas se
basan en los mecanismos de comunicación entre los distintos nodos del sistema.
Sobre todo para modelos de replicación del estilo del activo, una adecuada
elección de las primitivas de comunicación (incluyendo garantías y
características en cuanto a prestaciones y escalabilidad) puede determinar las
características del sistema.
Consistencia
La replicación,
como ya se ha visto, está palpablemente presente en el ámbito de los sistemas
distribuidos. Gracias a ella es posible, por ejemplo, proporcionar tolerancia a
fallos, e incrementar las prestaciones y escalabilidad del sistema. Sin embargo,
las técnicas de replicación deben incluir los mecanismos necesarios para
proporcionar garantías acerca de la consistencia de la información que se
replica.
Podríamos definir
la consistencia como las garantías que se proporcionan acerca de la visibilidad
de los cambios realizados en la información que se replica. Idealmente, cuando
en un sistema replicado uno de los nodos realiza una modificación, esta
modificación debería poder ser observada en todos y cada uno de los nodos antes
de poder realizar ninguna otra operación.
La necesidad de
proporcionar estas garantías, sin embargo, entra en conflicto directo con la
escalabilidad del sistema, y puede llegar a comprometer las prestaciones
alcanzables con un sistema distribuido.
Es por esto que se
han definido múltiples relajaciones de la consistencia, que proporcionan al
sistema las garantías suficientes para su buen funcionamiento sin comprometer
más de lo imprescindible sus prestaciones.
Algunas de estos
modos de consistencia son:
·
Consistencia Total. Es la más estricta, garantizando que todas las
operaciones se realizan de forma atómica en cada uno de los nodos del sistema,
difundiendo sus efectos antes de que ninguna otra operación se inicie. De este
modo, todos los nodos observan los cambios en el mismo orden, que coincide con
el orden global en que se realizan.
·
Consistencia Secuencial. Es similar al anterior, con la diferencia de
que el orden en que se aplican los cambios no tiene por qué coincidir con el
orden real en que se realizaron. Sin embargo, la consistencia Secuencial
continúa exigiendo que todos los nodos coincidan en dicho orden.
·
Consistencia Causal. Es una nueva relajación de las anteriores, en la
que se permite que operaciones iniciadas en diferentes nodos sean difundidas en
órdenes distintos, si no existe entre ellas una dependencia “causa – efecto”.
Así, el orden en que se aplican las operaciones puede variar en dos nodos
distintos si las diferencias no afectan la causalidad de las operaciones.
·
Consistencia Débil. Hace uso de variables de sincronización, a las que
los diferentes nodos acceden siguiendo una consistencia secuencial,
garantizando que no se obtiene acceso a una variable de sincronización hasta
que todas las escrituras previas han sido difundidas a todos los nodos. En
otras palabras, las variables de sincronización permiten hacer un volcado de
las escrituras de cada nodo, respetando una consistencia secuencial.
La gestión de la
consistencia no es pues una tarea simple, y supone un sobreesfuerzo en el
diseño de un sistema distribuido, así como un sobrecoste en cuanto a las
prestaciones que el sistema pueda ofrecer.
Aplicaciones
distribuidas
Las aplicaciones
distribuidas son aquellas construidas sobre sistemas distribuidos, con las
consiguientes ventajas potenciales en cuanto a rendimiento, disponibilidad y
escalabilidad. En general es deseable que los aspectos de mayor complejidad del
sistema distribuido queden ocultos a la aplicación:
·
Localización. El usuario no necesita conocer la localización física de
un objeto en el sistema. Asimismo, el acceso a objetos locales o remotos se
realiza del mismo modo.
·
Replicación. El usuario no precisa conocer el grado de replicación de un
objeto (ni siquiera si está replicado), ni el modelo en que tal replicación
está implementada.
·
Fallos. El sistema debe enmascarar (al menos en cierto grado) los fallos
de alguno de sus componentes de modo que la prestación del servicio continúe.
·
Concurrencia. El acceso a recursos compartidos paralelamente por
diversos usuarios requiere una sincronización por parte del sistema.
Si el sistema
distribuido cumple estos requisitos de transparencia, el programador de
aplicaciones no ha de preocuparse de tales detalles, sino de utilizar los
recursos que le ofrece el sistema. Del mismo modo, la aplicación no precisaría
ser modificada por el hecho de que el sistema esté compuesto por máquinas
heterogéneas, ni por el hecho de que se decida añadir nuevos nodos para su
extensión.
Dependiendo del
soporte a replicación adoptado, las aplicaciones pueden ser específicas para el
sistema operativo distribuido sobre el que se construyen o bien aprovechar las
características de alta disponibilidad facilitadas por una capa de middleware.