Gearman的使用
FROM: http://www.cnblogs.com/cocowool/archive/2011/08/18/2145144.html
對于分布式網(wǎng)絡(luò)環(huán)境或者有大量任務(wù)的應(yīng)用,我們需要將任務(wù)在不同的服務(wù)器之間進行分布,這個時候正好是Gearman發(fā)揮實力的時候。雖然我們也可以使用MQ隊列再加一些自己實現(xiàn)的調(diào)度算法來將任務(wù)進行分發(fā),但是既然已經(jīng)有了成熟的產(chǎn)品,為什么不使用下呢。
Gearman介紹
Gearman提供了一種通用的程序框架來將你的任務(wù)分發(fā)到不同的機器或者不同的進程當中。它提供了你進行并行工作的能力、負載均衡處理的能力,以及在不同程序語言之間溝通的能力。Gearman能夠應(yīng)用的領(lǐng)域非常廣泛,從高可用的網(wǎng)站到數(shù)據(jù)庫的復(fù)制任務(wù)??傊?#xff0c;Gearman就是負責分發(fā)處理的中樞系統(tǒng),它的優(yōu)點包括:
? ? ?開源:Gearman免費并且開源而且有一個非?;钴S的開源社區(qū),如果你想來做一些貢獻,請點擊 。
? ? ?多語言支持:Gearman支持的語言種類非常豐富。讓我們能夠用一種語言來編寫Worker程序,但是用另外一種語言編寫Client程序。
? ? ?靈活:不必拘泥于固定的形式。您可以采用你希望的任何形式,例如 Map/Reduce。
? ? ?快速:Gearman的協(xié)議非常簡單,并且有一個用C語言實現(xiàn)的,經(jīng)過優(yōu)化的服務(wù)器,保證應(yīng)用的負載在非常低的水平。
? ? ?可植入:因為Gearman非常小巧、靈活。因此您可以將他置入到現(xiàn)有的任何系統(tǒng)中。
? ? ?沒有單點:Gearman不僅可以幫助擴展系統(tǒng),同樣可以避免系統(tǒng)的失敗。
Gearman的工作原理
使用Gearman的應(yīng)用通常有三部分組成:一個Client、一個Worker、一個 任務(wù)服務(wù)器。 Client的作用是提出一個 Job 任務(wù) 交給 Job Server 任務(wù)服務(wù)器。Job Server 會去尋找一個 合適的 Worker 來完成這項任務(wù)。Worker 執(zhí)行由 Client 發(fā)送過來的 Job,并且將結(jié)果通過 Job Server 返回給 Client。Gearman 提供了 Client 和 Worker 的 API,利用這些API 應(yīng)用可以同 Gearman Job Server來進行通信。Gearman 內(nèi)部 Client 和 Worker 之間的通信都是通過 TCP 連接來進行的。工作的流程如下圖所示:
Gearman的用處
Gearman首先提供了一個多語言通訊的接口,當然還有比這個更簡單有效的辦法。Gearman可以將工作的負載分擔到不同的機器中,如下圖所示:
Job Server 可以開啟多個實例,這樣在其中一個發(fā)生故障的時候,可以 Failover 到其他的機器上。同時 Worker 也可以是多個實例進行運行,因為當前的服務(wù)器很多都是多核的。
Gearman要依賴于 Boost C++ Libraries 中的 program_options 庫,并且需要的版本大于 1.39。筆者的CentOS 5.2 系統(tǒng)中自帶的 1.33 不能滿足需求,在自己安裝的過程中會遇到一些問題,建議參考 Boost 官方手冊中的 Easy Build and Install 這部分。
安裝Gearman之后,第一次啟用可能會遇到?error while loading shared libraries: libgearman.so.1 這個問題。可以用下面的方法解決:
當運行 /usr/local/sbin/gearmand -d 時出現(xiàn)?error while loading shared libraries: libgearman.so.1
運行一下 /sbin/ldconfig -v ,然后再去運行g(shù)earman就可以了
ldconfig命令的用途,主要是在默認搜尋目錄(/lib和/usr/lib)以及動態(tài)庫配置文件/etc/ld.so.conf內(nèi)所列的目錄 下,搜索出可共享的動態(tài)鏈接庫(格式如前介紹,lib*.so*),進而創(chuàng)建出動態(tài)裝入程序(ld.so)所需的連接和緩存文件.緩存文件默認為/etc /ld.so.cache,此文件保存已排好序的動態(tài)鏈接庫名字列表.
ldconfig通常在系統(tǒng)啟動時運行,而當用戶安裝了一個新的動態(tài)鏈接庫時,就需要手工運行這個命令.
需要小心的一件事情是數(shù)據(jù)的共享。Gearman 不進行所交換數(shù)據(jù)的任何轉(zhuǎn)換或操作。對于這里使用的簡單字符串和整數(shù)沒有問題,但是不能共享 PHP 中的數(shù)組值并期望能在 Java 語言中被理解。對于這種類型的交互,可以使用很多結(jié)構(gòu)化數(shù)據(jù)標準中的一種,比如 JavaScript Object Notation (JSON) 或 XML。另外,如果您在處理來自數(shù)據(jù)庫的信息,只要共享 ID 或者找到需要處理的數(shù)據(jù)時要用到的信息即可,或者使用 memcached 這樣的透明方法(盡管可能仍然需要 JSON 或等價物)。
參考資料:
1、用 Gearman 分發(fā) PHP 應(yīng)用程序的工作負載
2、Gearman
3、error while loading shared libraries: libgearman.so.1
4、跨多種環(huán)境部署Gearman
總結(jié)
以上是生活随笔為你收集整理的Gearman的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: gearman简介及安装使用
- 下一篇: ConfigParser