分布式系统中Topology(Rack) Awareness的实现思路
文章目錄
- 前言
- 為何要考慮Topology Awareness
- Topology Awareness的一般實現思路
- Step1: Node Location賦予
- Step2: Topology的結構組織和距離計算
- Step3: 最近節點的選擇
- 引用
前言
在分布式系統中,尤其是存儲系統中,我們經常會看到類似“系統返回一個最近的數據”這樣的句子”。當我們談到一個數據“遠近”的問題時,你可以說這是在談數據locality的問題,但從更宏觀的角度來看這個問題,它其實談的是Topology Awareness(拓撲架構感知)的事情。本文筆者來簡單聊聊這個話題,其實我們平時更多的是用另一個詞–Rack-Awareness(機架感知)來指代這個問題。
為何要考慮Topology Awareness
其實在小規模,小體量集群環境中,是確實可以不用考慮拓撲結構感知的問題的。這里的結構可理解為是它的網絡結構(/data center/rack/node)。但是當集群規模變大,甚至有了不同的數據中心,機房時,這里面就要考慮網絡數據通信的問題。也就是我們需要開始重視這里面的網絡結構的問題,總不能每天把機房帶寬打滿吧。基本原則是優先訪問本地(可以同節點,rack,datacener)數據,盡可能避免遠程數據傳輸。所以Topology Awareness要解決的就是這樣的一個問題,避免的是一個resource消耗的問題。
Topology Awareness的一般實現思路
結合HDFS內部的NetworkTopology實現以及最近Ozone的Topology Awareness設計實現,筆者來簡單概括下其中的設計思想,還是有很多通用的地方可以借鑒借鑒的。
Step1: Node Location賦予
節點的拓撲結構位置賦予是Topology Awareness的一個初始前提。一般情況下,我們會將節點實際的網絡位置情況作為它的實際位置值,比如如下:
/data-center/rack/node
或者說有時我們還要在node前多加一層(比如交換機),
/data-center/rack/switch/node
每多一層級,相當于這個路徑深度又深了一層。這其實是一個樹結構,最后的節點為葉子節點,然后中間的節點更多的是一個邏輯上的角色節點。
當然,我們也可以手動賦值邏輯位置,不依賴于物理實際網絡位置。通過外部腳本提供這層位置關系,目前Hadoop內部已經支持這個功能。
Step2: Topology的結構組織和距離計算
在上文已經提到過,整個Topology結構是一個樹型結構,通過中間節點進行組織串聯。在這個大型的樹結構中,一般我們會分為兩類節點:
- 葉子節點,實際物理節點
- 非葉子節點,包括樹的根節點和所有中間節點都為此類型節點
然后這些節點會有一些公共屬性:
- 孩子節點信息
- 位置信息
- 距離開銷,指當前節點和其下孩子節點的“距離”
上面的距離開銷屬性值在后面計算最近節點時會起到關鍵的作用,我們可以用距離單元來對此賦值。
我們以下面一個例子來解釋距離的開銷的含義:
上圖中直線中數字即距離開銷,越往上,距離值越大實際意為網絡傳輸開銷越大。上圖中比如node1和node2之間的距離為1+1=2,計算方式為2個節點遞歸往上找,找到最近公共祖先,然后計算這之間的距離開銷和,即為2個節點間的距離值。
有了以上的結構組織方式和距離計算方式,節點間的數據本地性通信將會大大得到提升。同一機房優先于跨機房通信,同機房內,同機架優先于跨機架的。
Topology結構的自定義組織
以上的結構定義還能夠實現得更為靈活,可用。我們完全可以在上面node節點前在加一層nodegroup層,然后也賦予一個距離值,如下圖:
這其實就是我們對整個Topology的整體結構設計了。這可以作為一個topology的配置屬性,由用戶進行設置,包括以下幾要素:
- 節點類型
- 所在樹的深度
- 距離開銷值
Step3: 最近節點的選擇
當我們把整個Topology都完善好之后,那么我們如何來選擇“最近”節點呢?這里的最近節點其實就是距離開銷和最小的節點,物理意義即數據本地性更優先的節點。
一個能夠想到的簡單粗暴的辦法,獲取當前請求節點位置,然后和集群內的所有節點進行一個距離計算,然后按照距離值升序排列,選取第一個距離最短的。然后進行數據的讀或者寫。
以上這種方法雖說可行,但是效率并一定是最高的。在Hadoop中,它的做法是通過引入一個scope值來限定候選節點。候選節點必須是此scope范圍內的,判斷方法是通過位置前綴匹配是否符合。當然,也可以反著用,帶上字符“~”前綴即是exclude排斥的意思。
以上內容來自于Hadoop內的Topology Awareness的實現思路,詳細細節可參考下文鏈接地址。
引用
[1].https://docs.google.com/document/d/1HsZqlBcEmlezU6HriUaIOFE9SFdcBoaiz15Qt_ng0P8/edit
總結
以上是生活随笔為你收集整理的分布式系统中Topology(Rack) Awareness的实现思路的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RFID和NFC的区别
- 下一篇: 网络安全学习路线(顶级白帽黑客)