我對分散式計算框架的理解與設計
謝謝大家來看這篇文章,我想花點時間分享一下我對分散式計算的理解。
分散式服務有很多,比如hbase, hadoop, spark等,我所要講述的重點不是這些服務的原理,而是用更淺顯的話講述更深刻的設計。
如何把多個的機器組合起來完成一件簡單的計算任務,所以這方面的架構設計更多的關注伺服器間的關係。
下面我們來設計一個框架,以進行簡單的分散式計算。
我們假設計算目標有三類:
1.分佈計算能力,簡單多節點計算, 計算1萬以內的質數。
2.map-reduce,以wordcount為例。
3.資源查詢,分散式查詢資料庫
模組設計
在架構上, 可以將服務中的伺服器分三個模組:
模組 | 含義 |
---|---|
config | 配置服務 |
server | 對外介面服務 |
service | 工作服務(worker) |
我想讓service接受請求,server進行計算, 流程會是怎麼的呢。
流程設計
一條簡單的請求過來,可能經過的處理過程:
實際的處理比這個要複雜,比如請求過期處理等。
抽象設計
在框架內通個上,service與server都會向config註冊,通訊以及獲取節點情況等,因此會有很多
相似的邏輯實現,所以很自然地,我把節點的關係重新定義為 config-node
為了簡單處理,抽象了一個node,service與server共同繼承node, 由node負責與config通訊。
功能設計
config在框架裡起到分配資源與註冊服務的功能。
node功能
整體功能
下面我將對系統設計的協議進行設計。
協議設計
為了簡單方便,我將模組間的通訊採用protobuf。
(實際上在通用對外服務是不能用protobuf的,請大家思考為什麼。)
config:
message ConfigRequest{
optional ConfigAuthReq auth= 1;
optional ConfigGetNodesReq get_nodes= 2;
}
message ConfigResponse{
optional ConfigAuthRsp auth = 1;
optional ConfigGetNodesRsp get_nodes= 2;
optional ConfigNotifyNodes notify_nodes= 3;
}
server
message ServerRequest{
required ServerDiag diags = 1;
required ServerDiagNodeType diag_type = 2;
optional ServerAuthReq auth = 3;
optional PrimeQueryReq prime = 4;
optional ServerWordCountReq wc = 5;
optional ServerQueryReq query = 6;
optional ServerBGReq bg = 7;
}
message ServerResponse{
optional ServerAuthRsp auth = 1;
optional PrimeQueryRsp prime = 2;
optional ServerWordCountRsp wc = 3;
optional ServerQueryRsp query = 4;
optional ServerBGResponse bg = 5;
}
下面來定義我們的程式碼結構
程式碼架構
下面的程式碼架構主要爭對config-node而設計。
config請求處理:
class Config{
public:
void OnRequest(const TcpConnPtr& con, ConfigRequest& request);
}
相應的node介面
class Node{
protected:
virtual void onConfigResponse(const TcpConnPtr& con,ConfigResponse& response);
protected:
void sendToConfig(const TcpConnPtr& con,ConfigResponse& response);
};
service與server繼承node後實現onConfigResponse即可。
對外介面設計
為了介面方便,對外介面均設為http介面,並支援網頁。
prime:
[get] http://dist.alibaba-inc.com/calc/prime
引數 | 含義 |
---|---|
start | 起始值 |
end | 結束值 |
例:http://dist.alibaba-inc.com/calc/prime?start=1&end=10000
wordcount
[post] http://dist.alibaba-inc.com/calc/wordcount
引數 | 含義 |
---|---|
data | 待計算的檔案 |
tokenize | 分隔符 |
分散式查詢
[post] http://dist.alibaba-inc.com/calc/query
引數 | 含義 |
---|---|
app | 應用名 |
db | 庫 |
collection | 連線 |
data | 查詢條件 |
service與server程式架構
流程監控設計
為了方便了解每次請求的全鏈路情況,我在原架構中新增了日誌與監控模組
功能顯示設計
prime
wordcount
query
chat
業務流程圖
prime
wordcount
對於map reduce運算,實際處理過程是這樣的
query
這裡的query在設計上是簡化處理了的,生產上可能需要注意結果快取,主從同步等。
從上面的設計上,我們可以發現,分散式處理的基礎需要有一個config(配置伺服器),及內部通訊協議。
另外,節點的備份機制也很重要, 比如 config崩潰或者server崩潰的結果要做到不受影響。
崩潰恢復機制
config
對於config的功能,由於其核心功能是當前節點分佈,是動態資料,因此資料安全可以採用的方法有很多,比如redis,mysql, mongo等。
其自身的功能崩潰恢復可以採用一種簡單有效的方法。每個config節點都存有所有config的資訊並且同步到各個node(service/server)。
每當新起一個config或者關掉一個,資訊更新一次,node與config失聯後再主動選擇一個連線。
node
config提供node相互關注的能力, 即node A可以關注node B, 當node B斷開後,config會通知像A一樣所有關注它的node。
相關文章
- 我對計算機系統的理解計算機
- 分散式計算與Map Reduce分散式
- 我理解的雲端計算
- Titan-hadoop 分散式圖計算框架Hadoop分散式框架
- 分散式計算技術(上):經典計算框架MapReduce、Spark 解析分散式框架Spark
- ray-分散式計算框架-叢集與非同步Job管理分散式框架非同步
- 高效能分散式計算與儲存系統設計概要分散式
- 分散式設計與開發分散式
- 分散式雲端計算分散式
- 設計一個分散式RPC框架分散式RPC框架
- 雲端計算,網格計算,分散式計算,叢集計算的區別?分散式
- 我對函數語言程式設計的理解函數程式設計
- Hadoop 三劍客之 —— 分散式計算框架 MapReduceHadoop分散式框架
- [分散式]分散式計算系統淺析分散式
- Hadoop 分散式儲存分散式計算Hadoop分散式
- 分散式系統的設計與開發分散式
- 【轉】分散式計算的謬論分散式
- 我理解的分散式系統分散式
- 流計算框架 Flink 與 Storm 的效能對比框架ORM
- mqant分散式伺服器框架設計動機MQ分散式伺服器框架
- 我與計算機計算機
- 我所理解的介面設計
- 淺談分散式計算的開發與實現(一)分散式
- 淺談分散式計算的開發與實現(1)分散式
- 【分散式計算】DFS && BigTable分散式
- 分散式計算如果學習分散式
- 雲端計算分散式平行計算:系統架構分散式架構
- 談一談我對‘模板方法’設計模式的理解(Template)設計模式
- 【分散式計算】分散式日誌匯入工具-Flume分散式
- 轉轉基於MQ的分散式重試框架設計方案MQ分散式框架
- hadoop&spark mapreduce對比 & 框架設計和理解HadoopSpark框架
- 分散式計算,核心知識點分散式
- 效能之殤 | 分散式計算、超級計算機與神經網路共同的瓶頸分散式計算機神經網路
- 計算機網路層次與對應協議的理解計算機網路協議
- 分散式計算的八個謬誤 - Ably分散式
- go+lua的分散式計算工具--GleamGo分散式
- 從業 10 年,我對程式設計師職業的理解程式設計師
- 我對物件導向程式設計的理解,望banq指點。物件程式設計