標籤:
最近研究gearman時發現不少問題,關於隊列持久化的問題搞了半個月還是沒能解決,並且國內可以參考的資料太少,所以考慮換一種方案試試。如下貼出gearman叢集的架構:
可以看到該架構存在的問題,當持久化不起作用時,只能通過多台JobServer同時啟動並執行方式保證叢集的正常運作。另外client和worker這間的資料轉送需要通過JobServer,不能一步到位。這個在資料量大時不能突顯優勢。
本人搞R語言有些時間了,並且該語言近幾年比較火,用於統計、分析、建模、可視化,效率很高。為了承接前期研究的成果,最理想的方式就是基於現有的R語言實現分布式調度和並行計算。基於對gearman架構的理解,分析了其實現機制,
Gearman是基於TCP/IP協議進行串連的,並且client不知道worker的資訊,通過jobserver的中介作用,完成調度。Redis是一個開源的使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。從2010年3月15日起,Redis的開發工作由VMware主持。從2013年5月開始,Redis的開發由Pivotal贊助。使用Redis資料庫既可以用來實現進行間通訊,又能夠對資料進行快速讀寫,基於儲存的資訊,實現client和worker資訊的透明,與gearman相比有很多優勢。
基於以上想法,結合Redis和R語言,對gearman的實現機制進行最佳化,實現了支援R語言和NOSQL資料庫的並行計算架構yiyou。代碼結構如下:
Watch用於查看隊列資訊;yiyou-server類似於jobserver,主要用於任務的分配和NOSQL資料庫的管理;yiyou-stop關閉整個並行叢集;yiyou-client-lib為用戶端程式依賴庫,可基於此定製用戶端程式;yiyou-worker-lib為工作端程式依賴庫,可基於此定製工作端程式;yiyou-dlib為並行計算的依賴庫,可基於它,對單線程的可拆分R代碼平滑移植到叢集上,不需要改動之前的代碼,例子如下:
可以看到,基於 yiyou架構實現的並行計算,依賴於叢集的計算能力,為R語言大資料分析提供了一種可行的方案。
目前該架構尚不成熟,只提供了任務的並行分解,可基於此寫出類似於MapReduce的邏輯,期待後續更多精彩內容。。。
基於redis和R語言構建並行計算平台(yiyou)