分布式計算被譽為高階的東東,我想也是每個程式設計師都想涉足的領域了。
前一段時間專案中遇到了大資料計算的問題,一般計算時間都要2~3小時,甚至一整天的。我想能不能利用多台機器分布式計算,減少計算時間呢?當前分布式計算框架主要有hadoop, google的map/reduce,或一些其它的框架。但這些東東實在太龐大了,也需要我們修改已有的程式**。
於是想到了zeromq這個傢伙,引用官方的說法: %26ldquo;zmq(以下zeromq簡稱zmq)是乙個簡單好用的傳輸層,像框架一樣的乙個socket library,他使得socket程式設計更加簡單、簡潔和效能更高。是乙個訊息處理佇列庫,可在多個執行緒、核心和主機盒之間彈性伸縮。zmq的明確目標是%26ldquo;成為標準網路協議棧的一部分,之後進入linux核心%26rdquo;。現在還未看到它們的成功。但是,它無疑是極具前景的、並且是人們更加需要的%26ldquo;傳統%26rdquo;bsd套接字之上的一 層封裝。zmq讓編寫高效能網路應用程式極為簡單和有趣。%26rdquo;。
事實證明,zeromq用起來果然不錯。
我的做法是:
1、使用zeromq作為通訊底層。使用c++物件作為網路傳輸的基本單位,並使用c++物件反射機制實現物件的解析。
2、每乙個任務,即是乙個物件。任務的分解(map)與歸約(reduce)的任務,則分配給了使用者本身,因為只有ta知道任務的具體演算法與資料。乙個任務包含了資料、演算法、結果(待計算)。
3、任務分解之後,只需要簡單呼叫domultitask(tasklist, waittime)即可。剩下的工作就是等待計算完成,然後歸約。
4、類庫接收到任務後,將其傳送到主伺服器,主伺服器使用負載均衡演算法/最近最少使用演算法,將任務發放給已經註冊的工作機(worker)。工作機處理完成後返還給主機,主機返還給客戶,將結果寫入任務(task)的結果變數中。
5、所有計算完成返回,有客戶端歸約。
其中,分布式框架做的事情就是工作機的註冊與管理、伺服器(路由)的管理,客戶端任務的傳送與結果接收,型別反射等。
這樣做的優點是,不需要修改已有程式**,只需增加任務類即可。
當人們使用同乙個軟體工作,ta願意選擇作為分布式計算客戶端,則會向伺服器註冊這個機器然後被使用,程式就會執行乙個執行緒等待任務。
%26nbsp;
ps:未來有乙個問題需要解決:現在假定的是客戶端與工作機的類庫相同,即物件能夠成功反射。如果乙個任務(物件)傳送到工作機,可是工作機沒有這個物件的反射資訊,最多只能反射資料,不能動態生成任務的演算法。總不能傳一段c++**,讓客戶機解釋執行吧?我想到的解決方法有:如果反射失敗,那麼要求客戶端將類庫資訊(dll)傳送到工作機,工作機載入類庫,然後進行型別反射。
%26nbsp;
源**:
分布式計算
定義 研究如何把乙個需要非常巨大的計算能力才能解決的問題分成許多小的部分,然後把這些部分分配給許多計算機進行處理,最後把這些計算結果綜合起來得到最終的結果。什麼是分布式系統 分布式系統 distributed system 是由多台計算機和通訊的軟體通過計算機網路連線組成 本地區域網或者廣域網 分布...
分布式計算0
分布式系統可以建立精確的數學模型,其上的演算法與性質都是可以證明的,這是最近看一本分布式演算法的專著的感受。其中在論及分布式系統的時間概念時,談到其邏輯時鐘是整個系統上的乙個序關係 這個序關係可以把系統中的事件序列對映到乙個自然數集合上 event 除因果事件外,則還有平行事件的存在。故這種對映關係...
分布式計算概述
分布式系統 在 網 絡 計 算 平台 上 開 發 部 署 管 理 和 維 護 以 資 源 共 享 和 協 同 工 作 為 主 要 應 用 目 標 的 分 布 式 應 用 系 統。分布式系統的主要特徵 包含任意個數的系統程序和使用者程序 體系結構模組化,它由數目可變的多個處理部件組成 通過共享通訊結構...