Computación Distribuida

ARQUITECTURA DE SUPERCOMPUTOS


COMPUTACION Y CRUNCHING

Un sistema distribuido se define como una colección de computadoras separadas físicamente y conectadas entre sí por una red de comunicaciones; cada máquina posee sus componentes de hardware y software que el programador percibe como un solo sistema (no necesita saber qué cosas están en qué máquinas).

A la hora de hablar de computación distribuida, aparece el concepto de programación distribuida, que es un modelo de programación enfocado a desarrollar sistemas distribuidos, abiertos, escalables, transparentes y tolerantes a fallos. Casi cualquier lenguaje de programación que tenga acceso al más bajo nivel del hardware del sistema puede manejar la programación distribuida, teniendo en cuenta que hace falta una gran cantidad de tiempo y código.






La programación distribuida utiliza alguna de las arquitecturas básicas: cliente-servidor, 3-tier, n-tier, objetos distribuidos, etc. Existen lenguajes específicamente diseñados para programación distribuida, como son: Ada, Alef, E, Erlang, Limbo y Oz.

El sistema por antonomasia para lograr el cálculo distribuido es la supercomputadora, que es una computadora con capacidades de cálculo muy superiores a las de cualquier ordenador de trabajo convencional. Hoy en día, el diseño de supercomputadoras se sustenta en cuatro importantes tecnologías, de las cuales, las dos primeras que citaremos son las verdaderamente denominadas supercomputadoras.

La tecnología de registros vectoriales, creada por Seymour Cray, considerado el padre de la súper computación, quien inventó y patentó diversas tecnologías que condujeron a la creación de máquinas de computación ultra-rápidas. Esta tecnología permite la ejecución de innumerables operaciones aritméticas en paralelo.

* El sistema conocido como M.P.P. (Massively Parallel Processors o Procesadores Masivamente Paralelos), que consiste en la utilización de cientos y, a veces, miles de microprocesadores estrechamente coordinados.

* La tecnología de computación distribuida propiamente dicha: los clusters y los grids, de los que más tarde hablaremos.

* Por último, el cuasi-súper cómputo o computación de ciclos redundantes. Recientemente, con el éxito de Internet, han surgido proyectos de computación distribuida a nivel mundial, en los que programas especiales aprovechan el tiempo ocioso de miles de ordenadores personales para realizar grandes tareas. Consiste en que un servidor o grupo de servidores distribuyen trabajo de procesamiento a un grupo de computadoras voluntarias a ceder capacidad de procesamiento no utilizada.



CONCEPTO DE COMPUTACION DISTRIBUIDA



A diferencia de las tres últimas categorías, el software que corre en estas plataformas debe ser capaz de dividir las tareas en bloques de cálculo independientes, que no se ensamblarán ni comunicarán durante grandes periodos de tiempo, como pueden ser horas. En esta categoría destacan BOINC y Folding@home.

Este tipo de máquinas, generalmente, presenta una arquitectura proyectada y optimizada enteramente para la aplicación final en concreto.

El inconveniente de utilizar supercomputadoras es su alto coste de adquisición. Por esta razón, el uso de superordenadores auténticos está limitado a organismos gubernamentales, militares y grandes centros de investigación, donde se dispone de suficiente capital.

El resto de colectivos no pueden afrontar el costo económico que supone adquirir una máquina de estas características, y aquí es donde toma la máxima importancia la idea de poder disponer de esa potencia de cálculo, pero a un precio muy inferior.

El concepto de cluster nació cuando los pioneros de la súper computación intentaban difundir diferentes procesos entre varias computadoras, para luego poder recoger los resultados que dichos procesos debían producir. Con un hardware más asequible, se pudo perfilar que podrían conseguirse resultados muy parecidos a los obtenidos con aquellas máquinas mucho más costosas, como se ha venido probando desde entonces.






Esto último, nos lleva a fijar nuestra atención en la computación distribuida. Es un modelo relativamente nuevo, destinado a resolver problemas de computación masiva utilizando un gran número de computadoras organizadas en racimos incrustados en una infraestructura de telecomunicaciones distribuida.

Esta computación distribuida consiste en compartir recursos heterogéneos, basados en distintas plataformas, arquitecturas y lenguajes de programación, situados en distintos lugares y pertenecientes a diferentes dominios de administración sobre una red que utiliza estándares abiertos. En definitiva, es tratar de forma virtual los recursos informáticos y telemáticos disponibles.

La aparición de la computación distribuida se debe a la necesidad de resolver problemas demasiado grandes para cualquier supercomputadora, con el objetivo adicional de mantener la flexibilidad de trabajar en múltiples problemas más pequeños. Por tanto, la computación distribuida es naturalmente un entorno multiusuario; esto hace que las técnicas de autorización segura sean esenciales antes de permitir que los recursos informáticos sean controlados por usuarios remotos.
Basándonos en la funcionalidad, las redes de computación distribuida se clasifican en redes computacionales y redes de datos.



GRID COMPUTING



Grid

La computación en grid o en malla es un nuevo paradigma de computación distribuida en el cual todos los recursos de un número indeterminado de computadoras son englobados para ser tratados como un único superordenador de manera transparente.

Las computadoras asociadas al grid no están conectadas o enlazadas firmemente, es decir no tienen porqué estar en el mismo lugar geográfico.

El grid ofrece una forma de resolver grandes problemas, como el plegamiento de las proteínas y descubrimiento de medicamentos, construcción de modelos financieros, simulación de terremotos, inundaciones y otras catástrofes naturales, modelado del clima y el tiempo, etc.

En un sistema SSI (Single System Image), todas las computadoras vinculadas dependen de un sistema operativo común, diseñado al efecto. Este es el caso general de un cluster.

En cambio, un grid es heterogéneo, en el sentido de que las computadoras pueden tener diferentes
sistemas operativos.


Globus

La herramienta Globus ha emergido como el estándar de facto para la capa intermedia (middleware) del grid. Algunos de los servicios que ofrece Globus son:

- La gestión de recursos: Protocolo de Gestión de Recursos en Rejilla.
- Servicios de Información: Servicio de Descubrimiento y Monitorización.
- Gestión y Movimiento de Datos: Acceso Global al Almacenamiento Secundario y FTP en grid, GridFTP.

La mayoría de grids que se expanden sobre las comunidades académicas y de investigación de Europa y Norteamérica están basadas en la herramienta Globus como núcleo de la capa intermedia.


XML

Los servicios Web basados en XML, ofrecen una forma de acceder a diversos servicios en un entorno distribuido. Recientemente, el mundo de la informática en grid y los servicios Web caminan juntos para ofrecer el grid como un servicio Web. La arquitectura está definida por la Open Grid Services Architecture (OGSA). La versión 3.0 de Globus Toolkit, será una implementación de referencia acorde con el estándar OGSA.


Clustering

Otro método para crear sistemas de supercomputadoras es el clustering. Un cluster o racimo de computadoras consiste en un grupo de ordenadores de bajo coste en relación al de una supercomputadora, conectados entre sí mediante una red de alta velocidad (Gigabit de fibra óptica, Myrinet, etc.) y un software que realiza la distribución de carga del trabajo entre los equipos. En un cluster, todos los nodos (ordenadores) se encuentran en el mismo lugar geográfico, conectados por una red local para englobar todos lo recursos. Por lo general, éste tipo de sistemas cuentan con un centro de almacenamiento de datos único.


Aspectos de seguridad

El tema de la seguridad es delicado en el ámbito de la computación distribuida pues las conexiones se hacen de forma remota, razón por la cual surgen problemas para controlar el acceso a los distintos nodos de la red.

Hemos visto que los dos grandes sistemas de computación distribuida son el grid y el cluster (sin mencionar las carísimas supercomputadoras), cada uno con sus ventajas e inconvenientes particulares. Si tenemos presente nuestro objetivo final, el cual es tener un conjunto de computadoras dedicadas exclusivamente al cálculo numérico distribuido, llegamos a la conclusión de que la solución conveniente para llevar a cabo nuestro trabajo es un cluster. Esto, además, coincide con la configuración que se dispone en el lugar de trabajo.



ARQUITECTURA GLOBAL COMPUTACIONAL



La arquitectura de un cluster convencional viene determinada por un conjunto de computadoras que se comunican por medio de una conexión de red local muy rápida, para trabajar en un proyecto que sería demasiado grande para una sola computadora, resolviéndolo en un tiempo razonable. Este conjunto de ordenadores se comporta como si fuese una única máquina.

El cómputo con clusters surge como resultado de la convergencia de varias tendencias actuales, que incluyen: la disponibilidad de microprocesadores económicos de alto rendimiento y redes de alta velocidad, el desarrollo de herramientas software para cómputo distribuido de alto rendimiento, así como la creciente necesidad de potencia computacional para aplicaciones que la requieran.

La tecnología de clusters ha evolucionado en apoyo de actividades que van desde aplicaciones de súper cómputo, hasta servidores Web y de comercio electrónico y bases de datos de alto rendimiento, entre otros usos. Ni que decir tiene el gran papel que juegan en la solución de problemas de Ciencia e Ingeniería, que es la disciplina que a nosotros compete.