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