close

大規模分佈式存儲如何優化?Facebook說自己的方法能把CPU負載降一半

導語:為瞭給幾十億用戶提供更快的瀏覽速度,以及節省自己的服務器資源,Facebook可一點沒閑著


雷鋒網(公眾號:雷鋒網) AI 科技評論按:Facebook今天在研究blog上發佈瞭一篇文章,介紹瞭自己的超大規模圖分區優化算法SHP。這是 Facebook 為瞭處理自己的規模過大的圖分區問題開發的方法,而且在大規模優化問題中確實發揮瞭作用。這項研究的論文也已經被數據庫領域著名國際會議 VLDB 2017(Very Large Data Bases)收錄。雷鋒網 AI 科技評論把這篇介紹文章編譯如下。

對Facebook來說,每天它要服務的用戶是十億級別的。為瞭支持這種規模的訪問量,Facebook 需要在許多個不同的層次上設計分佈式的負載。Facebook 在全球建立瞭多個數據中心來提升用戶訪問的可靠性、容錯性,以及改善延遲。不過單個托管服務器的容量和計算資源總是有限的,Facebook 的存儲系統需要在多個托管服務器之間共享數據,批量計算任務也需要在上千個工作站形成的集群上運行,以便提升計算規模、加快計算速度。

這些系統的核心是一系列小安排,就是決定如何把請求、數據條目、計算任務等等任務元素分配給數據中心、托管服務器或者工作站等等計算小組中的某一個。能夠分配任務的方法有無數種,但是不同的分配方法帶來的響應時間和服務質量可謂天差地別。

要考慮的第一個方面就是負載平衡:如果某一個計算小組已經過載瞭,它就沒辦法達到原定的響應時間或者服務水平。對於給定的負載分佈,總還有進一步優化的潛力,因為很多的事情在同一處做的效果都比分開做的效果更好。比如把兩個經常需要同時訪問的數據放在同一個存儲托管服務器上就能夠提升會用到這些數據的查詢性能。

平衡圖分區(balanced graph partitioning)就提供瞭一種有用的方法來處理任務背後的工作量分配問題。在這種方法中,圖裡的節點會被分給多個“bucket”中的一個,代表著計算項目會被平衡地分配給多個計算小組中的一個,整個過程中還持續對任務的某些特征進行優化,比如單個小組內的任務相似性。以前Facebook就在文章中介紹過他們如何用平衡台中月子中心價格圖分區的方法達到瞭前所未有的系統表現,在他們的新論文「Social Hash Partitioner: A Scalable Distributed Hypergraph Partitioner」中,Facebook 介紹瞭一種分區二分圖的新方法,它能夠讓扇出(fan-out)最小化。這種新方法在Facebook的許多分佈式負載優化任務中都發揮瞭效果。Facebook 把基於這種方法形成的框架稱作 Social Hash Partitioner (SHP),因為它可以作為之前 Facebook NSDI 2016論文中的Social Hash 框架的超圖分區組件。

以下對SHP 的亮點作逐一介紹

減少扇出Facebook 研究員們研究如何減少扇出問題的起源就是分佈式數據集中經常出現的碎片化問題。假設有這樣一個情況,一個很大的數據集,其中的數據記錄分佈在許多個數據服務器上。對數據集的一次查詢可能會用到好幾條數據記錄,如果這些數據記錄分散在好幾個服務器上,那麼就需要給這每一個服務器都發送查詢才能夠應答原來的查詢。這樣一來,把數據記錄分配給不同的服務器的方式就決定瞭處理一個查詢的時候需要發起的新查詢的數目;這個數字就被稱作這次查詢的“扇出 fan-out”。扇出低的查詢就可以執行得更快,因為過程中需要與一個較慢的服務器溝通的可能性更低,而且也通過減少溝通計算量的方式降低瞭整個系統的負載。所以,一種常見的優化目標就是為數據集選擇一種數據分配方法,讓不同的查詢所需要的數據直接存放在同一個地方。

圖1就給出瞭分別用生成的訪問請求和真實的請求測試後的系統表現。

圖1

在圖中,縱坐標t代表瞭系統的平均延遲。可以看到高扇出的請求承受的延遲也更高。具體來說,40左右就是很高的扇出值瞭,如果降低到10,這個查詢的延遲就可以達到平均值。

碎片化存儲問題可以建模為一個二分圖分區問題。圖2中,數據條目和需要訪問它們的查詢被表示為二分圖中的頂點,然後要把數據分為k個組;分的過程中每個組要分到近似的數據量,而且每個查詢需要連接到的不同的組數目的平均值要越小越好。

圖2

找到低扇出的分區
找到一個圖的優化分區往往是一個很難計算的問題。一種典型的啟發式方法是從一些初始的平衡分區開始,在一個迭代過程中對某些頂點的分配做局部小調整,逐漸提高分組的效果。在每輪迭代中,每一個頂點都會估計把自己換到其它分組裡面去的偏好,這個稱作“收益gain”。如果新的收益比目前分配方式的收益高,就可以嘗試在保持總體負載平衡的情況下把這個頂點移到另一個組裡面去。

不過,這個方法用在扇出優化裡面的效果很不好,圖3中就是一種出現問題的情形,圖中標出的V1和V2分別在兩個組之中。

圖3

每個查詢(q1, q2, q3) 都剛好訪問瞭兩個分組,所以平均扇出就是2。但這並不是最優分組,因為如果把頂點3、4和5、6交換位置的話就會把q1和q2查詢的扇出降低為1,平均扇出就會降低為1.33。然而,從每一個頂點自己的角度看來,把自己更換到另一個分組裡面去並不會有更高的收益,所以需要用到這個節點的扇出就不會得到任何優化。

Facebook 的新研究改善瞭這種狀況,他們把優化目標變得“平滑”:不再假設一個查詢需要求出所有所需數據的扇出,而假設它會以一個概率p訪問每個數據條目。這樣就把每個頂點從分組i 更換到分組j 的收益 v 表示為:

圖4

其中的 N(v) 是訪問 v 的一組查詢,ni(q) 是查詢 q 在分組 i 中訪問的數據條目數量。采用瞭這樣的收益估計之後,頂點就更容易表現出對含有同類查詢的分組的偏好,即便在執行瞭這樣的更換之後也沒有降低實際扇出。

這樣,論文中的算法就可以表示為如下的形式:

初始化一組平衡的分組(比如隨機)

重復如下步驟直到收斂

對於每一個頂點 v

根據以上的方程,找到移動收益最高的分組 j

記錄下頂點 v 有想從當前分組 i 移動到新分組 j 的意願

對於每一對分組 i 和 j

找到有從 i 到 j 的意願的頂點和有從 j 到 i 的意願的節點,更換它們

優化效果和大規模問題的表現扇出最小化問題等效於一個平衡超圖分區問題。目前就有一些超圖分區框架,但是Facebook的圖規模太大瞭,現有框架都處理不瞭。

Facebook 在 Apache Giraph 構建瞭他們的解決方案,而且為圖的大小和理想的分組數目做瞭精心的設計:頂點運動的評價可以用分佈式的方式完成,而且發生在當前頂點與其它頂點溝通過任務分配之後。同樣地,頂點更換的操作也可以用分佈式的方法完成,成對的小組 (i,j) 可以分佈在不同的托管服務器上,或者用概率選擇對更換的決定做近似。在實際應用中,Facebook 的研究人員們發現以分佈式方法實現的算法能夠處理的圖要比其它現有方法能處理的最大的圖還要大100倍,同時還無需犧牲優化質量。

圖5展現瞭算法的運行時數據(SHP的兩個變體 SHP-2和 SHP-K)並與其它現有的分區框架進行瞭對比。測試內容包含在三個不同大小的圖(邊的數目不同,從一千萬到五十億)和不同的分組數目中的表現。在小規模的優化任務中,SHP往往是完成得最快的那台中市月子中心個;而對於大規模優化任務,SHP是唯一一個能夠在合理的時間內求出一個優化方案的參賽者。

圖5台中月子中心

圖6展現瞭SHP和其它框架的優化質量的對比。由於網絡真正的最優平均扇出目前並台中產後之家介紹不能確定,所以圖中展示的是各個結果高出現有最優算法的百分比。在大規模優化任務中,SHP的效果是最好的;不過在小規模優化任務中,SHP最多可以比現有算法中最好的結果差12%。

圖6

結論和拓展閱讀扇出減少模型可以在Facebook的許多基礎優化問題中起到作用,比如數據碎片化、查詢路由和索引壓縮。從 SHP 開發成功之後,Facebook 就經常用它來解決具有十億節點和萬億條邊的圖扇出優化問題,內部實驗表明在分佈式系統上使用 SHP 的數據分配方案可以把 CPU 消耗下降一半之多。這篇論文也被收錄在瞭 VLDB 2017。SHP 也已經作為一個Giraph 應用開源,可以用在優化任務和教育中。

論文地址:http://www.vldb.org/pvldb/vol10/p1418-pupyrev.pdf

NSDI 2016的分區優化器論文地址:https://www.usenix.org/system/files/conference/nsdi16/nsdi16-paper-shalita.pdf

via Facebook Research Blog,雷鋒網 AI 科技評論編譯

雷鋒網版權文章,未經授權禁止轉載。詳情見轉載須知。

台中產後照護介紹

台灣電動床工廠 電動床

台灣電動床工廠 電動床

AUGI SPORTS|重機車靴|重機車靴推薦|重機專用車靴|重機防摔鞋|重機防摔鞋推薦|重機防摔鞋

AUGI SPORTS|augisports|racing boots|urban boots|motorcycle boots

arrow
arrow

    tf8fecx8rv 發表在 痞客邦 留言(0) 人氣()