Skip to main content
1 of 4

Distributing tasks to several clients

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?