分布式系统负载均衡策略分析与研究
題目: 分布式系統(tǒng)負(fù)載均衡策略分析與研究
2021年 12 月
摘 要
負(fù)載均衡(Load Balance)是分布式系統(tǒng)架構(gòu)設(shè)計(jì)中必須考慮的因素之一,它通常是指將請求/數(shù)據(jù)均勻分?jǐn)偟蕉鄠€(gè)操作單元上執(zhí)行,負(fù)載均衡的關(guān)鍵在于平均整體節(jié)點(diǎn)間的負(fù)載。常見的分布式系統(tǒng)的擴(kuò)展可分為縱向(垂直)擴(kuò)展和橫向(水平)擴(kuò)展。縱向擴(kuò)展是指增強(qiáng)單機(jī)處理能力的角度來增強(qiáng)整體集群的處理能力,然而更為廣泛的,更適用于分布式處理系統(tǒng)中的方式是橫向擴(kuò)展,即添加更多節(jié)點(diǎn)的方式來增強(qiáng)集群處理能力。能夠便捷、快速、穩(wěn)定的增減集群節(jié)點(diǎn)數(shù)量是現(xiàn)代分布式系統(tǒng)的核心功能之一,同時(shí)這個(gè)能力也滿足了高可用性與可管理性的要求。分布式系統(tǒng)的負(fù)載均衡問題研究已經(jīng)有數(shù)十年的研究歷史,然而其本質(zhì)上是一個(gè)NP完全問題,由于節(jié)點(diǎn)的異構(gòu)型和集群通信的復(fù)雜性,開發(fā)人員難以準(zhǔn)確量化節(jié)點(diǎn)工作負(fù)載和處理能力,也難以找到最優(yōu)的負(fù)載調(diào)度和負(fù)載分發(fā)策略。本文首先從樸素的負(fù)載均衡策略出發(fā)介紹了負(fù)載均衡的基本思想,然后介紹并總結(jié)了近幾年國內(nèi)外最新的分布式系統(tǒng)負(fù)載均衡策略。
關(guān)鍵詞 分布式計(jì)算 分布式存儲 負(fù)載均衡
一、負(fù)載均衡的基本概念
隨著數(shù)據(jù)庫技術(shù)的發(fā)展以及大數(shù)據(jù)時(shí)代的海量數(shù)據(jù)到來,傳統(tǒng)架構(gòu)的單機(jī)處理能力顯得力不從心,分布式的集群計(jì)算和存儲成為了許多公司的選擇。計(jì)算機(jī)軟硬件的發(fā)展使得并行與分布式計(jì)算越來越流行,同時(shí),計(jì)算機(jī)硬件成本的降低和快速網(wǎng)絡(luò)的出現(xiàn)又使得基于網(wǎng)絡(luò)的集群和網(wǎng)格計(jì)算流行起來[1]。使用多臺計(jì)算機(jī)對于一個(gè)大規(guī)模事務(wù)的數(shù)據(jù)進(jìn)行處理和存儲就是分布式集群出現(xiàn)的最初目的。
然而,在目前真實(shí)的分布式計(jì)算環(huán)境中存在資源利用率低下或者處理能力不足的問題,一方面可能存在負(fù)載較低而導(dǎo)致的硬件資源浪費(fèi),另一方面又可能存在負(fù)載過高而造成的大規(guī)模處理緩慢,這也就要求分布式集群能夠根據(jù)負(fù)載做出動(dòng)態(tài)的調(diào)整。在分布式的集群環(huán)境下,提升計(jì)算性能的方法分為水平擴(kuò)展和垂直擴(kuò)展,水平擴(kuò)展往往作為提升集群性能的第一選擇,同時(shí)水平擴(kuò)展也滿足分布式系統(tǒng)對于高可用性和可管理性的要求,因此能夠更好的管理集群中的大量節(jié)點(diǎn)是一個(gè)分布式操作系統(tǒng)的基本功能和要求。
當(dāng)一個(gè)新的事務(wù)被提交到集群中時(shí),如何分配這個(gè)任務(wù)到各個(gè)節(jié)點(diǎn),以達(dá)到降低整體處理時(shí)延或者提高整體系統(tǒng)吞吐率的問題,就是負(fù)載均衡問題。負(fù)載均衡是提高 系統(tǒng)資源利用率和并行計(jì)算性能的一個(gè)關(guān)鍵技術(shù),大致上可分為靜態(tài)負(fù)載均衡和動(dòng)態(tài)負(fù)載均衡兩類,如果負(fù)載可以在運(yùn)行之前確定并事先將負(fù)載劃分,則屬于靜態(tài)負(fù)載均衡問題;若只能在運(yùn)行時(shí)測量負(fù)載并動(dòng)態(tài)確定負(fù)載劃分,則屬于動(dòng)態(tài)負(fù)載均衡(Dynamic Load Balance, DLB)問題。
二、分布式負(fù)載均衡架構(gòu)
負(fù)載均衡是高可用集群基礎(chǔ)架構(gòu)的關(guān)鍵組件,通常用于將工作負(fù)載分布到多個(gè)服務(wù)器來提高網(wǎng)站、應(yīng)用、數(shù)據(jù)庫或其他服務(wù)的性能和可靠性。
在沒有負(fù)載均衡的CS結(jié)構(gòu)中,用戶直接與服務(wù)器交互,如果服務(wù)器宕機(jī)就會(huì)使得整個(gè)集群對于該用戶而言變得不可用,或者如果同時(shí)有很多用戶同時(shí)試圖訪問服務(wù)器,超過了其能處理的極限,就會(huì)低吞吐和高延遲的情況。這樣的架構(gòu)一方面可能發(fā)生大量用戶都訪問某個(gè)單節(jié)點(diǎn)而造成的負(fù)載偏斜問題,另一方面也不便于增加新的節(jié)點(diǎn)到集群中,關(guān)鍵節(jié)點(diǎn)的宕機(jī)會(huì)造成整個(gè)集群對外的服務(wù)中止,這顯然是不滿足服務(wù)的高可用性和可管理性的要求的。
因此,在這個(gè)基礎(chǔ)上,將服務(wù)器集群通過一個(gè)負(fù)載均衡器封裝起來,對外訪問和暴露的接口都是通過這個(gè)負(fù)載均衡器來進(jìn)行,從而實(shí)現(xiàn)了不同服務(wù)器節(jié)點(diǎn)之間進(jìn)行負(fù)載調(diào)度和分發(fā)的可行性。
一個(gè)最基礎(chǔ)、最樸素的架構(gòu)是DNS輪詢,也就是在訪問時(shí),通過DNS輪詢不同服務(wù)器節(jié)點(diǎn)的方式提供服務(wù),從而實(shí)現(xiàn)多臺服務(wù)器水平擴(kuò)展的目的。其好處是基本上沒有成本,只需要在域名解析時(shí)操作即可。然而不能保障高可用,即使某個(gè)節(jié)點(diǎn)宕機(jī)也無法被檢測到,還是會(huì)繼續(xù)向客戶提供服務(wù),并且DNS更新緩慢,不能適應(yīng)不同處理能力的節(jié)點(diǎn)做出變化。事實(shí)上,大型網(wǎng)站總是部分使用DNS域名解析,作為第一級負(fù)載均衡手段,然后再在內(nèi)部做第二級負(fù)載均衡。
另一個(gè)與此類似的方法是NAT(Network Address Translation),NAT是一種外網(wǎng)和內(nèi)網(wǎng)地址映射的技術(shù)。NAT模式下,網(wǎng)絡(luò)數(shù)據(jù)報(bào)的進(jìn)出都要經(jīng)過LVS的處理。LVS需要作為RS(真實(shí)服務(wù)器)的網(wǎng)關(guān)。當(dāng)包到達(dá)LVS時(shí),LVS做目標(biāo)地址轉(zhuǎn)換(DNAT),將目標(biāo)IP改為RS的IP。但由于所有請求響應(yīng)的數(shù)據(jù)包都需要經(jīng)過負(fù)載均衡服務(wù)器,因此負(fù)載均衡的網(wǎng)卡帶寬成為系統(tǒng)的瓶頸。
另一種常用的負(fù)載均衡架構(gòu)是使用Nginx作為反向代理負(fù)載均衡,反向代理的作用是保護(hù)節(jié)點(diǎn)安全,所有事務(wù)的請求都必須經(jīng)過代理服務(wù)器,整個(gè)集群對外暴露的接口只有反向代理服務(wù)器。因此就可以在反向代理服務(wù)器上實(shí)現(xiàn)負(fù)載均衡和事務(wù)調(diào)度。當(dāng)然,缺點(diǎn)同樣是可能會(huì)成為性能瓶頸。
由于反向代理節(jié)點(diǎn)也有失效的可能,為了實(shí)現(xiàn)集群的高可用[2],一般選擇部署反向代理集群,使用多臺節(jié)點(diǎn)組成反向代理集群,在增強(qiáng)可用性的條件下無疑也增大了資源開銷。
在反向代理集群中,一般情況下只有一個(gè)節(jié)點(diǎn)對外提供服務(wù),其他節(jié)點(diǎn)作為備份。因此就有了keepalived技術(shù)。Keepalived的作用是監(jiān)控集群節(jié)點(diǎn)的工作狀態(tài),在因?yàn)槟撤N原因不能正常提供服務(wù)的前提下,完成備機(jī)的切換。這里面有兩個(gè)關(guān)鍵點(diǎn):監(jiān)控節(jié)點(diǎn)上提供的服務(wù)、完成網(wǎng)絡(luò)切換。也就是說,keepalived本身是不提供業(yè)務(wù)服務(wù)的,只是通過發(fā)送heartbeat的方式確保主節(jié)點(diǎn)功能正常。所以一般情況下會(huì)有Nginx + Keepalived的工作結(jié)構(gòu)和LVS + Keepalived 的工作結(jié)構(gòu)。
三、幾種樸素的負(fù)載均衡策略
負(fù)載均衡的處理流程可以概括為接受事務(wù)請求、根據(jù)一定的方式分發(fā)請求、處理節(jié)點(diǎn)處理請求。這里的分發(fā)方式大致上分為四種。
輪詢方式。輪詢方式類似于上一節(jié)中的DNS輪詢,接收到事務(wù)之后,輪詢的向處理節(jié)點(diǎn)發(fā)送事務(wù)。這是最基本的配置方法,有點(diǎn)是事務(wù)分發(fā)絕對公平,而且開銷小。如果發(fā)現(xiàn)某個(gè)處理節(jié)點(diǎn)宕機(jī),就會(huì)自動(dòng)跳過這臺節(jié)點(diǎn)。缺點(diǎn)是不能適應(yīng)不同節(jié)點(diǎn)處理能力不同的情況,有可能造成負(fù)載傾斜。
指定權(quán)重方式。考慮到應(yīng)對不同節(jié)點(diǎn)有不同的處理能力,所以推出了指定權(quán)重的分配方法,也就是運(yùn)算能力強(qiáng)的節(jié)點(diǎn)權(quán)重大,反之權(quán)重則小,然后通過隨機(jī)分配的方式,權(quán)重作為選中的概率。優(yōu)點(diǎn)是考慮到了節(jié)點(diǎn)的異構(gòu)型,缺點(diǎn)是需要手動(dòng)配置權(quán)重,而且難以準(zhǔn)確的量化節(jié)點(diǎn)處理能力。
基于散列的方式,負(fù)載均衡器按照基于客戶端IP的分配方式,這個(gè)方法確保了相同的客戶端的請求一直發(fā)送到相同的服務(wù)器,以保證session會(huì)話。這樣每個(gè)訪客都固定訪問一個(gè)后端服務(wù)器,可以解決session不能跨服務(wù)器的問題。
除此之外,還有一些根據(jù)節(jié)點(diǎn)指標(biāo)進(jìn)行分配的方式,例如基于最大連接數(shù)的分配,基于最短響應(yīng)時(shí)間的分配。這些分配策略的核心都是通過某些指標(biāo)量化某些節(jié)點(diǎn)的負(fù)載情況和性能,從而達(dá)到集群整體分配均勻的目的。問題在于很難有指標(biāo)真正的量化節(jié)點(diǎn)負(fù)載情況,而且為了得到這些指標(biāo)需要付出額外的開銷。
四、復(fù)雜的分布式負(fù)載均衡策略
以上四種策略可以說是最為簡單樸素的分布式負(fù)載均衡策略的思想。關(guān)于分布式的負(fù)載均衡,已經(jīng)有許多學(xué)者做過相關(guān)的研究,這一部分就根據(jù)這些研究了解一些負(fù)載均衡領(lǐng)域最前沿的知識。
前面提到的思想都是比較通用的負(fù)載均衡思想,而涉及到更為復(fù)雜的情況時(shí),通常都是針對某一領(lǐng)域的負(fù)載均衡。負(fù)載均衡在分布式環(huán)境中是一個(gè)常見的要求,在分布式數(shù)據(jù)庫、分布式文件系統(tǒng)、復(fù)雜網(wǎng)絡(luò)結(jié)構(gòu)、云計(jì)算環(huán)境和分布式計(jì)算引擎等領(lǐng)域都有發(fā)揮著很重要的作用。
所有負(fù)載均衡策略的核心目的在于,當(dāng)新事務(wù)被提交到系統(tǒng)時(shí)應(yīng)該交由哪個(gè)或哪些節(jié)點(diǎn)處理以到達(dá)集群性能目標(biāo),這些目標(biāo)包括降低總體時(shí)延、提高集群數(shù)據(jù)吞吐等。
這里大致的將分布式的負(fù)載均衡策略目的分為兩個(gè)大的類別。
4.1 分布式數(shù)據(jù)存儲系統(tǒng)負(fù)載均衡策略
分布式數(shù)據(jù)庫的負(fù)載均衡一般是基于類似于Redis的主從模式實(shí)現(xiàn),也就是所有的操作都需要經(jīng)過一個(gè)中間件進(jìn)行,而分布式數(shù)據(jù)庫內(nèi)部的操作,包括選擇存儲節(jié)點(diǎn)、同步數(shù)據(jù)一致性等具體操作則對用戶完全透明。其負(fù)載均衡的操作一般也實(shí)現(xiàn)于這一中間件上。
與別的均衡策略不同,分布式數(shù)據(jù)庫的負(fù)載策略更加偏向于提高IO效率和數(shù)據(jù)在不同節(jié)點(diǎn)間的同步性保證方面。
一方面,數(shù)據(jù)庫的基本運(yùn)行特征就是大量的IO操作,尤其對于大部分?jǐn)?shù)據(jù)庫集群而言,讀操作要遠(yuǎn)遠(yuǎn)多于寫操作。因此一個(gè)基本的技術(shù)就是讀寫分離技術(shù)。讀寫分離簡單的說是把對數(shù)據(jù)庫讀和寫的操作分開對應(yīng)不同的數(shù)據(jù)庫服務(wù)器,主數(shù)據(jù)庫提供寫操作,從數(shù)據(jù)庫提供讀操作,其實(shí)在很多系統(tǒng)中,主要是讀的操作。當(dāng)主數(shù)據(jù)庫進(jìn)行寫操作時(shí),數(shù)據(jù)要同步到從的數(shù)據(jù)庫,這樣才能有效保證數(shù)據(jù)庫完整性。主數(shù)據(jù)庫另外一個(gè)功能就是負(fù)責(zé)將事務(wù)性查詢導(dǎo)致的數(shù)據(jù)變更同步到從庫中,也就是寫操作。
另一方面,分布式數(shù)據(jù)庫的另一大特性就是分布式存儲和備份。為了數(shù)據(jù)的安全和充分利用集群資源,分布式數(shù)據(jù)庫不會(huì)把大量的數(shù)據(jù)都存儲在少數(shù)幾個(gè)節(jié)點(diǎn)上。通過路由規(guī)則路由訪問特定的數(shù)據(jù)庫,這樣一來每次訪問面對的就不是單臺服務(wù)器了,而是N臺服務(wù)器,這樣就可以降低單臺機(jī)器的負(fù)載壓力。拆分的方法包括將不同的表存儲在不同節(jié)點(diǎn)(縱向拆分)或者將同一個(gè)表的數(shù)據(jù)進(jìn)行分塊保存到不同的數(shù)據(jù)庫中(水平拆分),這些數(shù)據(jù)庫中的表結(jié)構(gòu)完全相同。
在分布式文件系統(tǒng),例如GFS中,面臨的挑戰(zhàn)也主要在高并發(fā)的讀操作和數(shù)據(jù)的強(qiáng)一致性保障上,往往以包含千兆字節(jié)的文件和包含千兆字節(jié)信息和數(shù)百萬個(gè)對象的數(shù)據(jù)為特征[3]。GFS采用單Master節(jié)點(diǎn)的模式,HDFS采用NameNode存儲文件原數(shù)據(jù),這些文件系統(tǒng)的負(fù)載均衡策略也是在主節(jié)點(diǎn)上進(jìn)行執(zhí)行。此外,針對不同特性的特殊文件存儲系統(tǒng),例如超大文件存儲系統(tǒng)[4]等還有獨(dú)特的分布式文件系統(tǒng)設(shè)計(jì)。
總結(jié)而言,分布式數(shù)據(jù)庫系統(tǒng)如Hbase與很多分布式文件系統(tǒng)如HDFS和GFS等專注于數(shù)據(jù)存儲的分布式系統(tǒng)都是專注于數(shù)據(jù)IO的高并發(fā)以及數(shù)據(jù)的一致性保障。這一類的分布式系統(tǒng)往往會(huì)承擔(dān)大量數(shù)據(jù)的存儲、讀寫以及備份和同步要求,因此在提高IO并發(fā)性以及保障數(shù)據(jù)強(qiáng)一致性和分區(qū)容錯(cuò)性上有較多的設(shè)計(jì)。
4.2 分布式數(shù)據(jù)處理系統(tǒng)負(fù)載均衡策略
與分布式的數(shù)據(jù)存儲系統(tǒng)負(fù)載均衡策略完全不同的另一個(gè)領(lǐng)域是分布式的數(shù)據(jù)處理系統(tǒng)的負(fù)載均衡策略。在數(shù)據(jù)處理的分布式系統(tǒng)中,負(fù)載均衡策略更像是一種調(diào)度策略,其核心往往是通過向不同節(jié)點(diǎn)分發(fā)子任務(wù)使得充分利用集群計(jì)算資源,計(jì)算并發(fā)度提高從而降低處理時(shí)延或者增大吞吐量。
另一個(gè)不同的在于分布式數(shù)據(jù)處理系統(tǒng)更多的會(huì)根據(jù)從集群節(jié)點(diǎn)反饋的數(shù)據(jù)和集群指標(biāo)中挑選最佳的處理集群節(jié)點(diǎn),而非像存儲系統(tǒng)那樣主要是由Master來管理和調(diào)度。
一個(gè)典型的分布式計(jì)算環(huán)境是云計(jì)算環(huán)境。云計(jì)算是計(jì)算機(jī)領(lǐng)域的一項(xiàng)現(xiàn)代技術(shù),可以隨時(shí)為客戶提供服務(wù)。在云計(jì)算系統(tǒng)中,資源分布在世界各地,以更快地為客戶提供服務(wù)為目的[5]。云計(jì)算的核心技術(shù)就是虛擬容器技術(shù)[6],物理上的一臺節(jié)點(diǎn)可以邏輯上被劃分為多個(gè)節(jié)點(diǎn),而負(fù)載均衡策略就虛擬容器進(jìn)行調(diào)度和任務(wù)分配。在這方面有著許多的研究和算法,負(fù)載均衡器會(huì)根據(jù)許多指標(biāo),包括:吞吐量、響應(yīng)時(shí)間、最大完成時(shí)間、可擴(kuò)展性等,利用強(qiáng)化學(xué)習(xí)算法[7]或者一些樸素的算法選擇最佳的分配負(fù)載的策略。
另一個(gè)分布式計(jì)算環(huán)境就是一系列的分布式處理引擎,例如最早期的Mapreduce,以及最新的分布式流處理引擎Flink等。這些部署在集群式上處理引擎有一部分的核心功能就是處理在分布式環(huán)境下高可用、高效的完成數(shù)據(jù)的處理和計(jì)算。以Flink[8]為例,其使用Yarn、K8S等資源管理框架調(diào)度物理資源,使用基于有向無環(huán)圖(DAG)的方式在不同節(jié)點(diǎn)上均勻負(fù)載,以最小時(shí)延為目標(biāo)。
五、總結(jié)
本文首先介紹了分布式負(fù)載均衡的基本概念,然后講解了幾種樸素的分布式系統(tǒng)負(fù)載均衡策略,最后結(jié)合近幾年相關(guān)領(lǐng)域的研究總結(jié)了兩種大類的分布式負(fù)載均衡策略類型。
數(shù)據(jù)存儲類的分布式系統(tǒng)負(fù)載均衡策略將更多的重心放在提高IO讀取速度和數(shù)據(jù)的一致性保證上,這類負(fù)載均衡策略主要有Master節(jié)點(diǎn)實(shí)現(xiàn),使用讀寫分離和多種高效的同步策略來提高數(shù)據(jù)存儲速度、讀寫速度,以及更加均勻的分派IO負(fù)載和存儲硬件資源負(fù)載。
數(shù)據(jù)計(jì)算類的分布式系統(tǒng)負(fù)載均衡策略更加類似于計(jì)算的調(diào)度器,其目的在于通過提高計(jì)算并行度、更加高效的利用硬件資源、較小通信時(shí)延的方式,降低處理時(shí)延,提高系統(tǒng)吞吐。
參考文獻(xiàn)
[1] 楊際祥, 譚國真, 王榮生. 并行與分布式計(jì)算動(dòng)態(tài)負(fù)載均衡策略綜述[J]. 電子學(xué)報(bào), 2010, 38(5):9.
[2] YU L, RUAN W. Research and Implementation of Load Balance Technology [J][J]. Computer Technology and Development, 2007, 8.
[3] Ghemawat S, Gobioff H, Leung S T. The Google file system[C]//Proceedings of the nineteenth ACM symposium on Operating systems principles. 2003: 29-43.
[4] Liu H, Ding W, Chen Y, et al. Cfs: A distributed file system for large scale container platforms[C]//Proceedings of the 2019 International Conference on Management of Data. 2019: 1729-1742.
[5] Ghomi E J, Rahmani A M, Qader N N. Load-balancing algorithms in cloud computing: A survey[J]. Journal of Network and Computer Applications, 2017, 88: 50-71.
[6] Elveny, Marischa & Winata, Ari & Siregar, Baihaqi & Rahmad Syah, Bayu. (2020). A tutorial: Load balancers in a container technology system using docker swarms on a single board computer cluster. 19. 744-751. 10.17051/ilkonline.2020.04.178.
[7] Asghari A, Sohrabi M K, Yaghmaee F. Task scheduling, resource provisioning, and load balancing on scientific workflows using parallel SARSA reinforcement learning agents and genetic algorithm[J]. The Journal of Supercomputing, 2021, 77(3): 2800-2828.
[8] Carbone P, Katsifodimos A, Ewen S, et al. Apache flink: Stream and batch processing in a single engine[J]. Bulletin of the IEEE Computer Society Technical Committee on Data Engineering, 2017, 36(4).
總結(jié)
以上是生活随笔為你收集整理的分布式系统负载均衡策略分析与研究的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大规模分布式系统架构与设计实战
- 下一篇: 分布式系统到底是什么