程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> c++分布式計算類庫

c++分布式計算類庫

編輯:C++入門知識

c++分布式計算類庫


分布式計算被譽為高端的東東,我想也是每個程序員都想涉足的領域了。   前一段時間項目中遇到了大數據計算的問題,一般計算時間都要2~3小時,甚至一整天的。我想能不能利用多台機器分布式計算,減少計算時間呢?當前分布式計算框架主要有hadoop, google的map/reduce,或一些其它的框架。但這些東東實在太龐大了,也需要我們修改已有的程序代碼。   於是想到了zeromq這個家伙,引用官方的說法: “ZMQ(以下ZeroMQ簡稱ZMQ)是一個簡單好用的傳輸層,像框架一樣的一個socket library,他使得Socket編程更加簡單、簡潔和性能更高。是一個消息處理隊列庫,可在多個線程、內核和主機盒之間彈性伸縮。ZMQ的明確目標是“成為標准網絡協議棧的一部分,之後進入Linux內核”。現在還未看到它們的成功。但是,它無疑是極具前景的、並且是人們更加需要的“傳統”BSD套接字之上的一 層封裝。ZMQ讓編寫高性能網絡應用程序極為簡單和有趣。”。   事實證明,zeromq用起來果然不錯。   我的做法是:   1、使用zeromq作為通信底層。使用c++對象作為網絡傳輸的基本單位,並使用c++對象反射機制實現對象的解析。   2、每一個任務,即是一個對象。任務的分解(map)與歸約(reduce)的任務,則分配給了使用者本身,因為只有TA知道任務的具體算法與數據。一個任務包含了數據、算法、結果(待計算)。   3、任務分解之後,只需要簡單調用DoMultiTask(taskList, waitTime)即可。剩下的工作就是等待計算完成,然後歸約。   4、類庫接收到任務後,將其發送到主服務器,主服務器使用負載均衡算法/最近最少使用算法,將任務發放給已經注冊的工作機(worker)。工作機處理完成後返還給主機,主機返還給客戶,將結果寫入任務(task)的結果變量中。   5、所有計算完成返回,有客戶端歸約。   其中,分布式框架做的事情就是工作機的注冊與管理、服務器(路由)的管理,客戶端任務的發送與結果接收,類型反射等。   這樣做的優點是,不需要修改已有程序代碼,只需增加任務類即可。   當人們使用同一個軟件工作,TA願意選擇作為分布式計算客戶端,則會向服務器注冊這個機器然後被使用,程序就會運行一個線程等待任務。       ps:未來有一個問題需要解決:現在假定的是客戶端與工作機的類庫相同,即對象能夠成功反射。如果一個任務(對象)傳送到工作機,可是工作機沒有這個對象的反射信息,最多只能反射數據,不能動態生成任務的算法。總不能傳一段c++代碼,讓客戶機解釋執行吧?我想到的解決方法有:如果反射失敗,那麼要求客戶端將類庫信息(dll)發送到工作機,工作機加載類庫,然後進行類型反射。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved