Bueno, durante estos últimos tres días estuvimos probando esto, ya tenemos una pequeña implementación como prueba de concepto, vá como tiro.
Basicamente, GigaSpaces es un container de Javaspaces (aunque provee muchos servicios más), integrado con Spring. Un space es un "lugar" donde pueden vivir instancias de objetos, que se pueden meter o sacar del space.
Un space se divide en una o más particiones, que pueden estar o no en el mismo servidor o JVM. Se puede configurar de varias maneras, en nuestro caso cuando metemos un objeto al space, hace un balanceo automático y el objeto va a parar a cualquiera de las particiones que estén activas.
Si recuerdan, hace un par de meses estuve preguntando que hardware necesitaba para correr mi aplicación en producción
viewtopic.php?t=29766, el problema que tenemos es que necesitamos recibir muchos datos juntos, procesarlos inmediatamente y mostrarlos y pasarlos a otro sistema. Esto implicaba hacer queries muy grandes a la BD, y traer resultsets muy grandes también, implicaba un gran gasto de licencias de Oracle y en hardware.
Gigaspaces soluciona esto. Los datos se reciben via HTTP por uno o varios servidores, que convierten esos datos y los meten al space. Cada partición contiene un subset de los datos, y procesa solo ese subset. Una vez que se procesó cada subset, se sacan los resultados fuera del space, y otro proceso se encarga de realizar un map reduce de todos los resultados de cada partición, y los datos quedan listos para mostrar o enviar. Todo esto en memoria, sin nisiquiera mirar la BD. Una vez que se terminan de procesar todos los datos, se graban todos juntos en la BD, para su uso futuro.
Los objetos que "viven" en el space son simples POJOs, manejados por Spring. Cuando el space se inicializa, también se inicializa un appContext de Spring para cada partición. La configuración del space también se define en un appContext.xml, usando unos namespaces específicos.
Obviamente cada space (y cada partición) tiene su backup, para asegurar alta disponibilidad y tolerancia a fallos.
Gigaspaces soporta directamente Amazon EC3, y como automáticamente puede deployar mas particiones cuando se exceden los límites preseteados de uso de CPU y/o memoria, prácticamente ofrece una escalabilidad sin límites.
En las pruebas que hice hoy, corriendo todo en mi laptop (Eclipse, un Tomcat, un container Gigaspaces con dos particiones, recibiendo los llamados en XML por HTTP), pudo procesar 20000 llamados por segundo sin despeinarse, hasta que se quedó sin memoria a los 800000 llamados.
Para nuestro problema, Gigaspaces nos vino como anillo al dedo. Quizá otros problemas no sean tan directamente solucionables, aunque hay varios otros servicios que Gigaspaces provee que aún no conozco.
(Esto quizá debería ir en otro foro, pero como no hay un foro "Arquitectura", lo pongo acá, si a alguien le parece que tiene que ir en otro lado, que lo mueva).