我目前正在尝试实施负载平衡器,并且遇到了一些减速带。情况如下(简化),
- 我有一个由 worker_a 处理的请求队列queue_a
- 有第二个请求队列queue_b由worker_b处理
- 我有第三个请求队列queue_c可以去任何一个工人
这种设置的原因是每个工人都有独特的请求,只有它可以处理,但也有任何人都可以处理的一般请求。
我打算使用 3 个C5 IntervalHeap 实例来实现这一点。每个工作人员都可以访问其本地队列+它所属的共享队列(例如,worker_a 可以看到 queue_a 和 queue_c)。
这个想法的问题在于,如果本地队列中有一个请求,而共享队列中有一个优先级相同的请求,则无法知道应该先处理哪个请求(IntervalHeap 通常是先来的-发生这种情况时先发球)。
编辑:我发现 IntervalHeap 似乎不是具有相同优先级请求的先到先服务器!
我想尽量减少跨队列的锁定,因为它会相对较高的吞吐量和时间敏感,但目前我能想到的唯一方法将涉及更多的复杂性,即删除第三个队列并将共享请求放入两者queue_a 和 queue_b。当请求被吸收时,它会知道这是一个共享请求,并且必须将其从其他队列中删除。
希望足够清楚地解释它!