SISTEMAS DISTRIBUIDOS

Anuncio
CURSO
SISTEMAS
DISTRIBUIDOS
Sistemas Distribuidos
1
Ing. Einar TURPO AROQUIPA
1. Introducción:
1.1. Fundamentos:
¿Qué es un Sistema Distribuido?
Antes de definir lo que es un Sistema Distribuido, vamos a definir un término más
general: La Computación Distribuida, podemos definirla de muchas maneras, este
término se utiliza indiscriminadamente para referirse a cualquier sistema en el que
múltiples agentes autónomos, cada uno con capacidades de cómputo individual,
se comunican entre sí y afectan mutuamente su comportamiento. Los agentes,
usualmente llamados procesadores, procesos o nodos, pueden ser desde
computadoras completas hasta autómatas celulares con capacidad de cómputo y
memoria muy limitados que se pueden comunicar mediante mensajes.
La Computación Distribuida hace referencia a cualquier evento en el cual se
maneja un sistema en una red de computadoras y trata de describir las tendencias
hacia la funcionalidad distribuida: sistemas distribuidos, procesamiento
distribuido, bases de datos distribuidas y cualquier otro término computacional
que sea distribuido. Podemos decir entonces, que la Computación Distribuida se
refiere a los servicios que provee un Sistema de Computación Distribuido.
Una de las primeras caracterizaciones de un Sistema Distribuido fue realizada por
Enslow, ya en 1978, que le atribuye las siguientes propiedades:
o Está compuesto por varios recursos informáticos de propósito general, tanto
físicos como lógicos, que pueden asignarse dinámicamente a tareas
concretas.
o Estos recursos están distribuidos físicamente, y funcionan gracias a una red
de comunicaciones.
o Hay un sistema operativo de alto nivel, que unifica e integra el control de los
componentes.
o El hecho de la distribución es transparente, permitiendo que los servicios
puedan ser solicitados especificando simplemente su nombre (no su
localización).
o El funcionamiento de los recursos físicos y lógicos está caracterizado por
una autonomía coordinada.
A pesar del tiempo transcurrido, esta definición sigue siendo, en esencia, válida.
Así, para Coulouris un sistema distribuido es aquél que está compuesto por varias
computadoras autónomas conectadas mediante una red de comunicaciones y
equipadas con programas que les permitan coordinar sus actividades y compartir
recursos. Bal ofrece una definición muy similar: ``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, todo sistema distribuido tiene
tres características básicas:
Sistemas Distribuidos
2
Ing. Einar TURPO AROQUIPA
o Existencia de varias computadoras. En general, cada una con su propio
procesador, memoria local, subsistema de entrada/salida y quizás incluso
memoria persistente.
o Interconexión. Existen vías que permiten la comunicación entre las
computadoras, a través de las cuales pueden transmitir información.
o Estado compartido. Las computadoras cooperan para mantener algún tipo
de estado compartido. El funcionamiento correcto del sistema se describirse
como el mantenimiento de una serie de invariantes globales que requiere la
coordinación de varias computadoras.
Como lo hemos observado, el término de Computación Distribuida se define de
varias maneras y lo mismo se aplica al término de Sistema Distribuido, así que en
lugar de seguir dando más definiciones de estos términos, nos concentraremos en
el análisis de las características más importantes de los Sistemas Distribuidos, de
esta manera podremos construir una definición propia de lo que es un Sistema
Distribuido al finalizar este capítulo.
Una característica muy importante es que las diferencias entre las computadoras y
las maneras en que estas se comunican no son transparentes para el usuario final,
esto mismo aplica para la organización interna del sistema distribuido. Otra
característica importante es que los usuarios y las aplicaciones pueden interactuar
con un Sistema Distribuido de manera consistente y uniforme, sin importar donde
y cuando se lleve a cabo la interacción.
Todo Sistema Distribuido bebe también ser relativamente fácil poder expandir, lo
cual se logra al tener computadoras independientes, pero al mismo tiempo
“esconder” las funciones de dichas computadoras en el sistema. Normalmente un
sistema distribuido debe de estar siempre disponible a pesar de que ciertas partes
que lo conforman puedan no estar funcionando. Los usuarios y las aplicaciones
no deben de notar en ningún momento que estas partes están siendo
reemplazadas o reparadas, o que se han agregado nuevas partes al sistema para
poder dar servicio a más usuarios o aplicaciones.
Características de un Sistema Distribuidos:
Cualquier diseñador de sistemas debe tener los conocimientos necesarios para
enfrentarse a todas las complicaciones que pueden surgir al momento de
considerar los requerimientos para el desarrollo de un sistema distribuido. A
continuación explicaremos cada una de las características de los Sistemas
Distribuidos, según Coulouris son estas características, los desafíos que presentan
los sistemas distribuidos.
a) Heterogeneidad:
Al hablar de heterogeneidad nos referimos a la variedad y diferencia que
podemos encontrar en los elementos que componen una red de computadoras
sobre la que se ejecuta un sistema distribuido, dicha heterogeneidad no sólo
se aplica a las redes y al hardware de las computadoras, sino también a los
Sistemas Distribuidos
3
Ing. Einar TURPO AROQUIPA
sistemas operativos, los lenguajes de programación y las implementaciones en
las que trabajan los diferentes desarrolladores.
Un ejemplo de esto lo podemos ver muy claro en Internet, ya que es una red
que esta conformada por muchos tipos de redes (Figura 1) cuyas diferencias
se encuentran enmascaradas, puesto que todas las computadoras que se
conectan a este utilizan los protocolos de Internet para comunicarse una con
otra, así una computadora conectada a una red Ethernet puede comunicarse
con otra computadora conectada a una red TokenRing, basta con que se haga
una implementación de los protocolos de Internet para cada una de esas
redes.
Figura 1. Un esquema clásico de la conexión a Internet
Otro ejemplo lo podemos ver en los lenguajes de programación y en las
aplicaciones escritas por diferentes programadores; en el caso de los
lenguajes de programación es importante tener en cuenta las diferencias que
puede haber en la representación de los caracteres y estructuras de datos
como cadenas de caracteres y registros, las cuales pueden variar y pueden
ocasionar conflictos entre programas que necesitan comunicarse entre ellos.
De igual manera dos programas que son desarrollados por programadores
diferentes tienen que utilizar estándares comunes para la comunicación en red
y para la representación de los datos elementales y las estructuras de datos en
los mensajes, ya que si no se cuenta con dichas similitudes, los programas no
podrán comunicarse entre sí aunque se hayan desarrollado en el mismo
lenguaje de programación.
Un término que no podemos dejar de mencionar al hablar de heterogeneidad
es el de Middleware (Figura 2); este término se aplica a la capa de software
que provee una abstracción de programación, así como un enmascaramiento
de la heterogeneidad subyacente de las redes, hardware, sistemas operativos y
lenguajes de programación; además, el Middleware proporciona un modelo
computacional uniforme al alcance de programadores de servidores y
Sistemas Distribuidos
4
Ing. Einar TURPO AROQUIPA
aplicaciones distribuidas que permite la invocación sobre objetos remotos,
notificación de eventos remotos, acceso a bases de datos remotas y
procesamiento distribuido de transacciones. Algunos ejemplos de Middleware
son CORBA y Java RMI.
Figura 2. Un sistema distribuido organizado como Middleware
Otro término importante para este apartado es el de código móvil, que se
emplea para referirse al código que pude ser enviado de una computadora a
otra para que esta última la ejecute, un ejemplo de un código móvil son los
applets de java, que son enviados del servidor a la computadora del cliente
para que este los ejecute en su explorador de Internet. Al implementar un
código de este tipo podemos encontrarnos con el problema de que el conjunto
de instrucciones (a nivel máquina) de una computadora puede no ser el
apropiado para otra máquina, por ejemplo, un usuario de una PC puede enviar
un archivo ejecutable a un usuario de Linux y este último no será capaz de
ejecutar dicho archivo. Para solucionar este problema se han creado lo que se
conocen como máquinas virtuales, las cuales proveen un modo de crear
código ejecutable sobre cualquier hardware, ya que el compilador de un
lenguaje concreto generará un código para una máquina virtual y esta se
encargará de “traducir” dicho código al apropiado para un hardware particular,
así, un compilador de Java producirá un código para la máquina virtual de
Java, y esta última sólo necesitará ser implementada una sola vez para cada
máquina en la que se va a ejecutar.
b) Extensibilidad y Apertura:
La extensibilidad y la apertura son dos características de un sistema
distribuido que están ampliamente ligadas la una con la otra. Algunos autores
dicen que un sistema abierto debe de ser extensible y otros sostienen que un
sistema extensible puede ser etiquetado como un sistema abierto. De cualquier
manera lo que es importante saber y tener en cuenta es que un sistema
distribuido debe de contar con ambas características.
Un sistema distribuido abierto es un sistema que ofrece servicios
desarrollados de acuerdo a reglas estandarizadas que describen la sintaxis y la
semántica de dichos servicios. Por ejemplo, en una red de computadoras,
estas reglas son las que regulan el formato, contenido y significado de los
mensajes que se envían y se reciben a través de dicha red. Estas reglas son
Sistemas Distribuidos
5
Ing. Einar TURPO AROQUIPA
formalizadas en protocolos. En el caso de los sistemas distribuidos, los
servicios se especifican generalmente a través de interfaces que por lo general
son descritas en un Lenguaje de Definición de Interfaz (IDL por sus siglas en
ingles), dicho lenguaje especifica los nombres de las funciones que están
disponibles así como los parámetros de entrada, los valores de salida y los
posibles errores que pueden obtenerse al invocarse dichas funciones.
Si la definición de una interfaz se hace de manera adecuada, esta permitirá que
dos procesos puedan comunicarse entre sí, siempre y cuando ambos
procesos cuenten con la misma interfaz. Esto también permite que cada dos
desarrolladores independientes construyan su propia implementación de
dichas interfaces, lo cual conlleva al desarrollo de dos sistemas distribuidos
desarrollados por separado que operan de la misma manera.
Una especificación se considera adecuada cuando es completa y neutral.
Completa significa que todo lo necesario para hacer una implementación de la
interfaz ha sido especificado y que no será necesario que el propio
desarrollador sea quien agregue detalles específicos de la implementación.
Neutral significa que las especificaciones no deben tener ninguna tendencia
hacia como se debe de hacer la implementación de dicha especificación. La
completitud y la neutralidad son muy importantes para la interoperabilidad y la
portabilidad, que son características que complementan la apertura de un
sistema distribuido. La interoperabilidad, también conocida como
compatibilidad, caracteriza el grado en el que la implementación de sistemas o
componentes de diferentes fabricantes pueden coexistir y trabajar juntos,
siempre y cuando se utilicen los servicios como este especificado por el
estándar común bajo el cual dichos sistemas fueron desarrollados. La
portabilidad por su parte caracteriza a que nivel puede ser ejecutada una
aplicación desarrollada para un sistema distribuido “A” sobre un sistema
distribuido “B” que implementa las mismas interfaces del sistema “A”, pero
sin hacerle modificaciones.
Uno de los principales objetivos que se persiguen al desarrollar un sistema
operativo abierto, es que este sea flexible, lo que implica que dicho sistema
puede ser integrado por diferentes componentes (tanto de hardware como de
software), posiblemente de diferentes proveedores, que nuevos componentes
pueden agregarse al sistema y que componentes existentes pueden ser
reemplazados sin afectar el funcionamiento de los componentes ya existentes,
en otras palabras, un sistema distribuido abierto debe de ser extensible.
Para lograr la flexibilidad en un sistema distribuido abierto es necesario que el
sistema este organizado en módulos o componentes relativamente pequeños y
fáciles de reemplazar, esto implica que además de definir las especificaciones
y la documentación de las interfaces de alto nivel a las que tienen acceso los
usuarios y las aplicaciones, también es necesario definir las especificaciones
de las interfaces de las partes internas que componen el sistema y describir de
que manera interactúan entre sí.
Sistemas Distribuidos
6
Ing. Einar TURPO AROQUIPA
c) Seguridad:
La gran mayoría de la información que maneja un sistema distribuido tiene un
alto valor para los usuarios de dicho sistema, y es por eso que la seguridad de
la información juega un papel clave al momento de desarrollar dicho sistema.
La seguridad de la información es todo lo que concierne a asegurar que no
ocurrirán cosas malas con los mensajes que envían los clientes para solicitar
información a un servidor, y por su puesto, con la información que estos
reciben como respuesta a sus peticiones. No basta con asegurar que estos
mensajes serán transmitidos de forma oculta, sino que también hay que
asegurar que la información sea entregada únicamente a quien debe de ser
entregada y que esto se hará siempre de forma correcta y en el momento en
que se requiere. La seguridad es relativa a la amenaza que cada sistema
afronta, afecta a todos los puntos del sistema y debe de ser fácil de obtener.
La seguridad debe ofrecer los siguientes servicios:
o Confidencialidad, es decir, el manejo privado de la información:
proteger la información de ser accedida por usuarios no autorizados.
o Autentificación, o capacidad de asegurar la identidad de un usuario.
o Integridad, que asegura que la información que empleamos no ha sido
manipulada, alterada o corrompida desde el origen.
o No repudio, de una operación de emisión y recepción de información
por parte de los agentes.
o Control de acceso a la información y/o recursos administrados por un
sistema.
o Disponibilidad de los recursos necesarios de un sistema cuando estos
sean requeridos, lo que protege la información contra interferencia con
los procedimientos de acceso a los recursos.
El alto valor de que tiene la información es la razón principal por la que esta se
puede ver amenazada de muchas formas, entre las principales podemos
encontrar:
Interrupción: Destruye la información o la inutiliza. Ataca la disponibilidad.
Interceptación: Obtiene acceso a información. Ataca la confidencialidad.
Sistemas Distribuidos
7
Ing. Einar TURPO AROQUIPA
Modificación: Modifica la información. Ataca la integridad.
Fabricación: Falsifica la información. Ataca la autenticidad.
Para defenderse de este tipo de amenazas se han desarrollado diversas
técnicas de encriptación, firmas digitales, implementación de barreras
perimetrales (firewalls), modelos de seguridad internos y externos, etc. Sin
embargo, estas técnicas parecen no ser suficientes para evitar que intrusos
logren interferir con el flujo de información óptimo de un sistema, ya que
encuentran formas de “brincarse” las barreras de seguridad de muchas
organizaciones y además siguen ideando nuevas formas de atacar y amenazar
la información, un ejemplo de estos nuevos ataques son los ataques de
denegación de servicio. Estos ataques consisten en bombardear un servicio
con un gran número de peticiones simultáneas (y por lo general inútiles) de
modo que el sistema se colapse, obstaculizando el servicio a los usuarios que
desean utilizarlo. Como hoy en día la capacidad de los sistemas distribuidos
ha crecido mucho, en ocasiones resulta muy difícil o incluso imposible
bloquear el servicio utilizando una sola computadora atacante, por lo que
ahora se han desarrollado los ataques de denegación de servicio distribuidos,
los cuales hacen uso de miles o incluso millones de computadoras para
generar las peticiones al sistema que se desea bloquear, por lo que bloquear
un ataque de esta magnitud resulta sumamente complicado.
Si bien no podemos asegurar que un sistema distribuido sea cien por ciento
seguro, es importante contar con un esquema de seguridad lo más robusto
posible, que a pesar de no ser inmune a todo tipo de ataques, si será capaz de
frenar la gran mayoría de dichos ataques. Algunas recomendaciones muy
útiles para los desarrolladores, administradores e implementadotes de un
sistema distribuido se presentan a continuación:
Sistemas Distribuidos
8
Ing. Einar TURPO AROQUIPA
o Efectuar un análisis de riesgos
Esto se suele mencionar en la literatura como el primer paso a realizarse
cuando se plantea la seguridad en un sistema. La idea es muy sencilla:
trazar todos los elementos que conforman nuestro sistema (hardware y
software) y observar cuáles involucran más o menos riesgo. Esto
desembocará en un plan de seguridad cuyo objetivo es disminuir el
riesgo total del sistema, que se puede modelar como la suma de los
riesgos de sus componentes:
RIESGO TOTAL = RIESGO (componente 1) + RIESGO (componente 2)...
El riesgo de cada componente está en función directa a las pérdidas que
ocasionaría el que éste deje de operar, así como en función de cuán
vulnerable es dicho componente en este momento. Por ejemplo, una
base de datos de clientes involucra un gran riesgo debido al gran valor
que la información representa para una organización; pero una simple PC
Windows de la misma organización conectada directamente al Internet
(sin firewall/proxy de por medio) también lo representa, debido a que
puede ser objeto de un ataque desde el exterior, con el posible riesgo de
fácil propagación hacia otros computadores de nuestra red.
o Lo más valioso debe alejarse de lo más vulnerable
En la fórmula del "riesgo" propuesta arriba, es evidente que los
componentes de nuestro sistema con alto valor y alta vulnerabilidad
serán de lejos los que presenten mayor riesgo. Sin embargo, en muchos
casos no es sencillo disminuir el valor de cierto componente (y por tanto
la pérdida en caso de problemas), y tampoco se puede eliminar
completamente la vulnerabilidad del mismo (por ejemplo, si está de cara
a Internet.) En este caso lo que conviene es separar o dividir este
componente en dos partes suficientemente alejadas e independientes a
fin de que el riesgo total disminuya. Por ejemplo, los portales de
comercio electrónico deben dar cara a Internet (siendo vulnerables en
principio) y a la vez manejar información muy costosa (como
transacciones con tarjeta de crédito.) Esto los convierte en un sistema de
alto riesgo. Sin embargo es casi universal la separación que se efectúa
entre los componentes dedicados a dar cara a Internet (como los Web
Servers) y los componentes que manipulan la información comercial
(generalmente sistemas DBMS.) En términos prácticos, esto significa que
el hacker no puede acceder directamente al DBMS (lo que sería
catastrófico), y sólo podría atacar al Web Server, lo que en principio no
acarrea mayores consecuencias.
o Mantener las cosas simples
Un sistema complejo es más difícil de asegurar y potencialmente
proporciona una mayor cantidad de puertas abiertas a los atacantes. En
general, es recomendable intentar dividir el problema mediante la
Sistemas Distribuidos
9
Ing. Einar TURPO AROQUIPA
simplificación de la configuración, para así identificar los puntos o rutas
de control vulnerables para incrementar la seguridad.
La seguridad debe estar en todos los niveles.
Esto se puede expresar más sencillamente como: no confiar el sistema a
un único mecanismo de seguridad.
La información fluye a través de los distintos componentes y/o capas del
sistema y son muchas las instancias en las que se puede mejorar su
seguridad. La recomendación estipula que utilicemos todas estas
instancias a pesar de que en principio puedan parecer redundantes. Por
lo general los administradores tienden a preocuparse por un único punto
de acceso desde donde supuestamente hay una gran probabilidad de ser
atacados (por ejemplo, la conexión a Internet.) Por tanto se invierte
esfuerzo y dinero en controlar este único punto bajo la asunción de que
es la única puerta de entrada a los maleantes y que por tanto, tras
asegurarla, todo el sistema quedará seguro. Esto tiene dos problemas:
Muchos ataques o "vulnerabilidades" se originan (de forma inocente o
intencional) desde dentro de la organización.
El sistema que controla la "puerta" siempre puede fallar.
Esto obliga a implementar la seguridad no en un único punto
evidentemente vulnerable, sino en todos los lugares por donde fluye la
información al interior de cada componente involucrado.
Encriptar tanto como sea posible
La encriptación es un tema complejo pero cuya implementación resulta cada
vez más sencilla conforme aparecen más productos. Los cambios del año
pasado en la legislación norteamericana con respecto a la exportación de
productos que encriptan, son un incentivo claro para que los desarrolladores y
vendedores se interesen más en el tema.
En general, los canales de comunicación más vulnerables o de mayor cercanía
al público requieren una encriptación "más fuerte", es decir, más difícil de
descifrar por los curiosos o atacantes. Cierta información conlleva más riesgo
que otra, y por tanto requerirá un nivel de encriptación diferenciado. Las
herramientas capaces de hacer esto son muchas, dependiendo del contexto en
que nos encontremos. Por ejemplo, los sistemas DBMS más avanzados
incorporan la encriptación como una opción normal para los datos
almacenados, generalmente bajo esquemas propietarios.
La tecnología de encriptación de información destinada a pasar a través de la
red ha evolucionado bastante, haciéndose popular el término VPN para hacer
referencia a canales que encriptan la información de un modo más o menos
Sistemas Distribuidos
10
Ing. Einar TURPO AROQUIPA
transparente. Hay soluciones propietarias así como estándares relativamente
implementados como IP Sec. Ciertas aplicaciones estándares han recibido
soluciones de encriptación también estándar. El caso del Web encriptado bajo
SSL (HTTPS) junto con la industria de certificados digitales es el caso más
conspicuo. De igual modo los estándares para correo electrónico PGP (o
derivados) y S/MIME son integrados cada vez con mayor frecuencia en las
aplicaciones de los usuarios finales.
En nuestra organización deberíamos encriptar todo lo que sea posible. La
razón de esto es evidente si de lo que se trata es de enviar un mensaje
privado por Internet. Sin embargo, al interior de la organización la encriptación
puede ayudar también. Naturalmente hay que sopesar los inconvenientes que
trae la encriptación en términos de incomodidad de uso, costo de licencias,
ciclos de CPU, etcétera; con el hecho de que cierta información es
definitivamente de carácter público y por tanto no tiene sentido que esté
encriptada.
Además de estas hay muchas más recomendaciones de seguridad que
podemos mencionar, por ejemplo: no confiar en la autenticación estándar, no
usar la configuración "estándar", educar a los usuarios, ejecutar sólo los
servicios imprescindibles, mantenerse al día con las actualizaciones y hacer
chequeos regulares, establecer planes de contingencia y sistemas de respaldo,
mantener contacto con el proveedor de líneas de comunicación, no permitir
conexiones directas desde la red interna a Internet, hacer uso de una red
perimétrica o zona desmilitarizada, prácticas de programación segura,
vigilancia, establecimiento de políticas, etc.
d) Escalabilidad:
La escalabilidad es una de las características más importantes para los
desarrolladores de un sistema distribuido. Se dice que un sistema es escalable
si logra conservar su efectividad cuando hay el número de recursos y el
número de usuarios incrementa significativamente. La escalabilidad de un
sistema pude medirse en tres aspectos diferentes:
Con respecto a su tamaño: lo que significa que se pueden agregar más
usuarios y más recursos al sistema de una manera muy fácil.
Con respecto a su localización o área de implementación: lo que significa que
tanto los usuarios como los recursos pueden estar en locaciones remotas y
separadas el uno del otro.
Con respecto a su administración: lo que significa que puede ser fácil de
administrar a pesar de que se utiliza en diferentes organizaciones
independientes que cuentan con diferentes políticas de seguridad y que hacen
un uso particular del sistema. Desafortunadamente, un sistema que es
escalable en uno o más de estos aspectos por lo general afecta el rendimiento
del sistema conforme al crecimiento del mismo.
Sistemas Distribuidos
11
Ing. Einar TURPO AROQUIPA
Problemas de la Escalabilidad
Cuando se necesita escalar un sistema a un nivel más alto es muy común que
surja algún tipo de problema. Si consideramos la escalabilidad con respecto al
tamaño de un sistema, nos encontramos con las limitaciones que presentan
los servicios, los datos y los algoritmos centralizados.
En muchos sistemas distribuidos es común encontrar servicios centralizados,
es decir, que son implementados en un mismo servidor, lo que puede
ocasionar un problema muy obvio: este servidor puede convertirse en un
cuello de botella si el número de usuarios crece, y a pesar de tener una
capacidad de procesamiento y almacenamiento virtualmente ilimitada, la
comunicación con este servidor puede llegar a tener un límite y eventualmente
impedir el crecimiento del sistema. Desafortunadamente el uso de un sólo
servidor puede ser inevitable, ya que por lo general tenemos servicios que
trabajan con información muy sensible y que tiene que ser lo más segura
posible, por lo que el tener esta información almacenada en diferentes
servidores puede llegar a poner la información en riesgo y hacer el sistema
más vulnerable.
De la misma manera, el almacenamiento centralizado de la información puede
ser un grave problema para un sistema distribuido, ya que a pesar de que un
sólo servidor nos puede ofrecer la capacidad de almacenamiento que
necesitamos, es muy poco probable que dicho servidor permita el acceso
simultáneo a miles o incluso millones de usuarios que desean consultar la
información almacenada en él. Un ejemplo de esto es el Sistema de Nombre
de Dominio, que a pasar de poder almacenar todos los registros en una sola
base de datos de varios gigabytes, no podría dar una respuesta a los millones
de usuarios de Internet que accedan este servicio simultáneamente.
El uso de algoritmos centralizados es en teoría la solución óptima a un
problema de computación distribuida, sin embargo, en la práctica podemos
ver que el uso de este tipo de algoritmos en un sistema distribuido grande no
es una buena idea, ya que colectar y transportar los datos de entrada y salida
del sistema hacia un sólo punto en el que se computan dichos datos pudiese
sobrecargar parte de la red con todos los mensajes que necesita enviar y
recibir, además de que el computo de toda la información en una sola
máquina tiene más riesgo a fallos y puede resultar más tardada. La solución a
este problema es el uso de algoritmos descentralizados, los cuales cuentan
con ciertas características que los diferencian de los algoritmos centralizados,
entre las que podemos mencionar:
Ninguna máquina tiene información completa del estado del sistema.
Cada máquina toma decisiones propias basándose solamente en información
local.
Problemas o fallos de una máquina no arruinan el procesamiento de todo el
algoritmo.
Sistemas Distribuidos
12
Ing. Einar TURPO AROQUIPA
No necesariamente se cuenta con un reloj global (algoritmos no
sincronizados).
A pesar de que en una LAN pudiese sincronizarse la ejecución de un algoritmo
descentralizado, este mismo procedimiento pudiese ser muy complicado o
incluso imposible si el algoritmo esta distribuido en una red más amplia, por
lo que no se debe de depender en la existencia de un reloj global para hacer
posible la ejecución de un algoritmo de este tipo.
Por otro lado tenemos los problemas de la escalabilidad con respecto a la
localización o área de implementación de un sistema distribuido. Una de las
principales razones por las cuales resulta difícil escalar los sistemas
distribuidos que existen actualmente, es que dichos sistemas fueron diseñados
para trabajar redes de acceso locales (LANs) y que están basados en una
comunicación síncrona. En este tipo de comunicación el cliente hace la
solicitud de un servicio y hace un bloqueo de la comunicación hasta que
recibe la respuesta. Este acercamiento por lo general trabaja bien en LANs en
las que la comunicación entre dos máquinas por lo general no toma más de
algunos cientos de microsegundos. En el caso de las WANs, tenemos que
tomar en cuenta que la comunicación entre los procesos pudiese tomar varios
cientos de milisegundos, lo que representa un alentamiento muy considerable
del sistema.
Otro problema a considerar es que la comunicación en una WAN es poco
confiable y en la gran mayoría de los casos es punto a punto, al contrario de
las redes locales que generalmente son muy confiables y permiten hacer
difusiones o transmisiones de tipo “broadcast”, lo que hace mucho más fácil
el desarrollo de sistemas distribuidos.
La escalabilidad con respecto a la localización o área de implementación esta
directamente relacionada con los problemas de soluciones centralizadas
comentados anteriormente. Si tenemos un sistema con muchos componentes
centralizados, es muy claro que la escalabilidad del área de implementación
será imitada gracias a los problemas de desempeño y confiabilidad que trae
consigo la implementación en un área de redes extensa. Además, los
componentes centralizados también provocan el desperdicio de recursos de
red.
Finalmente, podemos mencionar los problemas que acarrea la escalabilidad de
la administración de un sistema distribuido. Este problema se da cuando un
sistema distribuido de expande a otro dominio, que por lo general contará con
diferentes políticas de uso y pago de recursos, administración y seguridad.
Por lo general cuando esto pasa se deben de tomar al menos dos tipos de
medidas de seguridad:
El sistema distribuido tiene que protegerse de ataques malignos provenientes
del nuevo dominio, y restringir el acceso a los servicios y datos que no están
a disponibilidad de los usuarios del mismo.
Sistemas Distribuidos
13
Ing. Einar TURPO AROQUIPA
El nuevo dominio tiene que protegerse de ataques malignos provenientes del
sistema distribuido. Básicamente, el nuevo dominio no sabe que tipo de
información puede esperar del código enviado por el nuevo dominio por lo
que pudiera decidir limitar los permisos de acceso a dicho código.
Técnicas de Escalabilidad
Una vez que mencionamos ya los problemas de la escalabilidad, analizaremos
algunas maneras de solucionar dichos problemas. Como los problemas de
escalabilidad de los sistemas distribuidos se manifiestan como problemas de
rendimiento causados por la capacidad limitada de servidores y de las redes
de comunicaciones, existen solamente tres técnicas de escalabilidad: eliminar
la latencia de las comunicaciones, distribución y replicación.
Eliminar la latencia de las comunicaciones es útil en el caso de querer lograr la
escalabilidad geográfica de un sistema, la idea básica es simple: tratar de
evitar la espera de respuestas a las peticiones que se hagan a servicios
remotos lo más que se pueda. Esencialmente, esto significa que se tiene que
construir la aplicación que realiza las peticiones de tal manera que use
solamente métodos de comunicación asíncronos, es decir, que el cliente envía
la petición al servidor, mientras espera la respuesta el cliente aprovecha ese
tiempo para realizar tareas locales más importantes y cuando recibe la
respuesta del servidor, el proceso que se estaba realizando se interrumpe y se
atiende la respuesta recibida. Esta solución parece fácil, sin embargo, hay
muchas aplicaciones que no pueden hacer un uso efectivo de la comunicación
asíncrona, por ejemplo, aplicaciones interactivas en las que el usuario no tiene
nada mejor que hacer más que esperar la respuesta del servidor, por que esta
se tiene que dar lo más rápido que sea posible. En dichos casos, es mucho
mejor solucionar el problema de la latencia reduciendo el tráfico generado
entre el cliente y el servidor cuando se comunican entre sí; esto lo podemos
lograr moviendo parte de la computación que normalmente se hace del lado
del servidor al cliente, para que así sea el mismo proceso que hace la solicitud
del servicio quien tenga que procesarlo.
Otra técnica importante para lograr la escalabilidad es la distribución, que
consiste en tomar un elemento, separarlo en partes pequeñas y distribuir esas
partes en todo el sistema. Un ejemplo de un sistema distribuido que hace uso
de la distribución es el servicio de nombre de dominio (DNS), el cual esta
distribuido en diferentes servidores que permiten el acceso a la misma
información a todos los usuarios, sin necesidad de tener un sólo servidor que
proporcione este servicio.
En la mayoría de los casos, los problemas de escalabilidad los vemos
reflejados en el rendimiento del sistema, por lo que generalmente la
replicación de los componentes del sistema distribuido puede resultar ser una
buena idea. La replicación aumenta la disponibilidad de los componentes del
sistema y además ayuda a balancear la carga entre los componentes que se
replican, con lo que se logra una mejora del rendimiento del sistema. Si
consideramos un sistema que se encuentra distribuido en una red muy
Sistemas Distribuidos
14
Ing. Einar TURPO AROQUIPA
extensa, el hecho de tener una copia de algún componente más cerca, también
mejora el rendimiento del sistema puesto que soluciona los problemas de
latencia de las comunicaciones que ya mencionamos anteriormente.
Una forma especial de replicación es el Cacheo, el cual consiste en guardar
una copia de algún recurso (por lo general, de datos) de forma temporal en un
lugar cercano al cliente, para que éste lo pueda acceder más fácilmente. En
contraste con la replicación, el cachear un recurso es una decisión que es
tomada por el cliente, y no por los diseñadotes del sistema. Un problema muy
serio que puede traer el cacheo, es que las copias que se hacen del recurso (o
de datos) pueden no actualizarse a su debido tiempo, por lo que al haber
varias copias diferentes del mismo recurso, lo que provoca problemas de
consistencia dentro del sistema; el nivel de inconsistencia que pueda ser
tolerado por un sistema depende del uso que se le da a al recurso que se esta
replicando, en el caso de páginas Web estáticas, por ejemplo, pudiese ser
bastante tolerable, sin embargo, en el caso de páginas dinámicas o de
sistemas en tiempo real, la replicación puede traer consigo muchos
problemas.
e) Tratamiento de Fallos:
El fallo tanto del hardware como el software es algo prácticamente inevitable, y
por más confiable que pueda parecer algún componente, siempre es
importante estar preparado para cuando este falle. En un sistema centralizado
por lo general el fallo de cualquier componente del sistema provoca que todos
los servicios que este ofrece dejen de funcionar, en cambio, en un sistema
distribuido, los fallos son parciales, puesto que solo afectan a los servicios
que el componente que fallo este prestando, mientras que otros servicios que
prestan otros componentes siguen funcionando.
El tratamiento de fallos en un sistema distribuido es una tarea difícil, pero que
se puede lograr si se utilizan las técnicas adecuadas, según el sistema que se
desee proteger. Algunas de las técnicas más comunes son:
Detección de Fallos: obviamente no es posible tratar un fallo si este no se ha
detectado, sin embargo, la detección de un fallo dentro de un sistema
distribuido puede no ser tan sencillo como parece, recordemos que además de
componentes de hardware y software, los sistemas distribuidos operan gracias
a la transmisión de mensajes, y el funcionamiento del sistema depende en
gran parte de estas transmisiones de datos entre los diferentes componentes;
un fallo en la transmisión de datos entre componentes no es fácil detectar,
pero es algo que podemos esperar (dependiendo del medio por el que se haga
la transmisión y otras condiciones) y al saber que existe la posibilidad de ese
fallo, podemos monitorear y aplicar técnicas que aseguren que dicha
transmisión siempre sea correcta.
Enmascaramiento de Fallos: una vez que un fallo es detectado, es importante
encontrar la manera para que un usuario del sistema no note dicho fallo y que
pueda seguir utilizando el sistema de manera normal, esto es, ocultar los fallos
Sistemas Distribuidos
15
Ing. Einar TURPO AROQUIPA
del sistema y encargarse de que los servicios que se ofrecen al cliente nunca
sean interrumpidos. Son muchos ejemplos del enmascaramiento de fallos, en
el caso de un mensaje que se corrompió al ser enviado, una manera de ocultar
el fallo es haciendo la solicitud de reenvío del mensaje, y de esta manera el
usuario nunca notará que hubo un problema. Otro ejemplo lo dan las técnicas
de redundancia que explicaremos más adelante, pero que básicamente
consiste en tener disponibles varios elementos que puedan dar el mismo
servicio y que en caso de que uno falle, otro este en la disponibilidad de
realizar el trabajo en su lugar, esto puede darse cuando fallan componentes de
un servidor (discos duros, tarjetas de red, etc.), o incluso cuando fallan las
conexiones a la red o los sistemas de bases de datos.
Tolerancia a Fallos: es importante saber cuando un sistema puede llegar a
tener ciertos problemas sin que estos afecten de manera grave al usuario de
los servicios proporcionados, para así, ignorar la ocurrencia de dichos fallos
cuando la aplicación lo soporte, o bien, hacer saber al cliente que hay un
problema en lugar de gastar tiempo y recursos innecesarios para corregirlo
cuando probablemente el problema no se pueda arreglar rápido y el cliente
termine por abortar el proceso; Pretender arreglar de manera inmediata todos
los problemas que puedan surgir en un sistema puede resultar incluso dañino
para el mismo sistema, puesto que hay problemas que mientras son
arreglados pueden afectar el rendimiento de otros componentes del sistema
que sí están trabajando.
Recuperación Frente a Fallos: Una vez que fue detectado un fallo y que se ha
decidido arreglarlo, hay que encontrar la mejor manera de hacerlo, y además,
de recuperar el estado del sistema antes de que ocurriera el fallo; esto requiere
del software adecuado para poder reconstruir o bien retractar los cambios que
no fueron completados al momento en que fue interrumpido el sistema, un
ejemplo de esto lo podemos ver en los sistemas manejadores de bases de
datos, que se sirven de una bitácora de las transacciones que se realizan y de
acuerdo a esta bitácora se decide reconstruir o retractar las transacciones
hechas sobre la base de datos antes de que se interrumpiera el
funcionamiento de la misma.
Redundancia: un sistema distribuido puede lograr ser tolerante a fallos gracias
a la utilización de componentes redundantes dentro del sistema. La
redundancia se logra con la replicación de dichos componentes y con la
habilidad del sistema de recurrir a los componentes de respaldo en caso de
que el componente de uso primario falle, todo esto por supuesto, sin que el
usuario se percate de lo que esta sucediendo. La redundancia se puede dar en
muchas partes del sistema: componentes internos de los servidores,
servidores de aplicaciones, de Web, de archivos, de correo o de bases de
datos, sistemas de almacenamiento, conexiones a la red de comunicación, etc.
Es muy importante tomar en cuenta que todos los componentes que estén
replicados en el sistema deben mantenerse actualizados para evitar problemas
de consistencia, y además, la actualización de la información entre dichos
componentes no debe de tener un efecto significativo para las necesidades de
transmisión de datos del sistema.
Sistemas Distribuidos
16
Ing. Einar TURPO AROQUIPA
Las técnicas antes mencionadas no son las únicas, pero si las más utilizadas,
estas técnicas deben de proporcionar las herramientas necesarias para
aumentar el grado de disponibilidad de cualquier sistema distribuido, ya que al
saber como tratar un fallo del sistema, también es posible encontrar la manera
de reconfigurar el sistema para que los servicios que este proporciona no sean
interrumpidos, o que en el peor de los casos sólo sean afectados los servicios
proporcionados por los componentes afectados.
f) Concurrencia:
El control de concurrencia trata con los problemas de aislamiento y
consistencia del procesamiento de transacciones. El control de concurrencia
de un sistema distribuido asegura que la consistencia de los datos que se
almacenan y que se procesan en el sistema se mantienen en un ambiente
distribuido multiusuario. Si las transacciones son internamente consistentes, la
manera más simple de lograr este objetivo es ejecutar cada transacción sola,
una después de otra. Sin embargo, esto puede afectar mucho el desempeño
de un sistema distribuido dado que el nivel de concurrencia se reduce al
mínimo. El nivel de concurrencia, es decir, el número de transacciones
simultáneas activas, es probablemente el parámetro más importante en
sistemas distribuidos. Por lo tanto, los mecanismos de control de
concurrencia buscan encontrar un balance entre el mantenimiento de la
consistencia de los datos y el mantenimiento de un alto nivel de concurrencia.
Si no se hace un adecuado control de concurrencia, se pueden presentar dos
anomalías. En primer lugar, se pueden perder actualizaciones provocando que
los efectos de algunas transacciones no se reflejen en los datos almacenados.
En segundo término, pueden presentarse recuperaciones de información
inconsistentes. Las técnicas que se utilizan para asegurar un control de
concurrencia de un sistema distribuido, como hilos, semáforos, candados,
etc., se discutirán más adelante, en la parte de análisis de la arquitectura de
clienteservidor.
g) Transparencia:
Se dice que un sistema distribuido es transparente, cuando este es capaz de
presentarse ante los usuarios y las aplicaciones como si fuese un sistema que
corre en una sola computadora, y no como un sistema cuyos procesos y
recursos están distribuidos físicamente en varias computadoras.
Tipos de Transparencia:
Según el Manual de Referencia ANSA y el Modelo de Referencia para el
Procesamiento Distribuido Abierto de la Organización Internacional de
Estándares (ISO 1995), el concepto de transparencia de puede aplicar a 8
aspectos diferentes de un sistema distribuido:
o Transparencia de Acceso: oculta las diferencias entre la representación
de los datos y la manera en que los recursos son accedidos.
Sistemas Distribuidos
17
Ing. Einar TURPO AROQUIPA
o Transparencia de Ubicación: oculta la localización de los recursos y
permite el acceso a los mismos sin la necesidad de conocer su
localización.
o Transparencia de Migración: oculta que un recurso o un cliente del
sistema sea reubicado, lo que permite hacer dichas reubicaciones sin
afectar la operación de los usuarios y los servicios.
o Transparencia de Recolocación: oculta que un recurso o un cliente del
sistema pueda moverse a una ubicación diferente mientras están en
uso.
o Transparencia de Replicación: oculta la existencia de múltiples
ejemplares del mismo recurso.
o Transparencia de Concurrencia: oculta que un recurso sea compartido
por varios usuarios sin interferir entre ellos mismos.
o Transparencia Frente a Fallos: oculta el fallo y recuperación de un
recurso dentro del sistema, dejando que los usuarios terminen sus
tareas a pesar de los fallos de hardware o software que pudieran
presentarse.
o Transparencia de Persistencia: oculta si un recurso (de software) esta
almacenado en memoria o en disco.
Desde el punto de vista de los usuarios, la transparencia se logra cuando:
o Sus pedidos se satisfacen con ejecuciones en paralelo en distintas
máquinas.
o Se utilizan una variedad de servidores de archivos.
o El usuario no necesita saberlo ni notarlo.
La transparencia desde el punto de vista de los programas significa diseñar la
interfaz de llamadas al sistema de modo que no sea visible la existencia de
varios procesadores.
No es transparente un sistema donde el acceso a los archivos remotos se
realice mediante:
El establecimiento explícito de una conexión en la red con un servidor remoto.
El envío posterior de mensajes, donde el acceso a los servicios remotos será
distinto al acceso a los servicios locales.
Con todo esto en mente es posible diseñar un sistema que cuente con las
características necesarias para lograr la transparencia en tantos aspectos como
sea posible. Los dos más importantes son la transparencia de acceso y la
transparencia de ubicación, la primera se relaciona con la forma en que
representamos los datos en un sistema distribuido, es importante presentar al
usuario o a los programadores el acceso indistinto a recursos locales o
remotos, sin que este se de cuenta de la ubicación de los mismos, lo que al
mismo tiempo nos conduce a tener transparencia de ubicación dentro del
sistema.
Sistemas Distribuidos
18
Ing. Einar TURPO AROQUIPA
Como no se sabe donde están localizados los recursos, tampoco se debe de
saber si estos se mueven a una nueva ubicación, se este o no utilizando el
sistema, esto es lo que se conoce como transparencia de Migración y
Recolocación respectivamente.
Ejemplos de transparencia de acceso, ubicación y migración es el sistema de
nombre de dominio utilizado por los usuarios de Internet, estos utilizan un
nombre de dominio como “dominio.com” para acceder este sitio, sin importar
en donde este localizado el sitio de Internet, el usuario podrá acceder al
servidor en el que se este hospedando la página, y si se decide mover este
sitio a otro servidor, basta con redireccionar al cliente al servidor adecuado,
sin que el cliente lo note. Por su lado, si el cliente esta accediendo al sitio
desde una conexión inalámbrica dentro de su lugar de trabajo y esta en
movimiento, es posible seguir proporcionando servicios sin interrupciones al
cliente siempre y cuando el sistema sea transparente a la recolocación y
permita que el cliente siga conectado a pesar de cambiar su ubicación física.
Por otro lado, la replicación juega un papel muy importante dentro de un
sistema distribuido, en el caso de los nombre de domino, los servidores DNS
trabajan en un sistema de replicación distribuida organizado jerárquicamente
que hace posible el acceso simultáneo a millones de usuarios que requieren
de la información que contiene esta base de datos, sin embargo, la
transparencia de la replicación en el sistema consiste en esconder que existen
varias copias de un mismo recurso, y por lo general implica que dentro del
mismo sistema se cuenta con transparencia de ubicación, puesto que de otra
manera sería imposible acceder a las copias de los recursos con que se
cuenta.
La idea de un sistema distribuido es poder proporcionar a sus usuarios un
servicio simultáneo a un mismo recurso; es entonces muy común que varios
usuarios intenten hacer uso del mismo recurso al mismo tiempo y que traten
de competir por el uso de dicho recurso; en estos casos la transparencia de
concurrencia nos ayuda a ocultar al usuario que además de él, hay otros
usando o intentando usar el mismo recurso. El reto más interesante de esta
parte del diseño de un sistema distribuido es que también se tiene que
considerar la consistencia de los datos que se almacenarán en el sistema, por
lo que habrá que tomar decisiones en cuanto a las técnicas de candados y de
uso de semáforos a utilizarse para lograr tener un sistema concurrente y a su
vez consistente.
La transparencia frente a fallos consiste en esconder cualquier falla que ocurra
en el sistema para que el usuario pueda hacer uso del mismo a pesar de que
alguno de sus componentes no este trabajando como es debido, uno de los
retos más desafiantes de esta tarea es saber distinguir entre recursos que
están fallando y recursos que simplemente están siendo accedidos por
muchos usuarios y cuya respuesta puede alentarse. Es importante tener un
buen esquema de replicación y de balanceo de cargas para evitar estas
situaciones, pero al ser prácticamente inevitables es necesario considerar que
hacer cuando el sistema esta en una situación como la antes mencionada, y
Sistemas Distribuidos
19
Ing. Einar TURPO AROQUIPA
sobre todo determinar que tipo de respuesta enviar al cliente para que este no
se de cuenta de las fallas del sistema.
Grado de Transparencia:
A pesar de que la transparencia es una característica generalmente deseable
para cualquier sistema distribuido, hay situaciones en las que el pretender
enmascarar todos los aspectos relacionados con la distribución de los
componentes del sistema puede no ser lo más óptimo; en algunas ocasiones
es mejor hacer del conocimiento del usuario que el sistema esta compuesto
por varios elementos y que por más óptima que sea la transmisión de
mensajes o la distribución y replicación de componentes, habrá cierto tiempo
de respuesta mínimo entre cada transacción que es imposible evitar.
Hay también una relación directa entre el nivel de transparencia y el
rendimiento de un sistema distribuido, por lo que lo ideal es encontrar un bien
equilibrio entre ambos factores. Por ejemplo, si pretendemos garantizar la
transparencia de replicación en un sistema, es necesario que el usuario sepa
que para garantizar la consistencia de la información es necesario actualizar
todos los componentes replicados cuando se hace un cambio, por lo que el
acceso al sistema puede verse interrumpido por algunos segundos mientras
esta operación se lleva a cabo.
Es muy importante considerar la transparencia como uno de los principales
objetivos del diseño e implementación de un sistema distribuido, sin embargo,
es importante tener en consideración otros factores que pueden ser afectados
por la transparencia, principalmente el desempeño general del sistema.
1.2. Ventajas y Factores de Distribución:
En general, los sistemas distribuidos exhiben algunas ventajas sobre los sistemas
centralizados que se describen enseguida.
a) Factores Estratégicos:
Hoy en día, los clientes, proveedores y compañías se encuentran
generalmente en diferentes localidades alejados los unos de los otros.
Debido a que todos estos utilizan computadoras, las redes de información
que los unen y que les permiten interactuar pueden ofrecer a las empresas
mayor competitividad.
b) Costos de Equipo:
El cociente precio/desempeño de la suma del poder de los procesadores
separados, contra el poder de uno solo centralizado, es mejor cuando están
distribuidos, esto lo podemos calcular con base al costo promedio de MIPs
(Millones de Instrucciones por Segundo), el cual es mucho mayor en
Sistemas Distribuidos
20
Ing. Einar TURPO AROQUIPA
mainframes que en un número fijo de estaciones de trabajo. Sin embargo,
cabe mencionar que los mainframes soportan cientos de dispositivos y
permiten que miles de clientes compartan los mismos recursos
computacionales del mismo, aunque la diferencia en costos es enorme.
c) Conocimiento y control de los usuarios:
La gran mayoría de los usuarios de los servicios computacionales son cada
vez más cultos y competentes por lo que dichos usuarios desean operar sus
propios sistemas, a su manera, por lo que no están contentos con los
sistemas centralizados que llevan el control sobre los sistemas que son
desarrollados, cuándo, cómo y por quiénes son operados. La computación
distribuida ofrece a los usuarios estar más cerca de los procesos y de los
datos.
d) Costos de Desarrollo:
Cuando se trabaja con un sistema distribuido que cuenta con diferentes
módulos de software que pueden integrase como parte de un solo sistema,
los usuarios finales interesados en desarrollar sus propias aplicaciones
pueden hacerlo utilizando sus propias máquinas, lo que trae como
consecuencia la reducción del costo y tiempo de desarrollo de una nueva
aplicación.
e) Interfaces de Usuarios:
La mayoría de las estaciones de trabajo que se utilizan hoy en día soportan
el uso de interfaces gráficas sofisticadas con dispositivos de señalamiento y
sistemas de audio y video; esta tecnología resulta ser muy atractiva
especialmente para usuarios con diferentes estilos de aprendizaje que por lo
general se decepcionan por los tradicionales repotes o interfaces
presentadas en formato de texto o con gráficos de poca calidad.
f) Flexibilidad y Facilidad de Configuración:
Los sistemas distribuidos, y en general la computación descentralizada,
ofrece muchas opciones para mejorar el desempeño y la fiabilidad de un
sistema mediante el uso de procesos y datos redundantes.
g) Explotación del Hardware:
Las estaciones de trabajo y computadoras personales permiten el desarrollo
de software especializado que hace uso de las características específicas del
hardware de la estación de trabajo, cada una de estas estaciones puede ser
Sistemas Distribuidos
21
Ing. Einar TURPO AROQUIPA
utilizada como un servidor especializado (por ejemplo, de correos, de Web,
de archivos, de bases de datos, etc.) y estos servidores con los que
satisfacen las peticiones de clientes que desean hacer uso de los servicios
con los que cuenta dicho servidor. A esta configuración se le conoce
comúnmente como configuración “cliente-servidor” y se explicará a detalle
más adelante.
h) Nuevas aplicaciones:
Muchas aplicaciones nuevas de tiempo real requieren ser procesadas y
acceder datos de manera local, lo cual es posible solamente si se utiliza un
sistema distribuido con estaciones de trabajo distribuidos en los lugares que
más se requiera.
i) Crecimiento:
El poder total del sistema puede irse incrementando al añadir pequeños
sistemas, lo cual es mucho más difícil en un sistema centralizado y caro.
Por otro lado, los sistemas distribuidos también exhiben algunas ventajas
sobre sistemas aislados. Estas ventajas son:
Compartir datos: un sistema distribuido permite compartir datos más
fácilmente que los sistemas aislados, que tendrían que duplicarlos en cada
nodo para lograrlo.
Compartir dispositivos: un sistema distribuido permite acceder dispositivos
desde cualquier nodo en forma transparente, lo cual es imposible con los
sistemas aislados. El sistema distribuido logra un efecto sinergético.
Comunicaciones: la comunicación persona a persona es factible en los
sistemas distribuidos, en los sistemas aislados no.
Flexibilidad: La distribución de las cargas de trabajo es factible en el sistema
distribuido, se puede incrementar el poder de cómputo.
1.3. Desventajas y Factores a Considerar:
Así como los sistemas distribuidos exhiben grandes ventajas, también se pueden
identificar algunas desventajas, algunas de ellas tan serias que han frenado la
producción comercial de sistemas distribuidos en la actualidad.
Sistemas Distribuidos
22
Ing. Einar TURPO AROQUIPA
a) Falta de Estándares:
La falta de estándares y herramientas de desarrollo para ambientes
distribuidos pueden crear graves problemas de compatibilidad, portabilidad e
interconectividad en los sistemas distribuidos. Esto se da cuanto se crean
muchas copias incompatibles de la misma aplicación. El desarrollo y uso de
estándares para aplicaciones, computadoras y redes son desarrolladas en
lugares, por personas y en tiempos diferentes, lo cual resulta muy
complicado, y es por eso que es común ver este tipo de problemas en un
sistema distribuido.
b) Complejidad del Diseño:
Los grandes sistemas de computadoras pueden distribuirse en muchas
computadoras, sin embargo, separar el sistema en muchas partes y decidir
en que lugar van a residir dichas partes, no es una tarea trivial. Los
problemas de compartir datos y recursos son tan complejos que los
mecanismos de solución generan mucha sobrecarga al sistema haciéndolo
ineficiente. El verificar, por ejemplo, quiénes tienen acceso a algunos
recursos y quiénes no, el aplicar los mecanismos de protección y registro de
permisos consume demasiados recursos. En la actualidad, las soluciones
para estos problemas son incipientes.
c) Falta de Infraestructura en Soporte y Administración:
Hasta ahora muchos de los problemas de administración y soporte que
demanda un sistema distribuido no han sido solucionados, y las soluciones
que existen para algunos otros problemas son limitadas. Algunos ejemplos
de estos problemas son la planeación de sistemas de información de
acuerdo a la cambiante tecnología que hay hoy en día, el manejo de recursos
distribuidos y el diseño de la estructura organizacional para la computación
distribuida.
d) Seguridad e Integridad:
La distribución de datos y de programas en múltiples localidades pueden
crear muchos problemas de seguridad e integridad que no con fáciles de
solucionar y que por lo general requieren también de un proceso paralelo
que ayude a solucionar dichos problemas, por lo que la carga del sistema
aumenta y el rendimiento en general puede verse afectado.
e) Opciones:
La disponibilidad de muchas opciones y decisiones puede ser tanto buena,
como mala. En ocasiones tener muchas opciones nos quita tiempo, puesto
Sistemas Distribuidos
23
Ing. Einar TURPO AROQUIPA
que tenemos que analizar, entender y probar todas las que están disponibles
antes de llegar a tomar una decisión cobre cual es la mejor. Por el lado
contrario, el tener muchas opciones nos permite diseñar un sistema que este
conformado.
2. Arquitectura Cliente Servidor
1.1. Fundamentos de Arquitectura Cliente Servidor
Definiciones Básicas
Para entender el concepto de la arquitectura de cliente servidor, antes es
necesario conocer algunas definiciones. Entre las principales definiciones se tiene:
a) Desde un punto de vista conceptual:
Es un modelo para construir sistemas de información, que se sustenta en la
idea de repartir el tratamiento de la información y los datos por todo el
sistema informático, permitiendo mejorar el rendimiento del sistema global de
Información
b) En términos de arquitectura:
Los distintos aspectos que caracterizan a una aplicación (proceso,
almacenamiento, control y operaciones de entrada y salida de datos) en el
sentido más amplio, están situados en más de un computador, los cuales se
encuentran interconectados mediante una red de comunicaciones.
c) IBM define al modelo Cliente/Servidor
Es la tecnología que proporciona al usuario final el acceso transparente a las
aplicaciones, datos, servicios de cómputo o cualquier otro recurso del grupo
de trabajo y/o, a través de la organización, en múltiples plataformas. El modelo
soporta un medio ambiente distribuido en el cual los requerimientos de
servicio hechos por estaciones de trabajo inteligentes o "clientes'', resultan en
un trabajo realizado por otros computadores llamados servidores.
Para entender mejor las definiciones antes mencionadas, analizaremos ahora
algunos de los conceptos mencionados en dichas definiciones:
Un Cliente es el que inicia un requerimiento de servicio. El requerimiento inicial
puede convertirse en múltiples requerimientos de trabajo a través de redes LAN o
WAN. La ubicación de los datos o de las aplicaciones es totalmente transparente
para el cliente.
Un Servidor es cualquier recurso de cómputo dedicado a responder a los
requerimientos del cliente. Los servidores pueden estar conectados a los clientes
Sistemas Distribuidos
24
Ing. Einar TURPO AROQUIPA
a través de redes LANs o WANs, para proveer de múltiples servicios a los clientes
tales como impresión, acceso a bases de datos, fax, procesamiento de imágenes,
etc. Es importante mencionar que un servidor no es necesariamente un dispositivo
físico (una computadora) sino que hay que entender al servidor como un proceso
que se encarga de atender las peticiones de un cliente.
Con estos elementos podemos ya darnos una idea de lo que es el modelo cliente
servidor, sin embargo, es necesario analizar más a fondo las características de la
arquitectura si queremos llegar a entender por completo el funcionamiento de la
misma.
Elementos de la Arquitectura Cliente/Servidor
Una arquitectura es un entramado de componentes funcionales que aprovechando
diferentes estándares, convenciones, reglas y procesos, permite integrar una
amplia gama de productos y servicios informáticos, de manera que pueden ser
utilizados eficazmente dentro de la organización.
Debemos señalar que para seleccionar el modelo de una arquitectura, hay que
partir del contexto tecnológico y organizativo del momento y, que la arquitectura
Cliente/Servidor requiere una determinada especialización de cada uno de los
diferentes componentes que la integran.
En esta aproximación, y con el objetivo de definir y delimitar el modelo de
referencia de una arquitectura Cliente/Servidor, debemos identificar los
componentes que permitan articular dicha arquitectura, considerando que toda
aplicación de un sistema de información está caracterizada por tres componentes
básicos:
o Presentación/Captación de Información
o Procesos
o Almacenamiento de la Información
Y se integran en una arquitectura Cliente/Servidor en base a los elementos que
caracterizan dicha arquitectura, es decir:
o Puestos de Trabajo
o Comunicaciones
o Servidores
De estos elementos debemos destacar:
El Puesto de Trabajo o Cliente “Una Estación de trabajo o microcomputador (PC:
Computador Personal) conectado a una red, que le permite acceder y gestionar
una serie de recursos”, el cual se perfila como un puesto de trabajo universal. Nos
referimos a un microcomputador conectado al sistema de información y en el que
se realiza una parte mayoritaria de los procesos.
Sistemas Distribuidos
25
Ing. Einar TURPO AROQUIPA
Se trata de un fenómeno en el sector informático. Aquellos responsables
informáticos que se oponen a la utilización de los terminales no programables,
acaban siendo marginados por la presión de los usuarios. Debemos destacar que
el puesto de trabajo basado en un microcomputador conectado a una red,
favorece la flexibilidad y el dinamismo en las organizaciones. Entre otras razones,
porque permite modificar la ubicación de los puestos de trabajo, dadas las
ventajas de la red.
Los Servidores o Back-End. “Una máquina que suministra una serie de servicios
como Bases de Datos, Archivos, Comunicaciones,...)”. Los Servidores, según la
especialización y los requerimientos de los servicios que debe suministrar pueden
ser:
o Mainframes
o Minicomputadoras
o Especializados (dispositivos de red, imagen, etc.)
Una característica a considerar es que los diferentes servicios, según el caso,
pueden ser suministrados por un único Servidor o por varios Servidores
especializados.
Las Comunicaciones en sus dos vertientes:
Infraestructura de redes: Componentes Hardware y Software que garantizan la
conexión física y la transferencia de datos entre los distintos equipos de la red.
Infraestructura de comunicaciones: Componentes Hardware y Software que
permiten la comunicación y su gestión, entre los clientes y los servidores.
La arquitectura Cliente/Servidor es el resultado de la integración de dos culturas.
Por un lado, la del Mainframe que aporta capacidad de almacenamiento, integridad
y acceso a la información y, por el otro, la del computador que aporta facilidad de
uso (cultura de PC), bajo costo, presentación atractiva (aspecto lúdico) y una
amplia oferta en productos y aplicaciones.
Características del modelo Cliente/Servidor
En el modelo Cliente/Servidor podemos encontrar las siguientes características:
a) El Cliente y el Servidor pueden actuar como una sola entidad y también
pueden actuar como entidades separadas, realizando actividades o tareas
independientes.
b) Las funciones de Cliente y Servidor pueden estar en plataformas separadas, o
en la misma plataforma.
c) Un servidor proporciona servicio a múltiples clientes en forma concurrente.
Sistemas Distribuidos
26
Ing. Einar TURPO AROQUIPA
d) Cada plataforma puede ser escalable independientemente. Los cambios
realizados en las plataformas de los Clientes o de los Servidores, ya sean por
actualización o por reemplazo tecnológico, se realizan de una manera
transparente para el usuario final.
e) La interrelación entre el hardware y el software están basados en una
infraestructura poderosa, de tal forma que el acceso a los recursos de la red
no muestra la complejidad de los diferentes tipos de formatos de datos y de
los protocolos. Un sistema de servidores realiza múltiples funciones al mismo
tiempo que presenta una imagen de un sólo sistema a las estaciones Clientes.
Esto se logra combinando los recursos de cómputo que se encuentran
físicamente separados en un sistema lógico, proporcionando de esta manera
el servicio más efectivo para el usuario final.
También es importante hacer notar que las funciones Cliente/Servidor pueden
ser dinámicas. Ejemplo, un servidor puede convertirse en cliente cuando
realiza la solicitud de servicios a otras plataformas dentro de la red. Tiene
capacidad para permitir integrar los equipos ya existentes en una organización,
dentro de una arquitectura informática descentralizada y heterogénea.
f) Además se constituye como el nexo de unión más adecuado para reconciliar
los sistemas de información basados en mainframes o minicomputadoras, con
aquellos otros sustentados en entornos informáticos pequeños y estaciones de
trabajo.
g) Designa un modelo de construcción de sistemas informáticos de carácter
distribuido.
h) Su representación típica es un centro de trabajo (PC), en donde el usuario
dispone de sus propias aplicaciones de oficina y sus propias bases de datos,
sin dependencia directa del sistema central de información de la organización,
al tiempo que puede acceder a los recursos de este host central y otros
sistemas de la organización ponen a su servicio.
En consecuencia, parte del control de las aplicaciones se transfieren del
computador central (servidor) a los PCs o estaciones de trabajo (clientes),
adquiriendo estas plataformas, entonces, un papel protagonista en conjunto del
sistema de información.
En conclusión, Cliente/Servidor puede incluir múltiples plataformas, bases de
datos, redes y sistemas operativos. Estos pueden ser de distintos proveedores, en
arquitecturas propietarias y no propietarias y funcionando todos al mismo tiempo.
Por lo tanto, su implantación involucra diferentes tipos de estándares: APPC,
TCP/IP, OSI, NFS, DRDA corriendo sobre DOS, OS/2, Windows o PC UNIX, en
Token-Ring, Ethernet, FDDI o medio coaxial, sólo por mencionar algunas de las
posibilidades. Dependiendo de estas características y de su combinación, es el
grado de complejidad de una solución C/S.
Sistemas Distribuidos
27
Ing. Einar TURPO AROQUIPA
Ventajas y Desventajas del modelo Cliente/Servidor
El esquema Cliente/Servidor posee las siguientes ventajas:
a) Uno de los aspectos que más ha promovido el uso de sistemas
Cliente/Servidor, es la existencia de plataformas de hardware cada vez más
baratas. Esta constituye a su vez una de las más palpables ventajas de este
esquema, la posibilidad de utilizar máquinas considerablemente más baratas
que las requeridas por una solución centralizada, basada en sistemas grandes.
Además, se pueden utilizar componentes, tanto de hardware como de
software, de varios fabricantes, lo cual contribuye considerablemente a la
reducción de costos y favorece la flexibilidad en la implantación y actualización
de soluciones.
b) El esquema Cliente/Servidor facilita la integración entre sistemas diferentes y
comparte información permitiendo, por ejemplo que las máquinas ya
existentes puedan ser utilizadas pero con interfaces más amigables al usuario.
De esta manera, podemos integrar PCs con sistemas medianos y grandes, sin
necesidad de que todos tengan que utilizar el mismo sistema operacional.
c) Al favorecer el uso de interfaces gráficas interactivas, los sistemas construidos
bajo este esquema tienen mayor interacción más intuitiva con el usuario. El
uso de interfaces gráficas para el usuario, el esquema Cliente/Servidor
presenta la ventaja, con respecto a uno centralizado, de que no es siempre
necesario transmitir información gráfica por la red pues esta puede residir en
el cliente, lo cual permite aprovechar mejor el ancho de banda de la red.
d) Una ventaja adicional del uso del esquema Cliente/Servidor es que es más
rápido el mantenimiento y el desarrollo de aplicaciones, pues se pueden
emplear las herramientas existentes (por ejemplo los servidores de SQL o las
herramientas de más bajo nivel como los sockets o el RPC).
e) La estructura inherentemente modular facilita además la integración de nuevas
tecnologías y el crecimiento de la infraestructura computacional, favoreciendo
así la escalabilidad de las soluciones.
f) El esquema Cliente/Servidor contribuye además, a proporcionar, a los
diferentes departamentos de una organización, soluciones locales, pero
permitiendo la integración de la información relevante a nivel global.
El esquema Cliente/Servidor tiene algunos inconvenientes que se mencionan a
continuación:
a) Tiene escasas herramientas para la administración y ajuste del desempeño de
los sistemas.
Sistemas Distribuidos
28
Ing. Einar TURPO AROQUIPA
b) En el desarrollo de aplicaciones Cliente/Servidor se deben considerar los
aspectos, que se mencionan a continuación:
o Los clientes y los servidores deberán utilizar el mismo mecanismo (por
ejemplo sockets o RPC), lo cual implica que se deben tener mecanismos
generales que existan en diferentes plataformas.
o Además, hay que tener estrategias pare el manejo de errores y para
mantener la consistencia de los datos. La seguridad de un esquema
Cliente/Servidor es muy importante. Por ejemplo, se deben hacer
verificaciones en el cliente y en el servidor. También se puede recurrir a
otras técnicas como el encripción.
o El desempeño. Problemas de este estilo pueden presentarse por
congestión en la red, dificultad de tráfico de datos, etc.
o Un aspecto directamente relacionado con lo anterior es el de cómo
distribuir los datos en la red. En el caso de una organización, por
ejemplo, éste puede ser hecho por departamentos, geográficamente, o de
otras maneras. Hay que tener en cuenta que en algunos casos, por
razones de confiabilidad o eficiencia, se pueden tener datos replicados, y
que puede haber actualizaciones simultáneas.
o A otro nivel, una de las decisiones que deben tomar las organizaciones es
la de si comprar o desarrollar los diferentes componentes.
Servicios basados en Cliente/Servidor
IBM ha orientado sus esfuerzos de desarrollo de productos ha satisfacer los
siguientes servicios:
a) Servicios de Datos e Impresión: Servicios que permiten compartir archivos,
bases de datos, impresoras y graficadores (plotters). Administración de las
colas de impresión en diferentes dispositivos.
b) Servicios de Comunicaciones: Aseguran que cada componente físico de la red
sea capaz de comunicarse exitosamente con otros componentes, tales como
LAN a LAN y LAN a WAN. El sistema puede incluir dispositivos de
comunicaciones que manejen diferentes tipos de protocolos para conectar
sistemas heterogéneos.
c) Servicio de Administración: Administración de Sistemas involucra
administración de cambios, de problemas, operaciones, configuración y
rendimiento.
Administración de Cambios: es definida como las actividades involucradas en
la planeación, programación, distribución, instalación y registro de hardware y
software en una red distribuida.
Sistemas Distribuidos
29
Ing. Einar TURPO AROQUIPA
Administración de Problemas: involucra la determinación de los mismos, la
identificación de su origen en una red y su solución.
Administración de Operaciones: es definida como la administración del uso de
los sistemas y de los recursos para soportar la carga de trabajo de la
organización, la cual incluye operaciones automatizadas y remotas.
Administración de Configuración: es el manejo de las relaciones lógicas y
físicas entre los recursos de la red.
Administración del Rendimiento: es un conjunto de actividades tales como la
recopilación de datos de desempeño, afinamiento, distribución de carga de
trabajo y el planeamiento de la capacidad para las redes distribuidas.
Administración de Sistemas: también incluye servicios de respaldo,
recuperación de datos, seguridad de recursos de cómputo y distribución y
mantenimiento de software.
d) Servicios de Aplicación: Si el recurso compartido es una parte de una
aplicación (una función de la aplicación), estamos hablando de servicios de
aplicación. Cada uno de los procesadores participantes en un ambiente
Cliente/Servidor puede mantener parte del código de la aplicación, el cual debe
ser compartido por todos ellos (interoperabilidad). Esto significa que las
partes de una aplicación pueden ser distribuidas en varios procesadores,
locales o remotos.
El diseño de las funciones de la aplicación no debe estar ligado a un computador,
lo que permite transportar la aplicación de un procesador a otro, sin
modificaciones (portabilidad).
Una ventaja derivada de esto, es que la aplicación puede estar óptimamente
ubicada dentro de una red en base a las necesidades: de recursos de cómputo y
de la organización.
Sistemas Distribuidos
30
Ing. Einar TURPO AROQUIPA
Programación por capas
La programación por capas es un estilo de programación en el que el objetivo
primordial es la separación de la lógica de negocios de la lógica de diseño; un
ejemplo básico de esto consiste en separar la capa de datos de la capa de
presentación al usuario.
La ventaja principal de este estilo es que el desarrollo se puede llevar a cabo en
varios niveles y, en caso de que sobrevenga algún cambio, sólo se ataca al nivel
requerido sin tener que revisar entre código mezclado. Un buen ejemplo de este
método de programación sería el modelo de interconexión de sistemas abiertos.
Además, permite distribuir el trabajo de creación de una aplicación por niveles; de
este modo, cada grupo de trabajo está totalmente abstraído del resto de niveles,
de forma que basta con conocer la API que existe entre niveles.
En el diseño de sistemas informáticos actual se suele usar las arquitecturas
multinivel o Programación por capas. En dichas arquitecturas a cada nivel se le
confía una misión simple, lo que permite el diseño de arquitecturas escalables
(que pueden ampliarse con facilidad en caso de que las necesidades aumenten).
El diseño más utilizado actualmente es el diseño en tres niveles (o en tres capas).
Capas y niveles
a) Capa de presentación: es la que ve el usuario (también se la denomina "capa
de usuario"), presenta el sistema al usuario, le comunica la información y
captura la información del usuario en un mínimo de proceso (realiza un
filtrado previo para comprobar que no hay errores de formato). Esta capa se
comunica únicamente con la capa de negocio. También es conocida como
interfaz gráfica y debe tener la característica de ser "amigable" (entendible y
fácil de usar) para el usuario.
b) Capa de negocio: es donde residen los programas que se ejecutan, se reciben
las peticiones del usuario y se envían las respuestas tras el proceso. Se
denomina capa de negocio (e incluso de lógica del negocio) porque es aquí
Sistemas Distribuidos
31
Ing. Einar TURPO AROQUIPA
donde se establecen todas las reglas que deben cumplirse. Esta capa se
comunica con la capa de presentación, para recibir las solicitudes y presentar
los resultados, y con la capa de datos, para solicitar al gestor de base de
datos para almacenar o recuperar datos de él. También se consideran aquí los
programas de aplicación.
c) Capa de datos: es donde residen los datos y es la encargada de acceder a los
mismos. Está formada por uno o más gestores de bases de datos que realizan
todo el almacenamiento de datos, reciben solicitudes de almacenamiento o
recuperación de información desde la capa de negocio.
Todas estas capas pueden residir en un único ordenador, si bien lo más usual es
que haya una multitud de ordenadores en donde reside la capa de presentación
(son los clientes de la arquitectura cliente/servidor). Las capas de negocio y de
datos pueden residir en el mismo ordenador, y si el crecimiento de las
necesidades lo aconseja se pueden separar en dos o más ordenadores. Así, si el
tamaño o complejidad de la base de datos aumenta, se puede separar en varios
ordenadores los cuales recibirán las peticiones del ordenador en que resida la
capa de negocio.
Si, por el contrario, fuese la complejidad en la capa de negocio lo que obligase a
la separación, esta capa de negocio podría residir en uno o más ordenadores que
realizarían solicitudes a una única base de datos. En sistemas muy complejos se
llega a tener una serie de ordenadores sobre los cuales corre la capa de negocio,
y otra serie de ordenadores sobre los cuales corre la base de datos.
En una arquitectura de tres niveles, los términos "capas" y "niveles" no significan lo
mismo ni son similares.
El término "capa" hace referencia a la forma como una solución es segmentada
desde el punto de vista lógico:
Presentación/ Lógica de Negocio/ Datos.
En cambio, el término "nivel" corresponde a la forma en que las capas lógicas se
encuentran distribuidas de forma física. Por ejemplo:
o Una solución de tres capas (presentación, lógica del negocio, datos) que
residen en un solo ordenador (Presentación+lógica+datos). Se dice que la
arquitectura de la solución es de tres capas y un nivel.
o Una solución de tres capas (presentación, lógica del negocio, datos) que
residen en dos ordenadores (presentación+lógica, lógica+datos). Se dice
que la arquitectura de la solución es de tres capas y dos niveles.
Sistemas Distribuidos
32
Ing. Einar TURPO AROQUIPA
Descargar