In the following I describe a very very simple scenario to keep things simple. I am looking for a system how to properly combine the machine power of several machines to support a server. I initially started using RabbitMQ, then tried reddis, but in both cases they don't support a feature the other has.
In my scenario there is 1-server and n-clients. The server has several several tasks to solve which is made out of n-subtasks. Let's imagine the task is called calculate-1 and has 1000 formulas to solve. Each formula is send to a Queue system where each client can pick a formula, calculate it and send a result back. Never ever do two clients calculate the same formula.
+-----------+
| |
| Client A |
+----+----+----+----+----+ | |
| | | | | +-------->+ |
+-----------+ |Sub |Sub |Sub |Sub |Sub | +-----------+
| | |Task|Task|Task|Task|Task|
| Server +-->+5 |4 |3 |2 |1 |
| | | | | | | | +------------+
+-----------+ | | | | | +-------->+ |
+----+----+----+----+----+ | Client B |
| |
| |
+------------+
My approach with RabbitMQ: RabbitMQs queue system does almost what I want. But cancelling a task needs to be possible, and I can't remove individual tasks from a queue once I pushed them there.
My approach with Redis: The publisher/subscriber approach is cool but only broadcast messages are supported. I can't limit a single task to a single machine.
Any ideas which approach I could use here?