假设我们有一些任务队列,我们使用加权任务分配方案在它们之间分配任务。
过了一会儿,它可能是这样的:权重近似。例如,在银行应用程序中我们可以分配
等。但由于某些原因,任务可能需要更长时间(或更少),这可能会破坏队列之间的平衡。
在应用程序级别中,记住以下伪代码:
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);
}
}
}
有三个主要问题:
我们真的需要负载均衡吗? 如果是,那么
当? (使用Timer
或......)
以及如何?