2017-08-03 109 views
0

我有兩個具有不同IP地址的gearman管理員,我有兩個客戶端的40名工人,每個客戶端上有20名工人。
問題出在這裏,我每10分鐘檢查兩個管理員的狀態,他們在開始時的工作數量相同,但他們的數字以不同的速度下降,admin2比admin1快3倍。
這種情況最終導致一個問題,如果2種巨大的作業集合,例如job1有400000個作業,job2有400000個作業,job2比job1晚一個小時觸發,那麼他們每個都會完成一半他們中的第一個,因爲另一半緊緊抓住管理員的手1,只有管理員完成調度才能管理他的工作,這是一場災難,因爲我想工作1完成,但是沒有完成其中的一半,並繼續等待一半的其他工作要完成。Gearman - 調度不平衡

這是一個例子:
enter image description here

+1

因此,它們的速度不同。但是,什麼是*問題*? –

回答

0

所以我找到了原因。在gearman服務器中,當工作人員標記爲睡眠並且不是is_noop_sent時,它只會發送noop味精,並且在發送noop味精後,is_noop_sent被設置爲false,並且只有在獲取作業命令時纔會設置爲true。
但是在python gearman中,它使用鎖來控制recv循環,如果它不能獲得鎖,如果會傳遞或發送pre_sleep命令 - 並且會導致服務器再也不會禁止該工作者。