Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Por supuesto, necesitamos más. Los servidores virtuales Linux no solamente separan el siste-
ma de archivos, sino que por lo general comparten información sobre procesos, direcciones de red,
uso de memoria, y así por el estilo. En consecuencia, una máquina física en realidad se particiona
en diversas unidades, cada unidad corresponde a un completo y totalmente funcional ambiente
Linux aislado de las demás partes. Podemos encontrar un resumen de los servidores virtuales Linux
en Potzl y colaboradores, (2005).
bases de datos que involucran grandes cantidades de datos, pudiera ser mejor enviar parte de la apli-
cación del cliente hacia el servidor y enviar por la red solamente los resultados. De lo contrario, la
red podría colapsarse con la transferencia de datos desde el servidor hacia el cliente. En este caso,
la migración de código se basa en la presunción de que a menudo tiene sentido procesar los datos
cerca de donde residen.
Podemos utilizar el mismo razonamiento para migrar partes del servidor al cliente. Por ejem-
plo, en muchas aplicaciones interactivas de base de datos, los clientes necesitan llenar formas que
posteriormente se traducen a series de operaciones en la base de datos. El procesamiento de la for-
ma del lado del cliente, y el sólo envío de la forma completa al servidor, puede en ocasiones evitar
que un número relativamente alto de mensajes cortos necesite cruzar la red. El resultado es que el
cliente percibe un mejor rendimiento, mientras que el servidor invierte menos tiempo en el proce-
samiento de la forma y la comunicación.
El soporte para migración de código también puede ayudar a mejorar el rendimiento mediante
la explotación del paralelismo, pero sin las usuales e intrincadas relaciones de la programación en
paralelo. Un ejemplo típico es la búsqueda de información en la web. Es relativamente sencillo im-
plementar una consulta de búsqueda en la forma de un pequeño programa móvil, llamado agente
móvil, que se mueve de sitio en sitio. Al hacer distintas copias de dicho programa, y enviar cada
copia a diferentes sitios, podemos lograr un aumento lineal de la velocidad para utilizar solamente
una instancia individual del programa.
Además de mejorar el rendimiento, existen otras razones para soportar la migración de código.
La más importante es la relacionada con la flexibilidad. El método tradicional para construir apli-
caciones distribuidas es crear particiones de la aplicación en diferentes partes, y decidir por adelan-
tado el lugar donde se deben ejecutar. Por ejemplo, este método ha desembocado en diferentes
aplicaciones cliente-servidor multiniveles, las cuales explicamos en el capítulo 2.
Sin embargo, si el código se puede trasladar entre diferentes máquinas, es posible configurar
sistemas distribuidos de manera dinámica. Por ejemplo, suponga que un servidor implementa una
interfaz estándar para un sistema de archivos. Para permitir el acceso de clientes remotos al siste-
ma de archivos, el servidor hace uso del protocolo propietario. Por lo general, la implementación
del lado del cliente de la interfaz del sistema, basada en dicho protocolo, necesitará estar ligada con
la aplicación del cliente. Este método requiere que el software se encuentre disponible para el cliente
en el momento que se desarrolla la aplicación del cliente.
Una alternativa es permitir que el servidor proporcione la implementación del cliente no antes
de que sea estrictamente necesario, esto es, cuando el cliente se conecta con el servidor. En ese
punto, el cliente descarga de manera dinámica la implementación, sigue los pasos necesarios de im-
plementación, y luego invoca al servidor. Este principio aparece en la figura 3-17. Este modelo de
código que se traslada dinámicamente desde un sitio remoto requiere que el protocolo para la des-
carga y la inicialización del código sea estandarizado. Además, es necesario que el código descarga-
do se pueda ejecutar en la máquina del cliente. En los siguientes capítulos explicaremos diferentes
soluciones.
La ventaja más importante de este modelo de descarga dinámica del software del cliente es que
los clientes no necesitan tener instalado todo el software previamente para poder comunicarse con los
servidores. En cambio, se puede introducir el software si es necesario, y de manera similar descar-
SECCIÓN 3.5 MIGRACIÓN DE CÓDIGO 105
2. El cliente y el servidor
se comunican
Cliente Servidor
Depósito de código
tarlo cuando ya no se requiera. Otra ventaja es que mientras las interfaces sean estandarizadas,
podemos modificar el protocolo del cliente y su implementación con tanta frecuencia como desee-
mos. Los cambios no afectarán las aplicaciones existentes en la máquina del cliente y que se apoyan
en el servidor. Por supuesto, también hay desventajas. La más seria, que explicaremos en el capítu-
lo 9, tiene que ver con la seguridad. Confiar en que el código descargado se implemente sólo en la
interfaz anunciada mientras accede a su desprotegido disco duro, y no que envíe las partes más sig-
nificativas a quién sabe dónde no siempre es una buena idea.
resuelve los problemas de acceso a recursos que mencionamos anteriormente. Aún tenemos que tra-
tar con ellos.
En lugar de trasladar un proceso en ejecución, también conocido como migración de procesos,
la movilidad fuerte puede ser soportada además por clonación remota. En contraste con la migración
de procesos, clonar significa producir una copia exacta del proceso original, pero ahora ejecutado
en una máquina diferente. El proceso de clonación se ejecuta en paralelo con el proceso original.
En sistemas UNIX, la clonación remota tiene lugar al bifurcar un proceso hijo y dejar que el hijo
continúe en una máquina diferente. El beneficio de la clonación es que el modelo se asemeja mucho
al modelo que ya utilizan muchas aplicaciones. La única diferencia es que el proceso de clonación
se ejecuta en una máquina diferente. En este sentido, la migración por clonación es una manera sen-
cilla de mejorar la transparencia de distribución.
En la figura 3-18 aparecen las distintas alternativas para implementar la migración de
código.
Ejecución en
Movilidad iniciada proceso de destino
por el remitente Ejecución en un
proceso separado
Movilidad débil
Ejecución en
Movilidad iniciada proceso de destino
por el destinatario Ejecución en un
proceso separado
Mecanismo de movilidad
Migración del proceso
Movilidad iniciada
por el remitente
Clonación del proceso
Movilidad fuerte
Migración del proceso
Movilidad iniciada
por el destinatario
Clonación del proceso