Un post de actualidad técnica que escribo con motivo de una tarea de Cliente/Servidor, con la que he tomado nota de muchos de los proyectos que actualmente existen sobre este tema (fascinante, por cierto).
Grid Computing
Desde hace algunos años, el poder de procesamiento de los equipos de cómputo ha superado con creces las necesidades de los usuarios comunes. En la mayoría de las empresas, los computadores son utilizados para tareas triviales de procesamiento de textos y cálculo numérico o financiero, con un ocasional uso de los recursos compartidos en la empresa: impresoras, bases de datos, conexiones a otras redes, etc... Sin embargo, cuando un usuario decide utilizar el poder de cómputo que tiene a disposición para una tarea realmente exigente se encuentra con una gran limitante: sólo puede utilizar lo que tiene disponible en una máquina. Surge entonces la duda de si sería posible aprovechar el poder de cómputo que otros no están utilizando para acelerar los procesos de carácter crítico y que requieran mayor poder de cómputo que el que ofrece una sola máquina de procesamiento.
Los estudiosos del tema han investigado durante años esta posibilidad y han logrado progresos suficientes, tanto teóricos como prácticos, como para decir que sí es posible, y que debe hacerse. Se estima que la cantidad de computadores en el mundo está creciendo exponencialmente de acuerdo con la capacidad de producción de las fábricas de chips [1], las cuales cada año abaratan sus costos y aumentan la potencia computacional de los procesadores con nuevas técnicas y diseños. Se estima que para el 2015 haya en el mundo 2000 millones de computadores en el mundo (2 billones estadounidenses = 2000 millones colombianos) [2], lo que hace que el poder de procesamiento total supere con creces los más alocados sueños de los ingenieros de software. ¿Qué se puede lograr con tanto poder de cómputo?
No mucho, dado que la mayor parte se desperdicia en tareas cotidianas como la edición de este texto en computadores que trabajan de manera aislada o independiente. Sin embargo esto puede cambiar. Gracias a la gran conectividad que ofrecen las redes es posible pasar trozos de información entre los diferentes equipos conectados a una red para ser procesados por cada uno de sus integrantes, en el tiempo de procesamiento que tengan disponible. Hay muchas técnicas desarrolladas, probadas y utilizadas en el mundo para lograr resultados que anteriormente parecían imposibles. Veamos algunos ejemplos.
Uno de los proyectos más conocidos es el SETI [3](Search for ExtraTerrestrial Intelligence, por sus siglas en inglés) que busca encontrar vida extraterrestre al monitorear ciertas bandas del espectro electromagnético que llega a la Tierra desde fuera del Sistema Solar. Anteriormente se utilizaban servidores dedicados para hacer el procesamiento y el análisis de los datos que se obtenían de los radiotelescopiios, pero desde 1995 surgió la idea de aprovechar el poder de cómputo disponible en la recientemente popularizada Internet para esa tarea. En 1999 el proyecto SETI@home hizo su aparición, interconectando tantos computadores como fuera posible mediante un software especial que recibía transmisiones desde Internet si el equipo no se estaba utilizando, procesaba los datos recibidos y devolvía los resultados al servidor principal del proyecto. El resultado fue una supercomputadora virtual compuesta de los equipos que voluntariamente aportaban sus dueños para contribuir al proyecto. Aunque la plataforma de procesamiento ha cambiado con los años, la idea sigue siendo la misma: aprovechar el poder de cómputo disponible no utilizado en tareas más complejas. Actualmente SETI@home está basado en BOINCS [4], un software de coordinación para tareas de computación paralela distribuida (PDC, por sus siglas en inglés) que también soporta otros proyectos, como CleanEnergy Project [5], que apunta a encontrar una solución alternativa al consumo de petróleo para la producción de energía, LHC@home [6] que intenta aumentar la capacidad de cómputo dedicada a los datos del LHC, PS3Grid para el estudio simulado de biomoléculas, y una larga lista de proyectos listados en la página oficial de BOINCs y en [8].
Otro ejemplo que aprovecha el concepto de grid computing es el de las granjas de renderizado (render farms), las cuales han sido utilizadas desde hace años por la industria del cine para producir efectos cada vez más deslumbrantes en las películas que vemos. A medida que el poder de los procesadores aumenta y las tarjetas gráficas mejoran sus prestaciones, el tiempo requerido para producir imágenes como las de los primeros gráficos de computador se ha reducido enormemente, mientras que una imagen de alto realismo, excelente calidad y alta resolución puede obtenerse en un tiempo relativamente prudente. Esa misma calidad es la que exigen los efectos gráficos del entretenimiento que vemos ahora, tanto visual como interactivo. Hollywood ha hecho uso extensivo de esta y otras tecnologías para capturar al público en escenas que, aunque sacadas de la imaginación, parecen tan reales como el computador en el que estoy escribiendo. Dreamworks Animation Studios es una de las más conocidas empresas de animación y ha dado mucho de qué hablar puesto que su granja de renderizado está basada en computadores que usan Linux como sistema operativo [9], y estaba compuesta (para la realización de "Shrek, the third") de más de 3000 CPUs independientes trabajando en cuadros individuales de la película, usando un software especial llamado LSF. Aunque DreamWorks ha desarrollado gran parte de su software de renderizado, el trabajo de coordinar tantas CPUs lo sigue realizando LSF. Luego unen cada cuadro renderizado (imágenes estáticas) usando otras aplicaciones, aplican los efectos de transición para las escenas y agregan el audio, de manera muy similar a como lo hacen los usuarios caseros con el software de sus cámaras. Finalmente el video es anunciado, presentado en el cine y comercializado. Las ventas de "Shrek the third" llegaron a los 179 millones de dólares [10]. Como nota interesante, para el 2009 DreamWorks piensa relanzar todos sus títulos en 3D estereoscópico nativo.
La animación usando granjas de renderizado se logra de manera más o menos sencilla, o al menos así lo anuncian en un tutorial publicado en ExtremeTech [11]. Allí recomiendan conseguir la mayor cantidad de CPUs posible y no tanto la mayor cantidad de GHz disponible. Esto significa que no es tan importante la capacidad de cada CPU dedicada al procesamiento como la cantidad de las mismas. Es por eso que cualquier computador conectado a la red de procesamiento hace una contribución importante sin importar su potencia. En el tutorial explican a grandes rasgos cómo construir una granja de renderizado (y posiblemente otros tipos de procesamiento) personal, pero si uno quiere puede acceder a soluciones comerciales que alquilan tiempo de procesamiento dedicado a tareas específicas. REBUSfarm [12] y RenderNOW [13] pueden ser buenas soluciones.
Otro proyecto que ha visto la luz gracias al grid computing es Electric Sheep [6]. Aunque no se trata de un proyecto científico y riguroso sí parece ser una curiosidad matemática y algorítmica. La meta del proyecto es producir un juego / algortimo genético de alcance global que muestre diferentes criaturas generadas matemáticamente que se cruzan entre sí para producir efectos visuales sorprendentes. Las criaturas más populares entre los usuarios son las que más sobreviven, de modo que sus genes son cruzados nuevamente para producir nuevas formas más (en teoría) agradables para los humanos. Es una idea interesante, pero no deja de ser un juguete comparado con las investigaciones llevadas a cabo por el proyecto Rosseta [14], que usa la plataforma de BOINCS para investigar posibles moléculas que sirvan de base para la cura de las enfermedades humanas.
Ahora, y con la explosión de la PDC, los sistemas operativos están cambiando su paradigma de trabajo. Ya no se trata de recursos locales, sino de recursos almacenados globalmente, en cualquier parte de la red. Google, una de las empresas informáticas con mayor crecimiento en la era de Internet, ha propuesto su plataforma Google Docs [15] para el almacenamiento y la edición simultánea de documentos ofimáticos, Google Code [16] para el almacenamiento y la administración de proyectos de software (de los cuales ellos también se benefician), entre otros, así como la organización del conocimiento colectivo en sitios especializados y confiables, Wikipedia [17] y Knol [18] son dos propuestas para ello. Las aplicaciones basadas en el servidor que además contratan tiempo de procesamiento externo (una propuesta de IBM [19]) y las aplicaciones en línea hacen prácticamente innecesaria la instalación de software en los computadores de los usuarios finales, por lo que para muchos es posible que estemos volviendo al sistema de terminales brutas, aunque en este caso sí hay poder de procesamiento del lado del usuario, pero utilizado en el despliegue de la interfaz gráfica de sus aplicaciones. Propuestas como Ajax13 [20] y Zoho [21] son bastante maduras y ofrecen excelentes prestaciones. Una reseña acerca de estas alternativas a las tradicionales suites ofimáticas está en [22].
Así que, ¿por qué no utilizar las aplicaciones ofimáticas desde la web y aprovechar el resto del tiempo de procesamiento para contribuir con un proyecto de PDC? La supercomputadora global podría estar a la vuelta de la esquina si realmente decidiéramos construirla. Sin embargo, en muchos ambientes académicos y comerciales no se ve como una alternativa viable, principalmente porque cambia completamente el paradigma con el que se viene trabajando desde hace años, y eso requiere tanto tiempo como inversión económica. Muchos investigadores prefieren trabajar en proyectos más tangibles y a más corto plazo. La preocupación ha sido expresada por integrantes de Microsoft, y citando a uno de ellos [23], es posible que primero veamos la Access Grid antes que la Computing Grid globales. Esto es, primero tendremos el acceso a la información desde cualquier dispositivo y desde cualquier parte del mundo antes que acceso al poder de procesamiento para nuestras tareas cotidianas.
En cualquier caso, el futuro a mediano y largo plazo se ve moteado de grid computing. Y más con las ideas y los nuevos modelos matemáticos que se proponen para explicar los fenómenos naturales [24] o para pronosticar las futuras interacciones sociopolíticas [25], o las capacidades de aprendizaje de los estudiantes de acuerdo al contenido [26].
[1] http://www.engvall.org/intelligentia/facts.html
[2] http://www.inc.com/news/articles/200707/computers.html
[3] http://setiathome.berkeley.edu/
[4] http://boinc.berkeley.edu/
[5] http://cleanenergy.harvard.edu/go/
[6] http://lhcathome.cern.ch/
[7] http://www.ps3grid.net/PS3GRID/
[8] http://boincs.com/
[9] http://www.linuxjournal.com/article/9653
[10] http://www.advfn.com/news_DreamWorks-Animation-SKG-4Q-revenue-tops-analyst-view-on-Shrek-the-Third-sales_24964774.html
[11] http://www.extremetech.com/article2/0,2845,1847365,00.asp
[12] http://www.rebusfarm.com/
[13] http://www.rendernow.com/
[14] http://boinc.bakerlab.org/rosetta/
[15] http://docs.google.com/
[16] http://code.google.com/
[17] http://www.wikipedia.org/
[18] http://knol.google.com/k
[19] http://www-935.ibm.com/services/us/index.wss/offering/its/a1025607
[20] http://us.ajax13.com/
[21] http://zoho.com/
[22] http://www.computerworld.com/action/article.do?command=viewArticleBasic&articleId=9007884
[23] http://research.microsoft.com/~Gray/papers/Microsoft_and_Grid_Computing.doc
[24] http://www.elcultural.es/version_papel/CIENCIA/22741/Matematicas_o_la_naturaleza
[25] http://elite-mexicana.blogspot.com/2007_10_01_archive.html
[26] http://weblogs.madrimasd.org/sistemas_inteligentes/archive/2008/11/13/106661.aspx