Gearman簡介

gearman,從名字上看叫作「齒輪工」,就是經過齒輪把不一樣的組件組合在一塊兒。一般,多語言多系統之間的集成是項目開發中一個比較頭疼的問題。通常會採用RPC風格或者是REST風格的WebService。可是總感受比較麻煩。gearman就應運而生了,做爲一個任務分發架構,它可以輕鬆的將前端的任務經過Job Server分發給後端的Worker處理。
 
Gearman請求的處理過程涉及三個角色:Client -> Job Server -> Worker   實現任務分發
 
Client:請求的發起者,能夠是C,PHP,Perl,MySQL UDF等等。
Job Server:請求的調度者,用來負責協調把Client發出的請求轉發給合適的Worker。
Worker:請求的處理者,能夠是C,PHP,Perl等等。
 
工做原理圖:
 
 
由於Client,Worker並不限制用同樣的語言,因此有利於多語言多系統之間的集成。
甚至咱們經過增長更多的Worker,能夠很方便的實現應用程序的分佈式負載均衡架構。
 
Gearman Client:它提供Gearman Client API給咱們的應用程序調用API能夠使用是 CPHPPerlMySQL UDF 等等語言,它是請求的發起者   Gearman Job Server:將客戶端的請求分發到各個Gearman Worker的調度者,至關於中央控制器,它不負責處理具體業務邏輯。
Gearman Worker:它提供Gearman Worker API給應用程序調用,具體負責客戶端的請求,並將處理結果返回給客戶端。

集羣架構:前端

       

Job Server 能夠開啓多個實例,這樣在其中一個發生故障的時候,能夠 Failover 到其餘的機器上。同時 Worker 也能夠是多個實例進行運行,由於當前的服務器不少都是多核的 
 
 
關於gearman的分佈式任務處理:
1. 其實每個任務處理的時間並無下降,相反會稍稍有所增長,主要是數據在網絡上傳輸的一些時間。
2. 前端Client(一般是web服務器)的負載下降了,可是轉移到了後端Worker上。
計算不可能憑空消失,只不過從一臺機器轉移到了另一臺機器。
 
3. 同步方式的話,前端Client(一般是Web服務器)等待的時間與後端Worker的數量與當前任務數有關。若是任務數量<=Worker數量,前端Client等待的時間約等於一個任務處理的時間。
可是當任務數>=Worker數量時,就會出現某些Client等待的狀況,某個Client只有等到一個空閒的Worker,纔會將任務交給它進行處理。
 
設想一下,在任務數<=Worker數量的時候,使用gearman是能夠提升響應時間的。若是採用單機話,N個任務仍是在一臺機器上運行,每一個任務須要
 
如今有N個任務(Client),M個Worker,每一個任務執行時間爲t。若是不是用gearman的話,須要的時間爲N*t,平均等待時間爲N*t/2。
若是使用了gearman的話,而且N<=M,須要的時間爲t,平均等待時間爲t;若是N>M的話,須要的時間爲(N/M)*t or (N/M+1)*t。
相關文章
相關標籤/搜索