我正試圖在此刻實現負載平衡器,並且遇到了一點速度顛簸。情況如下(簡化的),使用共享優先級隊列進行負載均衡
- 我有請求的隊列queue_a其通過worker_a
- 處理有其通過worker_b處理的請求queue_b的第二隊列
- 我有請求queue_c,可以去任何工人的3隊列
這種設置的原因是每個工作人員都有唯一的請求,只有它可以處理,但也有任何人都可以處理的一般請求。
我打算使用IntervalHeap的C5的3個實例來實現這個功能。每個工作人員都可以訪問其本地隊列+它所屬的共享隊列(例如,worker_a可以看到queue_a & queue_c)。
這個想法的問題是,如果在本地隊列中有一個請求,並且共享隊列中的請求具有相同的優先級,那麼不可能知道哪一個應該先被處理(IntervalHeap通常是當這種情況發生時,先到先服務)。
編輯:我發現IntervalHeap似乎不先來先-服務器相同的優先級的請求!
我想盡量減少隊列中的鎖定,因爲它會有相對較高的吞吐量和時間敏感性,但目前我能想到的唯一方法會涉及更多的複雜性,其中第三個隊列被刪除並共享請求放入queue_a和queue_b中。當請求被吸收時,它會知道這是一個共享請求,並且必須從其他隊列中刪除它。
希望能夠解釋清楚!
查看TPL數據流,它爲您陳述的問題提供了通用解決方案。在這種情況下,您可能不得不放棄C5的使用 – Polity 2012-07-10 05:55:24
您是否還有關於此的更多信息?例如,我如何在這種情況下使用TPL?我已經GOOGLE了一下,但目前還不清楚如何在我的情況下使用它 – mike 2012-07-10 08:10:33