Hola gente!
Gracias por los comentarios y el interes.
Si, Pere, tengo pensado el:
- ack
- y transaction
pero primero queria explorar casos de uso "light-weight". Por ejemplo, pude poner el web crawler con una cantidad dinamica de workers (en mi jerga, no necesariamente la de Storm, es un proceso Node.js ejecutando la topologia). Asi, una tarea de web-crawling puede tener mas workers a la noche, cuando hay mas maquinas libres, digamos, y luego retirarse en algun momento. En la implementacion actual, los mensajes que una maquina que se retira esta procesando, se pierden. Pero es lindo ver como el web crawler sigue trabajando, aun cuando retire o sume algun proceso en caliente.
Una cosa que me di cuenta: para implementar web crawler distribuido, ejecute varias topologias locales, es decir, que no se comunican entre si ni conocen de otros workers. Solo me basto tener en una maquina dos colas: los enlaces pendientes de procesar, y los nuevos enlaces descubiertos por los workers.
Primer paso para mejorar en ese caso:
- El mensaje de nuevo enlace no se retira de la cola central, si no se termina de procesar en la topologia local
- Ahi podria poner el primer caso de ack
Luego de ese caso "local" (cada topologia ejecutando no conoce de las demas instancias) pero "distribuido" (al final, comparten colas para resolver el trabajo), puse lo de: una topologia local podria recibir y enviar mensajes a otros workers. Por lo que entendi, Storm tiene un shuffle de los mensajes entre las distintas tasks, aun cuando esten en distintos workers/maquinas. Tambien vi que tiene una variante (no recuerdo como se llama), local y algo mas, donde se prefiere enviar el mensaje a una task local antes de a otra en otro proceso. Bueno, algo asi hago ahora: mi implementacion prefiere enviar el mensaje a una task local antes que a otra remota.
Ahi tendria que pensar un ack distribuido, veremos! ;-)
Por ahora, el proyecto es bastante liviano: se puede ejecutar multiplataforma (puedo usar maquinas con Windows, mezcladas con Linux, OS/X, pero no hice una prueba concreta, deberia revisar si no me equivoque en el nombre de algun host, otro ejemplo en otro proyecto, que tambien usa mensajes distribuidos, lo di en un curso y los asistentes lo ejecutaron sin problema en las tres plataformas), y es facil de instalar (Node viene con un instalador de paquetes, NPM, que es una preciosura ;-)
Nos leemos!
Angel "Java" Lopez
@ajlopez