本文主要介紹百度云智能運維架構團隊在處理大規(guī)模日志計算任務時,為保證任務分配均勻性和穩(wěn)定性,對原始一致性哈希算法進行改進。新算法在保持原始一致性哈希算法穩(wěn)定性的同時,通過設置不均衡因子來控制分配的不均勻范圍,達到負載分配均勻性與穩(wěn)定性有效兼容。
業(yè)務場景
分布式系統(tǒng)中我們經(jīng)常會面對如下業(yè)務場景:
計算系統(tǒng)每分鐘有大量的定時任務需要及時調(diào)度并按時完成,單機在處理能力和時效性上都無法滿足要求,需要將任務分配到大量Work節(jié)點上進行并行計算,我們?nèi)绾尉鶆蚍峙溥@些任務,并且在任務增減,Work節(jié)點退出/加入(伸縮能力)時保持任務分配的穩(wěn)定性(不會引起大量任務遷移)。
分布式存儲系統(tǒng),海量數(shù)據(jù)被分片存儲,那么如何讓每個Data節(jié)點上分片更加均勻,并且在Data節(jié)點退出/加入時保持數(shù)據(jù)分片的穩(wěn)定性。
高并發(fā)Web系統(tǒng)中,架構上幾乎都是一個或多個反向代理服務器(如Nginx)來做七層負載均衡,后端使用應用服務器集群(如Tomcat)提供服務,這種架構具備水平伸縮能力,那么反向代理如何均勻分配請求,并且盡量保證請求Session粘性。
問題分析
上述問題可以抽象為對分配算法如下幾個方面的要求:
公平性:即算法的結果要盡可能地公平,不能造成分配不均問題,這點在分布式系統(tǒng)中尤其重要,公平性就是要盡可能避免由于負載過重/過輕導致系統(tǒng)出現(xiàn)慢節(jié)點/饑餓節(jié)點影響系統(tǒng)整體性能和資源利用率。
穩(wěn)定性:分布式系統(tǒng)中,集群節(jié)點維護、故障、宕機、重啟、擴縮容是非常常見的,穩(wěn)定性就是要保證計算任務、數(shù)據(jù)、請求在節(jié)點加入/退出時盡可能保持穩(wěn)定,不引起大量計算任務重分配、數(shù)據(jù)遷移、請求轉移,這對系統(tǒng)整體可靠性、穩(wěn)定性、高性能至關重要。
可行性:算法在工程實踐上一定是可行的,具體體現(xiàn)在這兩個方面:時間復雜度、空間復雜度,時間復雜度要求一定要快,滿足業(yè)務場景對響應時間的要求,空間復雜度要求占用資源少,滿足業(yè)務在資源投入和收益上的平衡。
【版權聲明】:本站內(nèi)容來自于與互聯(lián)網(wǎng)(注明原創(chuàng)稿件除外),供訪客免費學習需要。如文章或圖像侵犯到您的權益,請及時告知,我們第一時間刪除處理!謝謝!