Subsecciones
En los clusters la importancia del sistema de comunicación es
grandísima. De hecho es el núcleo neurálgico por donde pasan todas comunicaciones.
Si todas las comunicaciones fallan, el cluster dejará de ser un cluster
y se convertirá en un conjunto de máquinas separadas que no trabajan de
ninguna manera unidas.
Por lo tanto es usual en sistemas cluster-HA disponer de una red alternativa
por si la red principal fallara, poder seguir dando servicio.
Una red es un elemento bastante fiable, es difícil que una red una vez
instalada y probada un tiempo falle.
En redes con topología de estrella puede haber fallos puntuales de algún
cable que incomunique a un par de equipos pero fallos que hagan caer una
red entera son prácticamente imposibles, significarían un fallo de hardware del
hub o switch y suelen ocurrir una vez cada muchos años. Sobre las
topologías y tecnologías de red que existen hablaremos en los próximos apartados.
Otro tema importante de la red es la eficiencia, de nada nos sirve una red
si ésta está congestionada, por lo tanto se debe evitar la congestión como
sea.
Hay que tener en cuenta que todas las comunicaciones que necesitamos para
que el cluster pueda operar pasan a través de la red, esto dependiendo
de la cantidad de nodos que hayan en la red puede mermar mucho la eficacia
del cluster.
En sistemas con una red Ethernet con 10Mb/s teóricos el cluster
nunca podrá mostrar toda su potencia. El cuadro 3.4 resume una rápida prueba
generada para mostrar cómo las colisiones en la red disminuía considerablemente el
rendimiento. Aquí solo se representa un breve resumen con las pérdidas de rendimiento
ocasionadas por la carga de la red.
En este testeo casi todos los paquetes han colisionado almenos una vez (colisionaron
unos 670.000 de los 750.000 totales) por lo que puede decirse que
la red y estos resultados se pueden considerar válidos como valores
que puedan ocurrir cuando no se ha diseñado una buena red.
El cuadro pues compara los resultados obtenidos con carga y sin carga
la red.
El porcentaje que aparece es el porcentaje de tiempo que ha necesitado
la red con carga en comparación con la red sin carga.
Tabla:
La importancia de la red. Rendimiento según el sistema de ficheros
tamaño (Moctetos) |
MFS(%) |
MFS-DFSA(%) |
NFS(%) |
SMB(%) |
5 |
139 |
87 |
173 |
287 |
10 |
143 |
162 |
143 |
215 |
15 |
140 |
136 |
166 |
241 |
|
Como vemos los resultados son bastante homogéneos y vemos como una sobrecarga
en la red afecta a todos los servicios que la usen y no hay forma de librarse
de ella.
Especial de mención son los resultados de SMB que son especialmente malos
porque al hacer browsing queda esperando respuestas de la red
antes de acceder a los ficheros, por lo tanto sus latencias son bastante superiores a los demás.
También es de notar que con la red cargada el caso de los 5megas MFS-DFSA
haya tardado menos que el caso con la red sin carga.
Cabe decir que la carga de la red provenía principalmente de la televisión
que se estaba viendo a través de la red.
Existen muchas topologías de red que se han impuesto en diversos entornos,
cada una de estas topologías tienen sus propias ventajas e inconvenientes.
Vamos a ver unas cuantas, tanto estáticas como dinámicas.
Las topologías estáticas como su propio nombre indica son topologías donde
la red.
una vez conectada, no cambia de forma sino que se mantiene estática hasta
que se vuelva a cambiar de topología, los cambios de topología son traumáticos.
Las redes dinámicas están construidas con elementos que pueden conectar
entre varios caminos posibles, esto hace que si uno de esos está siendo
usado se pueda usar otro camino permitiendo más paralelismo.
Como veremos la topología de la red influye mucho en el grado de paralelismo
que se pueda alcanzar.
Las redes estáticas fueron las primeras en aparecer.
En estas redes podemos distinguir entre redes punto a punto y redes con
acceso a medio compartido.
vamos a ver los ejemplos más usados y significativos explicando las ventajas
y los inconvenientes de cada una de ellas.
Primero veremos redes punto a punto:
- Lineal.
Todos los nodos están conectados de forma lineal, como la comunicación es
de punto a punto el peor caso es cuando un nodo de una esquina quiera conectar
con un nodo que esté en la otra esquina.
En este caso se necesitan N-1 pasos para llegar hasta el siendo
N el número de nodos en la red.
- Anillo.
Es similar al caso de la red lineal pero los nodos de las esquinas están
unidos entre sí, esto tiene la ventaja que añadiendo un solo enlace más
se consigue que el diámetro de la red pase de N-1 a
pues ahora los dos nodos más alejados son los que estén en dos puntos extremos
de un anillo con la mitad de los nodos en cada lado hasta llegar hasta
ellos.
Además así todos los nodos tienen el mismo número de enlaces pueden ser
fabricados en cadena, no hay casos especiales como los nodos de los extremos
de la red lineal.
- Estrella.
Hay un nodo central que se conecta con todos los demás nodos.
Todos los nodos sólo se conectan al nodo central.
Esto tiene la ventaja de que en 2 pasos se llega desde cualquier nodo a
cualquier otro (excepto el central que solo necesita uno).
Pero la desventaja que el nodo central tiene que soportar mucha sobrecarga,
pues tiene que llevar todas las comunicaciones que están ocurriendo.
Además aunque es bastante difícil que ocurra, si ese nodo central cayera
la red dejaría de funcionar.
- Árbol.
Cada nodo puede tener unido a él varios nodos hijos y está unido a un nodo
padre.
Existen nodos especiales como el nodo raíz que está en la parte inicial
del árbol de donde salen los primeros enlaces a los primeros nodos, pero
no conecta con ningún nodo padre y los nodos hojas que conectan con su
nodo padre pero no tienen ningún hijo.
Todos los demás nodos conectan tanto con padres como con hijos.
Una variante muy usada es el árbol binario en el que cada nodo tiene como
máximo 2 nodos hijos.
Esto hace que se puedan hacer varios cálculos del árbol de forma más efectiva.
Una mejora de este árbol es el árbol jerárquico que consta de más enlaces
según se sube en las ramas del árbol, esto es asíporque los padres tienen
que llevar a cabo todas las comunicaciones que quieran hacer sus hijos
que no tengan como destinatarios a sus hermanos y como a cuanta más altura
más hijos tiene cada padre (entendiendo por hijos, hijos, nietos, bisnietos,
etc. hay más comunicaciones de las que el padre se tiene que hacer cargo por
lo que se necesitan más posibilidades de comunicación.
Los pasos que tiene que seguir un dato de uno de los nodos para que llegar
a su nodo más lejano es
.
- Malla.
Los nodos están conectados en una red 2D cada uno de los nodos se conecta
con otros cuatro nodos excepto los nodos que están en los bordes de la
malla que se conectan a 2 o 3 nodos.
El aspecto que tiene esta forma de conectar una red es como un tablero
de ajedrez donde los puntos donde se cruzan las líneas son los nodos y
las líneas son los medios de comunicación.
Los pasos que se tienen que seguir para que un dato llegue de un nodo a
su nodo más alejado son
siendo r el número de nodos por lado que hay.
Suele implementarse en circuitos para soportar multiprocesadores.
- Sistólica.
Muy parecida a la malla 2D, pero en esta forma de conectar, tenemos más
conexiones entre los elementos.
Tenemos 6 conexiones, por lo que es una red más cara de construir pero
que necesita menos pasos para llegar los datos de un nodo a otro nodo.
- Totalmente conectada.
Esta red es la más cara de construir y la más engorrosa porque cada nodo
está conectado a todos los demás nodos, con eso se consigue que un dato
llegue de un nodo a cualquier otro en 1 paso, minimizándose al máximo el
tiempo gastado en el traspaso de información.
Esta configuración sólo es viable para un número de nodos pequeño porque
el número de enlaces se dispara.
- Hipercubo.
Es una malla de N dimensiones, este número de dimensiones es el grado del hipercubo.
En esta malla cada nodo conecta con un número de nodos igual al grado del
hipercubo, el número de nodos del que dispone el hipercubo es
.
En esta configuración todos los nodos son iguales, conectan con el mismo
número de nodos.
Aunque es un poco difícil de visualizar con grados mayor que el grado tres,
es una configuración bastante usada por ejemplo Intel hizo una red de este
tipo con procesadores 286.
Figura:
La importancia de la red. Topología de redes estáticas
 |
Estas redes cambian su topología dinámicamente, cuando dos nodos necesitan
conectarse la red puede cambiar de tal forma que se puedan conectar, así no se necesita parsar por todos los nodos o crear una complicada estructura
de conexión, la red cambia según las necesidades de los nodos.
En el caso anterior los nodos tenían que proveer de las capacidades que
necesitaba la red (por ejemplo el nodo central de una red tipo estrella
tenía que tener características especiales) .
Este es el caso contrario donde la red es controlada por los nodos.
La red está formada de cajas de conmutación, cambiando las cajas de conmutación
cambiamos la red.
Hay dos tipos de redes dinámicas:
- Redes monoetapa: sólo necesitan un paso para conectar dos nodos diferentes
(una sola etapa).
- Redes multietapa: realizan las conexiones entre los nodos en más de un paso.
En las redes monoetapa si no se puede acceder desde cualquier elemento a
otro cualquiera se necesita recircular la información.
Dentro de este tipo de redes es de especial interés el caso de la red de
barras cruzadas.
En este caso se tienen los procesadores tanto formando una linea en horizontal
como en vertical y unas líneas los conectan, cuando un procesador se quiere
comunicar con otro, la posición (proc X, proc Y) se activa con lo que se
hace una conexión.
Esto permite que todos los procesadores puedan mantener conexiones independient
es.
Mientras que no haya dos procesadores que quieran comunicarse con un mismo
procesador no habrá ningún problema.
Este esquema es bastante caro y no merece la pena si no se hacen muchas
conexiones simultáneas.
En la figura 3.5 se ilustra una pequeña configuración de una red
de barras cruzadas con tan solo 3 elementos.
Figura:
La importancia de la red. Barras cruzadas
 |
Las redes multietapa son más complejas.
Para comprenderlas primero tenemos que comprender las cajas de conmutación.
Las cajas de conmutación tienen dos entradas y dos salidas.
Las entradas las llamaremos e1 y e2 y a las salidas las
llamaremos s1 y s2.
Se pueden formar cuatro posibles configuraciones, según se relacionan las
entradas con las salidas:
- Paso directo: las dos entradas pasan directamente a las 2 salidas.
La entrada e1 sale por la salida s1 y la entrada e2 sale por la entrada
s2.
- Cruce: las salidas salen en sentido inverso a las entradas.
La entrada e1 se conecta con la salida s2 y la entrada e2 se conecta con
la salida s1.
- Difusión inferior: ésta y la siguiente configuración se usa para hacer
broadcast. En esta configuración la entrada e1 se conecta a la salida s1 y s2 y la
entrada e2 se deja sin conectar por lo tanto, tenemos que asegurarnos que
por e2 no está pasando una comunicación para realizar esta operación.
- Difusión superior: similar al caso anterior, pero ahora es la entrada e2
la que se conecta a las salidas s1 y s2 y la entrada e1 la que no se conecta
a nada.
- Una vez conocemos los tipos de cajas de conmutación que podemos tener, podemos
dividir las redes multietapa en tres tipos:
- Con bloqueo: en estas redes para llegar de un nodo a otro solo hay un camino,
para ahorrar conexiones, gracias a las cajas de conmutación varios caminos
van a una caja por lo que puede ocurrir que la conexión simultánea de varios
nodos produzca conflictos.
Tras realizar una asociación entre dos nodos, intentar hacer otra asociación
puede bloquear.
Figura:
La importancia de la red. Red dinámica con bloqueo
 |
En este ejemplo si los dos primeros nodos quieren conectar con el primer
nodo, tendrán que esperar porque los dos necesitan el mismo enlace.
- Reordenables: existen varios caminos para llegar al mismo lugar, siempre
se puede conectar otro camino, pero quizás habría que reordenar la situación.
Estas redes son más complejas pero aunque se necesite reordenación, podemos
conectar simultáneamente los nodos.
Además estas redes se pueden construir de un tamaño arbitrario usando el
método de red de benes, solo hay que unir redes de este tipo de potencia
de 2 para conseguirlo.
Figura:
La importancia de la red. Red dinámica reordenable
 |
- Sin bloqueo: estas redes pueden manejar todas las conexiones posibles sin
que se produzcan bloqueos, para conseguir esto, todas las cajas de conmutación
de un nivel (una columna) se conectan a todas las cajas de conmutación
de la siguiente columna.
esto es llamado una red de clos, asíincluso todos los nodos podrían querer
comunicarse con uno solo sin problemas ni retrasos.
Van a verse las tecnologías de red más usadas en el clustering.
Estas tecnologías son las mismas que imperan en el mundo de las redes locales
de medio y alto rendimiento.
Estas tecnologías son:
- Serie
- Ethernet
- Fast Ethernet
- Gigabit Ethernet
- ATM
Por supuesto estas no son las únicas tecnologías existentes, pero si que
son las más comunes, en todas nuestras pruebas y en todos los documentos
que hemos leído sobre implementaciones que han realizado otras personas,
siempre han usado uno de estos sistemas.
Por tanto comunicaciones a través de Token Ring o sus derivados quedan
fuera de este tema.
- Serie: puede ser un poco sorprendente ver este método de comunicación aquí,
pero al menos una aplicación muy importante puede usarlo por lo que pensamos
que puede ser un buen método de comunicación si se necesita una forma sencilla
de comunicarse con otro ordenador.
La aplicación que usa este método es Heartbeat del que se habla con más
detalle en el capítulo de clusters HA.
Serie es perfecto para esta aplicación pues sus pequeños pulsos no necesitan
gran ancho de banda pero en un medio compartido como Ethernet pueden ocasionar
colisiones que afecten en gran medida al rendimiento de otras comunicaciones
que se lleven a cabo en el cluster.
- Ethernet: en este entorno es en el que hemos realizado las pruebas que se
explican a lo largo de este proyecto.
La velocidad máxima teórica es de 10 Mb/segundo y aunque hace pocos años
era un estandar y estaba muy extendido el uso de esta tecnología en redes
locales, la caída de los precios de los equipos de 100 Mb/segundo ha hecho
que esta tecnología esté quedando desfasada.
Hoy en día lo más normal es que las tarjetas ethernet sean compatibles
con 10 y 100 Mb/segundo.
Ethernet está especificado en el estandard IEEE 802.3, es half
duplex, existe un medio compartido que físicamente puede ser
topología tipo bus por ejemplo de cable coaxial o en topología
tipo estrella con un hub o un switch como elemento central.
El acceso al medio compartido se gestiona con CSMA/CD (Carrier
Sense Medium Access/Colision Detection) Esto quiere decir que la
tarjeta de red antes de enviar la información escucha la
linea mirando el voltaje de la línea sabe si hay datos o no en
ella.
Si no hay datos, envía sus datos y se pone a escuchar la línea, si el voltaje
es superior a un determinado umbral, más de una tarjeta está intentando
enviar datos a la línea a la vez.
En este caso, se considera que los datos que se enviaron se enviaron con
errores y se vuelve a intentar enviarlos tras un tiempo aleatorio (
, siendo i el número de intento). Este método de acceso
al medio impone ciertas condiciones a las redes Ethernet. Por ejemplo
tiene que haber un tamaño mínimo de paquete (46 bytes) y una longitud máxima de segmento.
Es de especial mención la gran diferencia que existe entre usar un
hub y un switch. El hub simplemente conecta todos
los cables que le entran con todos y sirve para tener una topología física de estrella pero una topología lógica de bus, esto
tiene la ventaja de que si se corta un cable sólo se incomunica un
ordenador no todos y en seguida se localiza el fallo.
El switch en cambio a parte de tener la misma función que el
hub, sólo conecta los cables de los ordenadores que se están comunicando.
Hay 2 tipos de switch:
- Cut-through (al vuelo) en cuanto lee la dirección de
destino del paquete lo reenvía por el cable adecuado, así varios ordenadores pueden estar comunicándose simultáneamente
siempre que las parejas de ordenadores que se comunican sean distintas.
- Almacenamiento y reenvío: similar al anterior pero no envía un paquete hasta
que lo tiene completo, esto evita algunas colisiones y elimina los paquetes
erróneos lo antes posible, además aporta mejora en la gestión de la red,
como conteo de paquetes, filtros y otras opciones que dependen de cada
fabricante en cuestión, el problema es que la latencia de la red aumenta.
- Fast Ethernet: Utiliza la misma técnica que Ethernet pero con velocidades de 100 Mb/segundo,
puede usar el cableado existente por lo que los cambios se reducen a las
tarjetas de red (hoy en día las mismas tarjetas de 10 Mb/segundos también
tienen soporte para esta tecnología) y a los concentradores (en los que
síque hay que hacer mayores inversiones pues son bastante más caros).
Existen concentradores con puertos 10/100 para facilitar la migración a
esta tecnología.
Como la trama mínima sigue del mismo tamaño, el tamaño máximo de estas
redes tiene que ser 10 veces inferior para poder detectar cualquier colisión.
Está normalizado en el 802.3u
- Gigabit Ethernet: esta es la tecnología Ethernet de
más reciente aparición, que consigue velocidades de 1 Gbps o
superiores y es compatible con las dos tecnologías anteriores.
Se disminuye la distancia para detectar colisiones.
Se puede usar cables de categoría 5 pero para grandes distancias se recomienda
el uso de fibra óptica.
Cuando lo que se necesita es una red LAN de altísimas prestaciones (como
la que puede necesitar un cluster) y se dispone del dinero necesario la
elección está entre esta tecnología y ATM
- ATM: se basa en una tecnología de conmutación de celdas.
Las celdas son de un tamaño fijo (53 bytes, 5 cabecera + 48 datos), esto
simplifica en gran medida el procesamiento de las celdas, acelerando la
conmutación y disminuyendo el retardo.
Da muchos servicios de valor añadido de los que no dispone Ethernet, por
ejemplo permite que la velocidad de transferencia sea fijada dinámicamente
bajo demanda.
No sólo eso, sino que puede garantizar otros factores, como retardo etc.
por lo que la gran ventaja es el QoS. Calidad de servicio que de forma inherente proporciona.
Es una red orientada a conexión, lo que ayuda para conseguir QoS y tiene
un control del tráfico y de la congestión muy eficiente.
Los problemas que plantea frente a otras soluciones es que es una alternativa
muy cara, la tecnología es compleja y aún no existen muchas aplicaciones
desarrolladas.
Cuando se usa en LANs, se suele usar en LAN donde se necesite mucho rendimiento
o se necesite QoS.
Otro tema importante aparte de las topologías o tecnologías de red utilizadas
son los protocolos que se adaptan de mejor manera a nuestros sistemas clusters.
Como vimos en el apartado anterior, generalmente la tecnología de cluster
más utilizada suele ser ATM o Ethernet y dado el precio de los dispositivos
ATM suele ser normalmente Ethernet el que se utiliza más en el diseño de
clusters3.10.
En cualquier caso, el protocolo más extendido en el uso de las redes de
cualquier tipo actualmente es IP, es por esto que en este apartado hablaremos
básicamente sobre él.
IP permite trabajar sobre cualquier tecnología de red, ya que es independiente
del medio de comunicación físico.
IP es un protocolo no orientado a conexión y no fiable que se basa en técnicas
de el mejor esfuerzo o best effort para encaminar sus
paquetes, esto es en cierto modo una ventaja, en el caso de que se
utilice sobre redes no conectivas como pueden ser Ethernet o una
desventaja en redes ATM, en cualquier caso, la adaptabilidad del
protocolo IP a cualquier red mediante capas que actúan de interfaz
permite situar este protocolo por encima de ATM, Frame Relay, Ethernet o redes
LAN en general e incluso sobre líneas serie o paralelo.
El protocolo IP (Internet Protocol o protocolo de interred) se encarga de
cumplir los siguientes objetivos en una comunicación:
- Definir el formato de bloques de datos que sera enviado, para evitar errores
de cabecera o tipo de archivos.
- Esquema de direccionamiento.
- Movimiento de datos entre nivel de transporte y nivel de red, dependiente
de cada implementación.
- Encaminamiento de los datagramas IP.
- Fragmentación y agrupación de los datagramas en el caso de que sea necesario
al pasar el paquete por redes de MTU más pequeña.
Es un protocolo ampliamente utilizado y con muchos años de uso.
La práctica totalidad de los sistemas que se conectan a redes tienen alguna
implementación IP ya sea completa o incompleta, lo que nos permite tener
redes de equipos hetereogéneos.
IP no es sólo un protocolo aislado, sino que trabaja en conjunto con otros
protocolos pertenecientes al conjunto que se suele denominar TCP/IP para
realizar transmisiones.
Estos protocolos son ICMP e IGMP en el nivel de red3.11 y
TCP UDP en el nivel de transporte.
El protocolo ICMP se encarga de
mandar mensajes de control, errores en host, fallos de encaminamiento y
mensajes similares, entre los host de la red, mientras que IGMP se encarga
de mantener actualizada la información relativa a la creación de grupos
para la multidifusión, broadcast o multicast.
El conjunto de estos protocolos dotan a la solución de una completa solidez
en uso y funcionamiento.
El formato de bloques de IP no interviene mucho en el factor de diseño de
nuestros clusters, además, en el caso de IP, nos permite reducir bastante
el tamaño de los paquetes que queremos enviar o ampliarlos al máximo de
lo que nos permita nuestra red.
El esquema de direccionamiento tampoco es un problema para nuestros clusters,
aunque empieza a serlo a nivel mundial, por la escasez de direcciones,
se espera que en poco tiempo la red vaya migrando a IPv6, en cualquier
caso desde el punto de vista particular de los clusters, el uso de IPv6
o IPv4 no tiene por que ser drástico e incluso puede favorecernos esta
migración por hacer que los paquetes sean más
configurables3.12.
Respecto al encaminamiento y la fragmentación de los datagramas, nos permiten
tener clusters diseminados por una geografía más extensa.
Generalmente los clusters suelen localizarse en un mismo aula edificio
o entorno, pero, existen problemas para los que pueden ser necesarias redes
de área extensa para los que IP ya esta ampliamente comprobado y utilizado,
como por ejemplo organizaciones internacionales o empresas multinacionales.
Este documento no pretende ser muy duro en cuanto a la teoria de
redes. Lo básico para configurar la necesaria para interonectar
nuestros nodos. Lo que sí que es necesario dar es una explicación de porqué utilizar IP en
clusters.
- Ampliamente utilizado, conocido y comprobado.
- Efectividad en la mayoría de las redes probadas.
- Perfecto para ambientes hetereogéneos.
El principal motivo para utilizar IP es que en la mayoría de los casos y
a pesar de que IP pueda consumir en muchos casos demasiado ancho de banda
o capacidad de proceso, es mejor utilizar un protocolo comprobado y válido
que uno a desarrollar para un sistema concreto, por otro lado, y después
de haber hecho un repaso sobre el proyecto completo, lo normal es que caiga
en la cuenta de que el principal y verdadero motivo, es que no existe ningún
sistema completo de tipo cluster o distribuido de carácter general, sino
que existen muchas soluciones particulares aisladas, IP es el protocolo
más ampliamente utilizado y permite un entorno de red donde todas estas
soluciones puedan comunicarse de una manera estándar.
Existen otros protocolos de red que se han utilizado para entornos distribuidos
como pueden ser IPX/SPX u otros, e incluso algunas soluciones se han basado
directamente sobre capas de nivel de enlace para efectuar las comunicaciones
entre los nodos.
Todas estas soluciones, no han dejado de ser soluciones propias de un sistema
especifico no portable o compatible.
Figura:
La importancia de la red. Encapsulamiento IP
 |
Los protocolos de red están divididos por capas, en la sección anterior
hemos visto una capa de red y ahora veremos las capas que existen a nivel
de transporte.
Nos estamos basando en la división de capas característica de las redes
TCP/IP y aunque este tema pretende ser lo más general posible, hablaremos
principalmente de UDP y TCP.
La mayoría de los protocolos de transporte tienen elementos comunes.
Los protocolos orientados a conexión deben tener mecanismos para establecer
y liberar conexiones.
Cuando hay múltiples conexiones abiertas en una misma máquina, las entidades
de transporte tendrán que asignar un número a cada conexión y ponerlo en
el mensaje.
En sistemas operativos UNIX y para la red ARPANET existen dos enfoques
para saber a que puerto acceder a un servicio:
- Un servidor de puertos escuchando en el UDP/TCP 111 atendiendo solicitudes,
los servidores registran el nombre del servicio y el puerto en donde está
escuchando, permaneciendo dormidos hasta que les llega una solicitud.
- Los puertos los conocen los clientes que tienen el fichero /etc/services, hay un servidor (inetd) que escucha en todos
los puertos que se quieran mantener abiertos, cuando llega una
solicitud, crea un nuevo proceso que se encarga de atender la solicitud.
Al cliente le da la impresión de que el servicio está siempre activo.
Otras de las características comunes de todos estos protocolos de nivel
de red y que hacen este nivel tan útil es el control de flujo.
Si tenemos por debajo de nuestro protocolo de red una red fiable (X.21)
o nuestro protocolo no añade fiabilidad a la red (UDP) entonces no necesitaremo
s usar el control de flujo de nuestra capa de transporte.
En otro caso el control de flujo es fundamental.
El emisor tiene una copia local de cada mensaje que se envía por la red
hasta el momento que es asentido, el receptor quizás no desee enviar un
ACK de ese mensaje o no recibió el mensaje correctamente, en esos casos
el ordenador que está enviando los mensajes tiene que reenviar el mensaje,
por ello la necesidad de tener una copia local.
Con este sistema el receptor puede limitar el tráfico que recibe simplemente
tardando más tiempo en asentir los datos recibidos.
Asícada uno de estos protocolos define unos temporizadores y unas reglas
para no sólo controlar el flujo sino controlar que no se produzca congestión
en la red.
Otro punto en común de todos los protocolos de transporte es que permiten
la multiplexión y demultiplexión de las conexiones, para aumentar el ancho
de banda y aprovechar mejor los recursos de los que se disponga.
Es el protocolo de transporte no fiable estándar en Internet, como protocolo
de transporte que es, solamente está implementado en ordenadores finales.
Es un protocolo no orientado a conexión (de ahísu nombre, se
envían datagramas) y no es fiable. La cabecera que incluye al
mensaje es la mínima para poder distinguir a que puerto se dirige
y un pequeño checksum de la cabecera. Es usado para las
típicas aplicaciones de los servicios no conectivos, se usan para
enviar pocos datos (se consigue más rendimiento puesto que no se
necesita gastar tiempo en conectar y desconectar) y en
multidifusión.
UDP al contrario de TCP no puede realizar fragmentaciones de los mensajes
puesto que no tiene campos para ello.
Por tanto es la aplicación quien debe dividir los mensajes como crea oportuno,
como la tecnología física de red también impone una restricción de tamaño
máximo de paquete, otra división se realiza en el nivel IP, por tanto una
aplicación que conociera la MTU evitaría esta segunda división.
Cuando uno de los fragmentos de un mensaje UDP se pierde se tendría que
retransmitir.
En el caso de UDP será la aplicación la encargada, gracias a unos temporizadore
s de retransmitirlo, en el caso de TCP es este protocolo el que detecta
y soluciona e problema.
Como sabemos IP si no puede recomponer un datagrama, lo tira, no tratando
el problema y dejando la solución a capas superiores.
Algunos capas superiores que usan UDP son RPC y todos los aplicaciones que
dependen de estos (DNS, NIS, etc.) y otras aplicaciones como pueden ser
TFTP, BOOTP, DHCP, SNMP.
Este protocolo junto con UDP son los dos protocolos de transporte estándar
en Internet, es el protocolo fiable de la familia.
Es un protocolo orientado a conexión.
TCP recibe mensajes de cualquier tamaño y los divide en trozos de un máximo
de 64Kb se envía cada uno de estos trozos como un mensaje TCP separado.
Para evitar fragmentaciones extra, TCP conoce la MTU de la red, con lo
que se evita que el nivel de red tenga que dividir a su vez para acoplarse
al MTU de la red.
También es misión de TCP ordenar todos los segmentos que hayan llegado separados
y ensamblarlos para obtener el mensaje inicial.
Tiene la ventaja de que las aplicaciones no tienen que preocuparse de tratar
los errores de la comunicación puesto que para la aplicación el canal de
comunicación es perfecto y siempre llega la información integra.
El que sea un servicio orientado a conexión quiere decir que hay 3 fases
en la comunicación, que forman un mínimo de 7 mensajes sin contar los mensajes
de datos:
- Establecimiento de la conexión: es la fase inicial, para conectarse los
paquetes tienen un bit especial llamado SYN.
Para conectarse se debe enviar un segmento con SYN activado y recibir una
confirmación ACK.
Se toman unos nuevos números de secuencia para enviar y para recibir que
empiezan siendo un número muy superior al último número de secuencia recibido
por si llegan segmentos de la conexión anterior y se empieza la conexión,
esto son 3 mensajes.
- Traspaso de información: típicamente aquíse envían todos los datos que
se quieren enviar, el nivel de aplicación verá como todos los datos que
envía, llegan correctamente (si es físicamente posible) y en orden.
- Liberación de la conexión: se realiza gracias a un bit que indica que se
desea finalizar con la conexión actual llamado FIN.
Cuando un extremo activa su bit FIN, su interlocutor tiene que hacer un
ACK y hasta que no lo desee puede posponer el cierre de la comunicación,
cuando esté listo envía un paquete con el bit FIN activado y el primer
ordenador realiza un ACK, liberando la conexión.
Figura:
La importancia de la red. Conexión TCP
 |
TCP cada vez que envía un segmento inicia un temporizador, si este temporizador
cumple y no se ha recibido confirmación se vuelve a enviar el mismo segmento
suponiendo que el anterior segmento enviado no llegó o llegó con errores.
Como no se puede saber a ciencia cierta cuánto tardará un segmento a llegar
a su destino, pues dependiendo del paquete podría pasar por una redes u
otras, haber congestiones momentáneas, etc.
se implementa un temporizador variable que irá cambiando según lo que tardaron
los ACK de los anteriores segmentos.
La peor situación que le puede ocurrir a una red físicamente bien es que
tenga congestión, por eso esta situación se intenta evitar a toda costa,
y los protocolos orientados a conexión son mejores para evitarla, por eso
TCP intenta hacer un control de congestión en Internet.
Quien más rápidamente puede reaccionar ante la congestión es el emisor,
por tanto cuando según acabamos de ver se cumple el temporizador de
retransmisión hay error o hay congestión, como las redes actuales
son de muy buena calidad es muy difícil que el error sea a causa del medio de transmisión
por lo tanto el emisor supone que existe congestión con lo que envía los
datos de forma más lenta, siguiendo un algoritmo, con esto se intenta que
se alivie la congestión de la red.
Para controlar el flujo y la congestión se usa la ventana deslizante que
permite enviar varios paquetes antes de que se envíe un ACK, enviar un
ACK por cada paquete es realmente lento por lo tanto cuando se quiere disminuir
la velocidad por el peligro de congestión o porque el receptor no puede
recibir tantos datos la ventana disminuye dejando enviar menos paquetes
por ACK, pudiendo llegar a ser 0, lo que significa que el receptor no puede
en esos momentos recibir nada más.
Cuando se quiere más velocidad se deja enviar más paquetes antes de parar
para esperar un ACK.
A la hora de poner en marcha un cluster ya sea a nivel de producción como
a nivel de investigación, hemos de tener en cuenta que uno de los factores
críticos a la hora de configurar dicho sistema va a ser la red, independienteme
nte de el tipo de sistema cluster que se vaya a instalar.
Antes de comenzar a instalar el sistema propiamente dicho, se debe hacer
un estudio de que servicios o programas debe correr, y tener en cuenta
cómo éstas van a afectar a la carga en la red.
Este apartado es bastante importante en la instalación de redes por los
siguientes motivos.
- El coste de instalacíon puede llegar a ser insignificante respecto al coste
que puede llevar una ampliación en un sistema que ha sido mal diseñado
desde un principio, tanto a nivel físico en la instalación (en la cual
no entraremos) como a nivel de capacidad de la red.
- La mayoría de los clusters están montados, como ya hemos visto sobre redes
LAN, con protocolos IP/UDP o TCP, generalmente no tienen ninguna manera
de controlar la congestión de la red, lo que implica que la red debe estar
lo suficientemente bien diseñada y montada como para que se produzca congestión
sólo en casos excepcionales.
- Se debe tener en cuenta, que cuanto más acoplado sea un sistema en su funcionami
ento, más crítica se vuelve la comunicación, por tanto mejor diseñada debe
estar la red de comunicación.
- El coste que se produce al escalar un cluster, tanto económicamente como
en tiempo no debe estar muy ligado al coste de escalar la red.(salvo en
las ocasiones en las que sean necesarios equipos caros como switches o
routers dedicados especiales o estemos hablando de tecnologías de red caras
como pueden ser ATM con fibra óptica).
Como se puede ver, a lo largo de todo el proceso el funcionamiento de la
red es crítico en cualquier sistema de tipo cluster, es más, no sólo es
necesario un entorno de red adecuado para el sistema, sino que este debe
estar en cierta manera infrautilizado para poder asegurar que no se va
a llegar a condiciones de congestionamiento.
El problema del congestionamiento en clusters es realmente preocupante
en redes Ethernet.
A la hora de diseñar una red tenemos que tener claros ciertos conceptos
acerca del sistema que queremos instalar, el funcionamiento que éste debe
tener, los servicios que debe tener y sobre todo, la funcionalidad que
se le va a dar.
En nuestro caso, la funcionalidad estaba clara y los medios eran bastante
escasos, pero, en el caso de empresas que quieran poner clusters de alto
rendimiento en el cual el tiempo o coste de migración de los procesos sea
realmente pequeño, no queda más remedio que pagar.
Tememos por tanto como punto inicial, que conocer la funcionalidad del
sistema:
- Funcionalidad del sistema
- Funcionalidad general para la que el sistema debe funcionar.
- Servicios que deberá correr el sistema.
- Factores que externos que pueden afectar a nuestro sistema.
Todos estos puntos quizá entren en el ámbito de la administración
del sistema, pero son necesarios en el caso de partir de cero, con la primera
instalación de un cluster.
Lo que pretenden es que no haya problemas a la hora de tener claro que
servicios o funcionalidades están por encima de que otras.
Como ya hemos dicho, no existe ningún sistema cluster de carácter general,
la mayoría de ellos se compone de varias aplicaciones trabajando juntas,
si estas aplicaciones deben acceder a recursos compartidos, tenemos que
tener claras dos cosas: cuáles tienen más prioridad, y cómo obtener la
prioridad.
Por otro lado están los factores técnicos que afectan a los servicios que
utilizará la red.
Una vez que se sabe los servicios que poseerá el cluster es necesario describir
el tipo de funcionamiento que tiene cada servicio y demás características.
- Factores técnicos de cada servicio relativos a la red.
- Funcionalidad del servicio.
- Prioridad del servicio en el sistema.
- Rrioridad del servicio en la red.
- Factor de carga del sistema.
- Factor de carga de la red.
- Características de la comunicación que realiza el servicio.
- Tiempos de latencia
- Tipo de protocolos UDP, TCP.
- Carga sobre la red a nivel general.
Todos los factores técnicos deben estar referidos a cada servicio particular.
Para usuarios expertos puede ser obvio que programas o servicios acaparan
más la red o deben tener más prioridad, para alguien profano a ese servicio,
o parte del sistema deberá rellenar solamente los factores teóricos que
el crea oportunos.
A partir de este apartado, el diseñador de la red debe conocer cada uno
de los servicios que la red va a utilizar tanto con conocimiento teórico
como práctico para poder tener una visión generalizada.
Esta visión debe ser tanto de como puede afectar este servicio a otros
y al sistema en general como para tener los conocimientos necesarios para
instalar el servicio sin que este provoque problemas de ningún tipo.
Cuando un diseñador inexperto no haya instalado un sistema o un servicio
de este tipo, lo conveniente es hacer uso de un entorno de simulación reducido
en el cual hacer las instalaciones pruebas y verificaciones para después
proceder a realizar extrapolaciones a un sistema grande, se ha de recordar
siempre que la depuración de un error en un sistema distribuido crece exponenci
almente con el número de nodos que tiene el sistema, y en el caso de que
éste utilice varios servicios a la vez, el crecimiento de la complejidad
crece más aún a medida que escala el cluster.
Este apartado, es quizá el apartado más técnico e importante, en el sentido
de que, no depende de un administrador de sistemas o de un programador.
Cuando intervienen varios sistemas, todos ellos complejos y completos en
un entorno distribuido, se debe tener el suficiente conocimiento de cada
uno de los sistemas a montar como para asegurar que el conjunto de todos
ellos no desestabilizara el funcionamiento de los otros.
Cuando algún instalador experto de sistemas corrientes o diseñador de redes,
lea este párrafo probablemente piense que es algo trivial y que el sentido
común es suficiente, lo cual, nos pareció también lógico a nosotros cuando
instalamos, LVS, openMosix, DHCP, Heartbeat, MON, NFSROOT, MFS, NFS, SMB, X
Window, y cualquier otra aplicacion o servicio en red que se quiera instalar
en el sistema como podrían ser servidores FTP, TELNET, APACHE, etc.
para poder instalar todo ello junto sin que se produzcan congestiones en
la red es necesario conocer el funcionamiento teórico de cada sistema,
y luego saber si realmente se comporta como se explica teóricamente.
Por ejemplo, los sistemas MFS, NFS y SMB se comportan de manera muy distinta
cuando la red no está cargada o cuando está cargada.
El siguiente punto a tener en cuenta es hacer aproximaciones a las necesidades
de red que se han extrapolado de cada servicio, y saber de que recursos
se cuentan para satisfacer estas necesidades.
En este punto, se debe exigir un equilibrio entre los recursos que se tienen
y la efectividad de dicho funcionamiento.
Por ejemplo, un entorno de trabajo con openMosix, NFSROOT y X Window en un
laboratorio de investigación científica, de probablemente más importancia
a la red openMosix que a el sistema de archivos NFS o X Window cuidando de
que estos no fallen tampoco, asíque probablemente separen dichas dos redes
como redes aisladas de manera que NFSROOT o X Window no interfieran sobre
openMosix y al mismo tiempo openMosix este aislado y sus paquetes de información
de estado de cada nodo no interrumpan comunicaciones largas debido a colisiones
cuando openMosix esta en un estado estable (sin migraciones).
- Localizar recursos de los que se dispone o saber con que
medios se cuentan.
- equipos o nodos
- switches/hubs
- routers
- otros servicios como impresoras en red y demás que puedan afectar la carga
de la red
- Estimar la carga de cada red que puede llegar cada servicio contando con
los recursos que se poseen3.13.
- Equilibrar la carga dependiendo de:
- prioridad
- servicio
- recurso
En este caso no cuenta tanto el conocimiento del sistema, una vez que se
conoce como puede llegar a cargar un servicio y de los recursos que se
posee, el diseñador, coloca cada servicio en redes aisladas o interconectadas,
intentando que interfieran cuanto menos mejor los servicios entre sí, en
este apartado, se evalúan las tecnologías de red aplicadas a cada servicio
asícomo de los medios de que se dispone para asegurar el funcionamiento
y disponibilidad de los servicios.
Por ejemplo, en el caso de Heartbeat, se suele utilizar como ya hemos visto
un cable de serie de modem nulo, para asegurar que se produce una doble
vía de comunicación entre los dos ordenadores que se desea
replicar o controlar, e incluso el propio Heartbeat se encarga de
comprobar la vía secundaria periódicamente para asegurar que
esta estará disponible en el caso de que el sistema principal caiga.
Como conclusiones de este tema hay que quedarse con que el sistema de comunicación
es crítico en cualquier sistema paralelo, ya que al tener varios elementos
de proceso (entiéndase por elementos de proceso a los procesadores, nodos,
procesos, módulos, etc. que componen el sistema paralelo o
distribuido), es necesaria la comunicación entre los elementos de
proceso para realizar un trabajo conjunto. También hemos obtenido
que cuanto más acoplado está un sistema paralelo, más crítico es el sistema de comunicación.
Un ejemplo de esto está en aquellos sistemas distribuidos implementados
a nivel de aplicación, que por lo general3.14, al tener un acoplamiento bastante
débil, si la aplicación que forma el sistema falla, las
máquinas seguirán funcionando y sólo hará falta relanzar o reconfigurar la aplicación.
En el caso de sistemas implementados en el kernel de un sistema operativo,
el fallo del sistema puede provocar el malfuncionamiento de una máquina
y por tanto se puede requerir del reseteo de la misma.
Por último hemos dado los puntos necesarios para diseñar una red correctamente,
ya que generalmente cuesta más escalar un sistema mal diseñado con fallos
respecto a los requerimientos iniciales que un sistema que sea bien diseñado
y quizá sobredimensionado desde el principio.
miKeL a.k.a.mc2
2003-09-28