Java - 负载平衡任务队列

时间:2016-01-24 10:01:03

标签: java load-balancing message-queue distribution task-queue

假设我们有一些任务队列,我们​​使用加权任务分配方案在它们之间分配任务。

enter image description here

过了一会儿,它可能是这样的:

enter image description here

权重近似。例如,在银行应用程序中我们可以分配

  • W1 提款服务(或任务)
  • W2 存款服务
  • W3 转移服务

等。但由于某些原因,任务可能需要更长时间(或更少),这可能会破坏队列之间的平衡。

enter image description here

在应用程序级别中,记住以下伪代码:

public class Actor implements Runnable {

    BlockingQueue<Task> mailbox = new LinkedBlockingQueue<>();
    AtomicInteger load = new AtomicInteger();

    void tell(Task task) {
        if (mailbox.offer(task)) {
            load.getAndAdd(task.weight);
        }
    }

    int load() {
        return load.get();
    }

    @Override
    public void run() {
        setState(ACTIVE);
        try {
            while (!Thread.currentThread().isInterrupted()) {
                Task task;
                if ((task = mailbox.poll()) == null) {
                    setState(IDLE);
                    if ((task = mailbox.poll(IDLE_TIMEOUT)) == null) {
                        break;
                    }
                    setState(ACTIVE);
                }
                load.getAndAdd(-task.weight);
                handle(task);
            }
        } finally {
            setState(IN_ACTIVE);
        }
    }

}

有三个主要问题:

  1. 我们真的需要负载均衡吗? 如果是,那么

  2. 当? (使用Timer或......)

  3. 以及如何?

0 个答案:

没有答案