一、背景簡(jiǎn)介
1.1、現(xiàn)狀
?實(shí)際生產(chǎn)環(huán)境中,復(fù)雜業(yè)務(wù)系統(tǒng)對(duì)分布式服務(wù)集群架構(gòu)的依賴。
?服務(wù)集群異質(zhì)化節(jié)點(diǎn)的容器化部署,機(jī)器性能超賣現(xiàn)象不可避免、性能不均情況時(shí)有發(fā)生。
?服務(wù)集群各硬件組件出錯(cuò)率不可避免[1],上層業(yè)務(wù)相關(guān)的應(yīng)用軟件系統(tǒng)需考慮容錯(cuò)設(shè)計(jì)。
?大促流量分布變化難以準(zhǔn)確預(yù)見,系統(tǒng)服務(wù)穩(wěn)定性與機(jī)器資源成本之間需進(jìn)行妥善權(quán)衡。
1.2、問題
?集群內(nèi)負(fù)載不均,整體資源利用率低。
?單節(jié)點(diǎn)過載容易觸發(fā)集群整體擴(kuò)容。
?節(jié)點(diǎn)偶發(fā)硬件(CPU、網(wǎng)卡、內(nèi)存等)異常影響業(yè)務(wù)服務(wù)整體可用率。
?大促等分布多變的線上流量容易導(dǎo)致集群服務(wù)穩(wěn)定性問題。
1.3、需求
設(shè)計(jì)合理的負(fù)載均衡策略(LB)來提高服務(wù)集群的資源利用率和服務(wù)穩(wěn)定性,以有效應(yīng)對(duì)大促?gòu)?fù)雜多變的流量對(duì)系統(tǒng)服務(wù)的沖擊。
二、理論基礎(chǔ)
2.1、通用負(fù)載均衡問題
負(fù)載均衡是提高系統(tǒng)資源利用率和并行計(jì)算性能的一個(gè)關(guān)鍵技術(shù),可分為靜態(tài)和動(dòng)態(tài)兩類。如果負(fù)載可以在運(yùn)行之前確定并事先將負(fù)載劃分,則屬于靜態(tài)負(fù)載均衡問題;若只能在運(yùn)行時(shí)測(cè)量負(fù)載并動(dòng)態(tài)確定負(fù)載劃分,則屬于動(dòng)態(tài)負(fù)載均衡(DLB)問題。
對(duì)于給定的一個(gè)包含計(jì)算和通訊的任務(wù)集合,以及一組通過一定拓?fù)溥B接起來的計(jì)算機(jī),求解任務(wù)到計(jì)算機(jī)的一個(gè)映射,使得求解該問題的時(shí)間最小,這就是負(fù)載均衡的目標(biāo)[2]。
2.2、負(fù)載均衡策略匯總
2.2.1、分布式策略
實(shí)現(xiàn)分布式的負(fù)載均衡可有多種策略,其中一個(gè)基本策略就是近鄰法。在該策略中,每個(gè)處理器和相鄰處理器交換負(fù)載,實(shí)現(xiàn)和相鄰處理器間的負(fù)載均衡,并經(jīng)過多次迭代達(dá)到全局負(fù)載均衡。它主要包括擴(kuò)散法、維交換法(DEM)和梯度法(GM)。
2.2.2、集中式策略
在集中式策略中,每個(gè)處理器的計(jì)算負(fù)載和通訊發(fā)送到一個(gè)指定的處理器,該處理器負(fù)責(zé)收集、處理全局的負(fù)載信息,并做出全局的負(fù)載均衡決策。
2.2.3、混合/層次策略
為了最小化負(fù)載均衡開銷,一些負(fù)載均衡方法重在研究如何根據(jù)層次拓?fù)浣Y(jié)構(gòu)來構(gòu)建一個(gè)層次樹的問題。利用層次樹進(jìn)行多級(jí)負(fù)載均衡,根據(jù)層次化的網(wǎng)絡(luò)結(jié)構(gòu)將處理器劃分為多個(gè)組(均衡域),由這些均衡域組織成一個(gè)層次結(jié)構(gòu)。在層次結(jié)構(gòu)中的每一層,相鄰的域間進(jìn)行負(fù)載均衡,并且從底層至上層,在每層執(zhí)行相同的域間負(fù)載均衡過程,最后在根節(jié)點(diǎn)完成全局的負(fù)載均衡。
2.3、負(fù)載均衡算法層級(jí)
2.3.1、系統(tǒng)級(jí)負(fù)載均衡
?DNS負(fù)載均衡
DNS負(fù)載均衡是一種使用DNS(域名系統(tǒng))來分散到達(dá)特定網(wǎng)站的流量的方法?;旧希峭ㄟ^將一個(gè)域名解析到多個(gè)IP地址來實(shí)現(xiàn)的。當(dāng)用戶試圖接入這個(gè)域名時(shí),DNS服務(wù)器會(huì)根據(jù)一定的策略選擇一個(gè)IP地址返回給用戶,以此來實(shí)現(xiàn)網(wǎng)絡(luò)流量的均衡分配。
?Nginx負(fù)載均衡
Nginx是一種高效的Web服務(wù)器/反向代理服務(wù)器,它也可以作為一個(gè)負(fù)載均衡器使用。在負(fù)載均衡配置中,Nginx可以將接收到的請(qǐng)求分發(fā)到多個(gè)后端服務(wù)器上,從而提高響應(yīng)速度和系統(tǒng)的可靠性。Nginx是負(fù)載均衡比較常用的方案。
?LVS/F5+Nginx
Nginx一般用于七層負(fù)載均衡,其吞吐量是有一定限制的,如果網(wǎng)站的請(qǐng)求量非常高,還是存在性能問題。為了提升整體吞吐量,會(huì)在DNS和Nginx之間引入接入層,如使用LVS(軟件負(fù)載均衡器)、F5(硬件負(fù)載均衡器)可以做四層負(fù)載均衡,即首先DNS解析到LVS/F5,然后LVS/F5轉(zhuǎn)發(fā)給Nginx,再由Nginx轉(zhuǎn)發(fā)給后端真實(shí)服務(wù)器。
2.3.2、應(yīng)用級(jí)負(fù)載均衡
?Ribbon負(fù)載均衡
Ribbon是一個(gè)開源的、基于HTTP和TCP的客戶端負(fù)載均衡工具,它提供了一個(gè)簡(jiǎn)單的、基于配置的負(fù)載均衡策略,其通過在客戶端上運(yùn)行來選擇最佳的服務(wù)器。Ribbon提供了多種負(fù)載均衡策略,如隨機(jī)、輪詢、最少活躍調(diào)用等,可以根據(jù)實(shí)際需求選擇合適的策略。當(dāng)客戶端連接到服務(wù)器后,Ribbon會(huì)根據(jù)服務(wù)器的響應(yīng)速度、負(fù)載情況等因素進(jìn)行評(píng)估,并動(dòng)態(tài)調(diào)整選擇的服務(wù)器。這種方式可以實(shí)現(xiàn)更靈活的負(fù)載均衡,提高系統(tǒng)的可用性和性能。
?Dubbo負(fù)載均衡
Dubbo是一種高性能的分布式服務(wù)框架,它提供了一套完整的服務(wù)治理解決方案。其中,負(fù)載均衡是Dubbo框架的重要特性之一,它可以幫助我們實(shí)現(xiàn)服務(wù)調(diào)用的負(fù)載均衡,提高系統(tǒng)的性能和可靠性。通過配置文件或編程方式,我們可以基于Dubbo框架在多個(gè)服務(wù)提供者之間靈活地進(jìn)行請(qǐng)求分發(fā),以實(shí)現(xiàn)請(qǐng)求的負(fù)載均衡。具體地,其提供了多種負(fù)載均衡策略,包括隨機(jī)、輪詢、最少活躍調(diào)用等。
三、方案實(shí)踐
3.1、模型系統(tǒng)負(fù)載均衡策略演進(jìn)歷程
圖3-1. 在線模型系統(tǒng)服務(wù)常見架構(gòu)
3.1.1、常見負(fù)載均衡策略
?靜態(tài)負(fù)載均衡技術(shù)
?輪詢(Round Robin)、隨機(jī)(Random)等;
?處理策略簡(jiǎn)單、時(shí)效性高,但依賴集群節(jié)點(diǎn)同質(zhì)化假設(shè)。
?動(dòng)態(tài)負(fù)載均衡技術(shù)
?最小鏈接數(shù)(Least Connections)、最低時(shí)延(Locality Aware)等;
?基于節(jié)點(diǎn)相關(guān)狀態(tài)信息反饋,實(shí)時(shí)調(diào)整分流策略,進(jìn)而達(dá)到期望指標(biāo)的均衡。
3.1.2、演進(jìn)一:LB策略適配服務(wù)集群業(yè)務(wù)特點(diǎn)
?在線特征服務(wù)集群
?在線廣告業(yè)務(wù)場(chǎng)景:User & Sku數(shù)量龐大、特征類型豐富。
?集群Cache機(jī)制保證特征處理時(shí)效性,并降低相關(guān)依賴服務(wù)(如:SKU服務(wù)集群)請(qǐng)求壓力。
?LB策略需保證一定的Cache命中率:基于用戶PIN的一致性Hash策略[3]。
?模型預(yù)估服務(wù)集群
?在線推理過程對(duì)請(qǐng)求之間透明,常規(guī)隨機(jī)Random策略即可。
3.1.3、演進(jìn)二:LB策略引入“可用率”目標(biāo),增強(qiáng)服務(wù)穩(wěn)定性
?問題現(xiàn)象
?集群?jiǎn)喂?jié)點(diǎn)異常,個(gè)別異常節(jié)點(diǎn)可用率影響集群整體可用率。
?線上突發(fā)流量變化,影響服務(wù)穩(wěn)定性,甚至導(dǎo)致服務(wù)不可用,服務(wù)集群缺乏自動(dòng)防護(hù)。
?策略升級(jí)
?靜態(tài)策略 → 動(dòng)態(tài)策略:引入集群節(jié)點(diǎn)實(shí)時(shí)可用率統(tǒng)計(jì)指標(biāo)。
?服務(wù)可用率指標(biāo)直接控制節(jié)點(diǎn)流量分配、請(qǐng)求降級(jí)/恢復(fù):(1)可用率低于集群平均可用率閾值節(jié)點(diǎn)減少分流比例;(2)集群平均可用率低于閾值,開啟降級(jí)防護(hù),并周期性嘗試降級(jí)恢復(fù)。
3.1.4、演進(jìn)三:LB策略添加“異構(gòu)硬件利用率”(CPU/GPU)目標(biāo),提高資源利用率
?問題現(xiàn)象
?集群異質(zhì)化節(jié)點(diǎn)部署,各節(jié)點(diǎn)資源利用不均。
?集群木桶效應(yīng)嚴(yán)重,個(gè)別節(jié)點(diǎn)性能受限觸發(fā)集群整體擴(kuò)容。
?策略升級(jí)
?單目標(biāo)策略 → 多目標(biāo)分級(jí)策略:進(jìn)一步添加集群節(jié)點(diǎn)CPU/GPU資源利用統(tǒng)計(jì)指標(biāo)。
?服務(wù)可用率指標(biāo)為主,CPU/GPU資源利用率指標(biāo)為輔。在服務(wù)可用率滿足的條件下,進(jìn)一步調(diào)節(jié)流量分配比例,實(shí)現(xiàn)集群CPU/GPU資源利用率的最大化。
3.1.5、演進(jìn)四:LB實(shí)現(xiàn)框架統(tǒng)一,支撐廣告系統(tǒng)全鏈路算力的最優(yōu)調(diào)度
?問題現(xiàn)象
?模型系統(tǒng)內(nèi)部各模塊LB框架各異,維護(hù)開發(fā)成本較高。
?模型系統(tǒng)內(nèi)、外服務(wù)之間的不同LB框架無法復(fù)用,阻礙廣告系統(tǒng)全鏈路算力的最優(yōu)化實(shí)現(xiàn)。
?策略升級(jí)
?模塊化重構(gòu)LB策略相關(guān)邏輯實(shí)現(xiàn),并統(tǒng)一LB框架,進(jìn)而打通模型系統(tǒng)內(nèi)、外服務(wù)之間的算力孤島。
3.1.6、總結(jié)
?生產(chǎn)環(huán)境復(fù)雜多變,進(jìn)而要求LB策略的設(shè)計(jì)對(duì)系統(tǒng)影響穩(wěn)定且結(jié)果可預(yù)見。
?業(yè)務(wù)服務(wù)指標(biāo)和集群性能指標(biāo)之間相互影響,單目標(biāo)均衡策略無法兩者兼顧。
?多目標(biāo)均衡策略必然引入成倍的決策復(fù)雜度:k(均衡目標(biāo)數(shù))* n(C端集群)*m(S端集群)。
?多目標(biāo)均衡分級(jí):不同目標(biāo)間相互耦合,難以兼顧!總需要有一個(gè)主目標(biāo)作為兜底。
?均衡目標(biāo)與均衡策略之間的適配&兼容:(1)多目標(biāo)(CPU+可用率)、多負(fù)載均衡策略(Random、ConsistentHash)適配簡(jiǎn)單;(2)新LB策略對(duì)舊LB均衡策略的兼容性(CPU均衡對(duì)一致性Hash原則的兼容性)。
3.2、“服務(wù)可用率+資源利用率”雙目標(biāo)聯(lián)合均衡LB策略
該策略以服務(wù)可以率目標(biāo)為兜底,基于待優(yōu)化資源利用率目標(biāo)的期望取值,將任意時(shí)刻整個(gè)集群的所有節(jié)點(diǎn)劃分為 “負(fù)反饋列表(refuse list)” 和 “正反饋列表(accept list)” 兩部分,且節(jié)點(diǎn)實(shí)際取值與期望取值之間的數(shù)值差異表征了當(dāng)前節(jié)點(diǎn)在該優(yōu)化目標(biāo)上的“均衡度”。同時(shí),負(fù)反饋列表中的節(jié)點(diǎn)采用減少分流比例策略,正反饋列表中的節(jié)點(diǎn)則增加分流比例,而分流策略的具體變化比例由當(dāng)前節(jié)點(diǎn)的均衡度來決定。
3.2.1、雙目標(biāo)分級(jí)反饋
針對(duì)在線服務(wù)應(yīng)用場(chǎng)景,往往更關(guān)注于服務(wù)本身的可用率指標(biāo),與之相較的CPU利用率則作為L(zhǎng)2級(jí)均衡目標(biāo),具體地:
?Stage-1:統(tǒng)計(jì)當(dāng)前周期內(nèi)集群各節(jié)點(diǎn)請(qǐng)求的成功數(shù)量和失敗數(shù)量以計(jì)算出單個(gè)服務(wù)節(jié)點(diǎn)的平均可用率;
?Stage-2:通過匯總所有服務(wù)節(jié)點(diǎn)的平均可用率以獲得集群的平均可用率,并將其作為可用率均衡目標(biāo)在當(dāng)前周期內(nèi)的期望取值;
?Stage-3:基于各節(jié)點(diǎn)平均可用率與集群平均可用率之間的差異,確定出各服務(wù)節(jié)點(diǎn)的均衡度:當(dāng)前服務(wù)節(jié)點(diǎn)的可用率已滿足均衡目標(biāo),則進(jìn)一步進(jìn)行L2級(jí)CPU利用率目標(biāo)均衡;否則,選取下一節(jié)點(diǎn)重新進(jìn)行服務(wù)可用率均衡處理。
3.2.2、服務(wù)可用率主動(dòng)防護(hù)
?Stage-1:節(jié)點(diǎn)選擇,待選擇節(jié)點(diǎn)成功率需不低于集群平均成功率。
?Stage-2:成功率更新,雙端隊(duì)列固定窗口維護(hù)各節(jié)點(diǎn)請(qǐng)求RPC狀態(tài),并實(shí)時(shí)更新集群平均成功率。
?Stage-3:主動(dòng)防護(hù),周期性統(tǒng)計(jì)集群歷史平均成功率,并判斷其變化趨勢(shì):如成功率變差,則觸發(fā)主動(dòng)防護(hù)降級(jí);如成功率變好,則逐漸恢復(fù)降級(jí)防護(hù)。
3.2.3、資源利用率(如CPU)漸進(jìn)式收斂
?Stage-1:集群中所有節(jié)點(diǎn)的列表屬性均被初始化為refuse list,同時(shí)設(shè)置節(jié)點(diǎn)分流策略的調(diào)整比例
為0;
?Stage-2:收集集群各節(jié)點(diǎn)周期性反饋的CPU利用率
,計(jì)算出當(dāng)前集群整體的CPU利用率均值,進(jìn)而得到CPU利用率均衡目標(biāo)的期望取值
;
?Stage-3:針對(duì)實(shí)際迭代場(chǎng)景中不同屬性的集群節(jié)點(diǎn),先根據(jù)式 (1)、(2) 獲得節(jié)點(diǎn)CPU利用率的實(shí)際均衡度
,再通過式 (3)、(4)來完成對(duì)應(yīng)節(jié)點(diǎn)分流策略調(diào)整比例的迭代更新:
。
3.2.4、收斂域+權(quán)重衰減
追求期望指標(biāo)的絕對(duì)均衡,難以兼容與流量分布密切相關(guān)的LB策略,如一致性哈希(Consistent Hashing)。
?為
引入容差范圍
,使得均衡目標(biāo)的收斂從單一基準(zhǔn)點(diǎn)擴(kuò)展為收斂區(qū)域。
?定期衰減分流權(quán)重,在容差范圍內(nèi)進(jìn)一步弱化對(duì)一致性Hash原則的影響。
3.2.5、聯(lián)合均衡策略特點(diǎn)
?兼顧服務(wù)指標(biāo)(可用率)和性能指標(biāo)(CPU利用率)。
?漸進(jìn)收斂,動(dòng)態(tài)調(diào)權(quán)過程更穩(wěn)定,且支持收斂域。
四、效果展示
4.1、收斂點(diǎn)
?通過閉環(huán)反饋調(diào)整邏輯,實(shí)現(xiàn)集群平均基準(zhǔn)收斂點(diǎn)均衡。
?2022年618期間在模型預(yù)估服務(wù)集群全量上線,優(yōu)化整體機(jī)器資源利用率10%+。
4.2、收斂域+權(quán)重衰減
?CPU使用率 Max/Min Diff 減少 2 倍,服務(wù)集群緩存命中率降低控制在2% 以內(nèi)。
?2022年雙十一期間在模型特征服務(wù)集群全量上線,優(yōu)化整體機(jī)器資源利用率15%+。
4.3、異構(gòu)硬件擴(kuò)展
不限于CPU利用率的均衡,針對(duì)GPU A10、A30異構(gòu)硬件混合部署的模型預(yù)估服務(wù)平臺(tái),通過在服務(wù)內(nèi)部增加GPU利用率探針,直接擴(kuò)展為對(duì)GPU硬件利用率的均衡,等效優(yōu)化機(jī)器資源上千核。
4.4、LB框架統(tǒng)一
?LB框架統(tǒng)一后,模型系統(tǒng)內(nèi)、外服務(wù)LB策略完全打通。
?2024年618大促前后模型接入服務(wù)模塊完成全量上線,整體CPU資源利用率優(yōu)化20%+。
五、經(jīng)驗(yàn)總結(jié)
5.1、穩(wěn)定調(diào)權(quán)過程中的異常處理
?權(quán)重歸一化,避免權(quán)重更新出現(xiàn)發(fā)散。
?排除異常節(jié)點(diǎn)數(shù)據(jù),即使最壞情況下也需保證系統(tǒng)不能差于初始狀態(tài)。
?......
5.2、性能極限情況下的主動(dòng)限流防護(hù)
?均衡策略有效的前提:流量變化與均衡目標(biāo)之間存在相關(guān)性!
?節(jié)點(diǎn)性能到達(dá)極限時(shí),相關(guān)性關(guān)系可能失效,主動(dòng)限流防護(hù)必不可少。
Reference
1.Wang G, Zhang L, Xu W .What Can We Learn from Four Years of Data Center Hardware Failures[C]//Dependable Systems and Networks.IEEE, 2017.DOI:10.1109/dsn.2017.26.
2.楊際祥,譚國(guó)真,王榮生.并行與分布式計(jì)算動(dòng)態(tài)負(fù)載均衡策略綜述[J].電子學(xué)報(bào), 2010, 38(5):9.DOI:CNKI:SUN:DZXU.0.2010-05-023.
3.Mirrokni V , Thorup M , Zadimoghaddam M .Consistent Hashing with Bounded Loads[J]. 2016.DOI:10.48550/arXiv.1608.01350.
4. https://developer.aliyun.com/article/1325514 .
審核編輯 黃宇
-
負(fù)載
+關(guān)注
關(guān)注
2文章
556瀏覽量
34213 -
服務(wù)器
+關(guān)注
關(guān)注
12文章
8947瀏覽量
85065
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論