響應速度緩慢,我開始有這樣的疑問: Gearman: 3 seconds between client request and worker receive. Is this normal?Gearman的PHP擴展:死作業服務器=所有工人
環境:
- 的Ubuntu 12.04桌面
- PHP 5.3.10
- 的Gearman (帶PHP Extension 1.1.1的libgearman 1.1.5)
- 局域網上的多臺服務器
我無法獲得小於3秒的工人響應時間,我無法弄清楚原因。我將其縮小到我創建的包裝類。然後,我進一步將其縮小到課堂中的一種特定方法。長話短說,真正的問題似乎在於PHP擴展中的GearmanWorker的addServer方法。
我的包裝類試圖連接到3個Gearman作業服務器。實際上只有2個正在運行。當我嘗試連接到所有3時,我收到關於第三個無法連接的警告。我也得到了3秒的工作人員迴應時間。當我刪除嘗試添加服務器當前下降的工作服務器,那麼工作人員的響應時間大約爲0.003秒。
現在你可能會問,爲什麼不直接從服務器列表中刪除服務器以連接?那麼,首先它不會總是下降。其次,當一個服務器當前運行或5分鐘前運行的服務器不再運行時會發生什麼?所有工作現在至少需要3秒。現在我認爲可能有一種方法可以將該超時配置降至1秒,但是更好的解決方案IMO可以從該列表中刪除服務器正試圖從中獲取作業的服務器。
在我的研究中有一個addServer方法。還有一個addFunction方法。然後有一個取消註冊方法,用於從給定工作人員的列表中刪除工作人員功能。但是,我看不到removeServer方法。
那麼,有沒有辦法在GearmanWorker中剔除作業服務器的列表,或者是否需要殺死對象,重新實例化它,然後重新連接到可用作業服務器的新的已選擇列表?殺死並重新啓動GearmanWorker似乎並不理想。
掃描(並連接到)所有活動作業服務器的最佳方式是什麼,同時避免了已經死亡的作業服務器固有的超時?
謝謝