Ola
Hoje eu trabalho com um sistema bem simples (hoje perl, sendo reescrito em ruby). Dado um input de um usuário eu crio um arquivo em um diretório X (cujo nome é um “UUID” dessa requisição) e esse diretório é processado por vários módulos.
Cada modulo é um serviço que fica olhando para um diretorio (indir) e, quando chega alguma coisa, move pra um ‘workdir’ e, terminado o processamento, move para um ‘outdir’ que pode ser o indir do proximo módulo.
É uma fila implementada em um filesystem, basicamente, “controlado” por um modulo central via pequenas requisições a uma api REST. O sistema é muito simples (e robusto) porém é fortemente baseado em I/O e funciona redondo para sistemas sequenciais onde tenho que fazer os processamentos A -> B -> C -> …Z .
Eu não queria perder a simplicidade mas existe um requisito de paralelizar algumas operações em maquinas distintas e ai fazer fila em filesystem se torna um inferno, pois tenho montagem NFS e minhas operações de movimentação deixam de ser atômicas, por exemplo. Nesse caso eu quero passar para algo como
A -> ( B, C , D ) -> E
onde o que esta entre parentesis deve ser feito em paralelo - em maquinas fisicas diferentes. Tenho outro requisito que é lidar com prioridade de fila, que hoje é complicado pois cada modulo funciona “quando pode”.
Pergunta:
Existe alguma coisa que seja simples (no sentido de ter poucas dependências, para ter poucos pontos de falha) de implementar que me dê estas caracteristicas? Pensei em SOAP sobre XMPP ao invés de criar algo em um diretório mas não sei se existe algo mais simples.
Talvez alguma mensageria de forma mais leve, não sei. Aceito sugestões.
.