viernes, 14 de septiembre de 2012

De Grid Computing

Un concepto interesante en informática es el de Grid computing, computación distribuida, computación en rejilla o en malla a continuación vemos el porque.

De forma sencilla el grid computing consiste en que una computadora central envía datos e instrucciones sobre que hacer con estos datos a otras computadoras, para que estas ejecuten las instrucciones sobre los datos dados y devuelvan como resultado información útil.

Primero explicar computación distribuida es dividir un problema y mandarle a diferentes computadoras/ordenadores también denominados nodos de la rejilla o grid.

Para explicarlo de forma sencilla digamos que yo he hecho un programa distribuido para resolver un problema tenemos Juan y Pedro que tienen sus computadoras les he dicho instalen mi programa en sus computadoras para ayudarme a resolver el problema entonces el nodo principal (mi computadora para decir algo) envía los datos crudos del problema y también las instrucciones a los ordenadores de Juan y Pedro, esos ordenadores procesan los datos con las instrucciones que se les han enviado y envían los resultados al nodo principal.

Algo interesante también es que los nodos no necesariamente tienen que ser PC's, puede ser todo dispositivo que se conecte a internet y para el cual se pueda hacer un programa cliente (esto en teoría significa que bien podrías utilizar un teléfono android como nodo del grid, aunque por supuesto habrían consideraciones que hacer como que tan útil sería por lo de que los teléfonos trabajan con baterías)

Bueno imaginémonos que necesitamos un problema para el cual se necesita una gran cantidad de poder de procesamiento que aquello del core i7 no basta ni varios pares de estos microprocesadores, digamos que se trate de un problema que pueda ser dividido en varias partes vamos a poner ejemplo hipotético y un tanto absurdo.

Un problema de calcular el cuadrado de los números del 1 al 1000, para que alguien querría hacer esto? bueno... para generar números aleatorios o algo por el estilo, y si, fácilmente se puede hacer utilizando la computadora mas lenta que tengamos a disposición, pero solo es para ejemplificar.

Ahora normalmente le dirías al la computadora que comience con el primer numero luego el siguiente y te saldría algo como lo siguiente:

1² = 1
2² = 4
3² = 9
.
.
.
1000² = 1000000

Ahora en computación distribuida lo que podrías hacer es lo siguiente, decir, a un nodo enviaré los números del 1 al 300 a otro enviare los números del 301 al 700 al nodo 2 y 701 al 1000. Junto a los números también ir de enviar instrucciones.

Así que los nodos luego de recibir datos e instrucciones se ponen a trabajar, al terminar de procesar los datos con las instrucciones dadas, estos nodos me envían los resultados luego con los resultados puedo hacer lo que yo quiera.

Con este ejemplo he tratado de dar a entender el conceptos, en la practica se pueden tratar diversos problemas desde buscar vida extraterrestre (seti@home) hasta romper contraseñas por medio de fuerza bruta (password cracking) en la practica asi que voy a mencionar alguna de sus aplicaciones algunas de las mas interesantes.

Hay empresas que crean software especializado y orientado hacia el grid computing como el boinc
Recuerdo que Digsby (un cliente de mensajería instantánea muy bueno y gratuito) tenia hace cierto tiempo un modulo que se llamaba "Digsby Research Module" lo que hacia este modulo era que cuando uno no utilizaba la computadora comenzaba a funcionar como nodo del grid utilizando el poder de cpu y la memoria ram de los ordenadores en donde esta opción estaba activada.

A mi me pareció una forma muy interesante de financiar el programa para mantenerlo gratuito, sin embargo a muchos usuarios no les gustó la idea (bueno, si tienes tu computadora encendida en la noche mientras se hacen algunas descargas el consumo de energia en realidad iba a salir caro).

Según el wiki del modulo, los tipos de proyectos en los cuales se puede utilizar al menos los que son sin fines de lucro son: Help Conquer Cancer, Discovering Dengue Drugs, FightAIDS@Home, y The Clean Energy Project asi como las aplicaciones comerciales que incluyen: descubrimiento de drogas farmacéuticas, predicciones sobre la economía e indexado web.

También mencionaba el proyecto SETI@home que es probablemente uno de los proyectos que mas suenan en la web a pesar de su aparente falta de éxito, una de las cosas mas interesantes es que debido a este proyecto se ha desarrollado boinc




Bueno las ventajas son claras:
  • Se posee de increíble poder de procesamiento, suena exagerado pero ha veces se puede considerar el uso de instalaciones dedicadas para computar un problema y esto implicaría muchos costos como espacio, mantenimientos de los equipos e instalaciones.
  • Escalabilidad, con esto nos referimos a que si se necesita mas potencia no necesariamente hay que invertir mas en infraestructura física, sino conseguir mas clientes o nodos, un poco adelante explicaré como funcionan algunas empresas que básicamente venden poder de procesamiento de computación distribuida.
  • Redundancia, es posible que alguno o mas de alguno de los nodos por problemas de hardware arroje resultados incorrectos, para resolver este problema se puede enviar la misma información a mas de un nodo y luego comparar resultados.
  • Ubiquidad ya he mencionado la capacidad de funcionar ordenadores con distintas configuraciones como sistemas operativos, capacidades o especificaciones de hardware y en diferentes tipos de redes

Desventajas, a pesar de que es muy útil e interesante la computación distribuida tienen algunos problemas.

  • No es aplicable a todos los problemas, hay problemas que no pueden ser tratados bajo el paradigma de computación distribuida por ejemplo aplicaciones en tiempo real como videojuegos.
  • Es compleja: Es necesario replantear los problemas para que su resolución utilizando el grid sea viable, esto implica un esfuerzo extra en análisis, también las consideraciones técnicas como lenguajes de programación a utilizar y plataformas en las que una aplicación de este tipo puede ejecutarse así como la infraestructura del nodo central y también la de red.
  • Es heterogénea: Al poder ser ejecutada desde una gran cantidad de dispositivos, también es necesario considerar la capacidad de procesamiento, cantidad de memoria, velocidad de la red en la que se encuentra el nodo para la asignación de trabajo.
  • La red, uno de los pilares fundamentales del grid es precisamente la red, tanto la del nodo principal como la de los clientes, en el caso del nodo principal el problema consiste en que siempre se necesitaría una enorme cantidad de ancho de banda y en el caso de los nodos la inestabilidad de la red para cada uno de los nodos hace que pueda ser difícil estimar el tiempo total que puede tardarse en enviar y/o recibir los datos.



No hay comentarios:

Publicar un comentario

Tu opinión es importante solo abstenerse de comentarios ofensivos, racistas y spam.