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