作者:衛(wèi)崢
本文主要從早期的負(fù)載均衡開(kāi)始談起,進(jìn)而講解了阿里云高性能負(fù)載均衡,著重分析了LVS和Tengine,以及如何做到高可用。
負(fù)載均衡
負(fù)載均衡是云計(jì)算的基礎(chǔ)組件,是網(wǎng)絡(luò)流量的入口,其重要性不言而喻。
什么是負(fù)載均衡呢?用戶輸入的流量通過(guò)負(fù)載均衡器按照某種負(fù)載均衡算法把流量均勻地分散到后端的多個(gè)服務(wù)器上,接收到請(qǐng)求的服務(wù)器可以獨(dú)立的響應(yīng)請(qǐng)求,達(dá)到負(fù)載分擔(dān)的目的。從應(yīng)用場(chǎng)景上來(lái)說(shuō),常見(jiàn)的負(fù)載均衡模型有全局負(fù)載均衡和集群內(nèi)負(fù)載均衡,從產(chǎn)品形態(tài)角度來(lái)說(shuō),又可以分為硬件負(fù)載均衡和軟件負(fù)載均衡。
全局負(fù)載均衡一般通過(guò)DNS實(shí)現(xiàn),通過(guò)將一個(gè)域名解析到不同VIP,來(lái)實(shí)現(xiàn)不同的region調(diào)度能力;硬件負(fù)載均衡器常見(jiàn)的有F5、A10、Array,它們的優(yōu)缺點(diǎn)都比較明顯,優(yōu)點(diǎn)是功能強(qiáng)大,有專(zhuān)門(mén)的售后服務(wù)團(tuán)隊(duì),性能比較好,缺點(diǎn)是缺少定制的靈活性,維護(hù)成本較高;現(xiàn)在的互聯(lián)網(wǎng)更多的思路是通過(guò)軟件負(fù)載均衡來(lái)實(shí)現(xiàn),這樣可以滿足各種定制化需求,常見(jiàn)的軟件負(fù)載均衡有LVS、Nginx、Haproxy。
我們的高性能負(fù)載均衡使用LVS和Tengine,在一個(gè)region區(qū)分不同的機(jī)房,每個(gè)機(jī)房都有LVS集群和Tengine集群,對(duì)于用戶配置的四層監(jiān)聽(tīng),LVS后面會(huì)直接掛載用戶ECS,七層用戶監(jiān)聽(tīng)ECS則掛載在Tengine上,四層監(jiān)聽(tīng)的流量直接由LVS轉(zhuǎn)發(fā)到ECS,而7層監(jiān)聽(tīng)的流量會(huì)經(jīng)過(guò)LVS到Tenigine再到用戶ECS。每一個(gè)region里都會(huì)有多個(gè)可用區(qū),達(dá)到主備容災(zāi)目的,每一個(gè)集群里都有多臺(tái)設(shè)備,第一是為了提升性能,第二也是基于容災(zāi)考慮。
上圖為高性能負(fù)載均衡控制管理概要圖,SLB產(chǎn)品也有SDN概念,轉(zhuǎn)發(fā)和控制是分離的,用戶所有配置通過(guò)控制臺(tái)先到控制器,通過(guò)集中控制器轉(zhuǎn)換將用戶配置推送到不同設(shè)備上,每臺(tái)設(shè)備上都有Agent接收控制器下發(fā)的需求,通過(guò)本地轉(zhuǎn)換成LVS和Tengine能夠識(shí)別的配置,這個(gè)過(guò)程支持熱配置,不影響用戶轉(zhuǎn)發(fā),不需要reload才能使新配置生效。
LVS
1、LVS支持的三種模式
早期LVS支持三種模式,DR模式、TUN模式和NAT模式。
DR模式經(jīng)過(guò)LVS之后,LVS會(huì)將MAC地址更改、封裝MAC頭,內(nèi)層IP報(bào)文不動(dòng),報(bào)文經(jīng)過(guò)LVS負(fù)載均衡查找到RS之后,將源MAC頭改成自己的,目的MAC改成RS地址,MAC尋址是在二層網(wǎng)絡(luò)里,對(duì)網(wǎng)絡(luò)部署有一定的限定,在大規(guī)模分布式集群部署里,這種模式的靈活性沒(méi)有辦法滿足需求;
TUN模式走在LVS之后,LVS會(huì)在原有報(bào)文基礎(chǔ)上封裝IP頭,到了后端RS之后,RS需要解開(kāi)IP報(bào)文封裝,才能拿到原始報(bào)文,不管是DR模式還是TUN模式,后端RS都可以看到真實(shí)客戶源IP,目的IP是自己的VIP,VIP在RS設(shè)備上需要配置,這樣可以直接繞過(guò)LVS返回給用戶,TUN模式問(wèn)題在于需要在后端ECS上配置解封裝模塊,在Linux上已經(jīng)支持這種模塊,但是windows上還沒(méi)有提供支持,所以會(huì)對(duì)用戶系統(tǒng)鏡像選擇有限定。
NAT模式用戶訪問(wèn)的是VIP,LVS查找完后會(huì)將目的IP做DNAT轉(zhuǎn)換,選擇出RS地址,因?yàn)榭蛻舳说腎P沒(méi)變,在回包的時(shí)候直接向公網(wǎng)真實(shí)客戶端IP去路由,NAT的約束是因?yàn)長(zhǎng)VS做了DNAT轉(zhuǎn)換,所以回包需要走LVS,把報(bào)文頭轉(zhuǎn)換回去,由于ECS看到的是客戶端真實(shí)的源地址,我們需要在用戶ECS上配置路由,將到ECS的默認(rèn)路由指向LVS上,這對(duì)用戶場(chǎng)景也做了限制。
2、LVS基于Netfilter框架實(shí)現(xiàn)
Netfilter是Linux提供的網(wǎng)絡(luò)開(kāi)放平臺(tái),基于平臺(tái)可以開(kāi)發(fā)自己的業(yè)務(wù)功能模塊,早期好多安全廠商都是基于Netfilter做一些業(yè)務(wù)模型實(shí)現(xiàn),這種模型比較靈活,但通用模型里更多的是兼容性考慮,路徑會(huì)非常長(zhǎng);而且通用模型中沒(méi)辦法發(fā)揮多核特性,目前CPU的發(fā)展更多是向橫向擴(kuò)展,我們經(jīng)常見(jiàn)到多路服務(wù)器,每路上有多少核,早期通用模型對(duì)多核支持并不是特別友善,在多核設(shè)計(jì)上有些欠缺,導(dǎo)致我們?cè)谕ㄓ媚P蜕献鲆恍?yīng)用開(kāi)發(fā)時(shí)的擴(kuò)展性是有限的,隨著核的數(shù)量越來(lái)越多,性能不增反降。
3、LVS的改進(jìn)
早期模式的各種限制制約了我們的發(fā)展,所以我們首先做了FullNAT,相比原來(lái)的NAT方式,F(xiàn)ullNAT多了SNAT屬性,將客戶端的原IP地址作了轉(zhuǎn)換;
其次,我們?cè)诓⑿谢献隽颂幚恚浞掷枚嗪藢?shí)現(xiàn)性能線性提升;
然后是快速路徑,我們?cè)谧鼍W(wǎng)絡(luò)轉(zhuǎn)發(fā)模型時(shí)很容易想到設(shè)計(jì)快速路徑和慢速路徑,慢速路徑更多是解決首包如何通過(guò)設(shè)備問(wèn)題,可能需要查ACL或路由,需要判斷許多和策略相關(guān)的東西,后面所有報(bào)文都可以通過(guò)快速路徑轉(zhuǎn)發(fā)出去;
還有指令相關(guān)優(yōu)化,利用因特爾特殊指令提升性能;
另外針對(duì)多核架構(gòu),NUMA多節(jié)點(diǎn)內(nèi)存訪問(wèn),通過(guò)訪問(wèn)Local節(jié)點(diǎn)內(nèi)存可能獲得更好的延遲表現(xiàn)。
客戶端進(jìn)來(lái)IP首先訪問(wèn)LVS的VIP,原IP是客戶端的,目的IP是LVS的VIP,經(jīng)過(guò)FullNAT轉(zhuǎn)換后,原IP變成LVS的Local地址,目的地址是LVS選擇出來(lái)的RS地址,這樣在RS回包時(shí)比較容易,只要路由可達(dá),報(bào)文一定會(huì)交到LVS上,不需要在RS上做特殊的配置。右面就是DNAT+SNAT轉(zhuǎn)換,報(bào)文就可以通過(guò)LVS轉(zhuǎn)發(fā)回客戶端,這種方式主要帶來(lái)應(yīng)用場(chǎng)景部署靈活性選擇。
通過(guò)并行化實(shí)現(xiàn)對(duì)LVS性能的改善,性能沒(méi)有辦法得到線性提升更多的是因?yàn)槊織l路徑都需要訪問(wèn)全局資源,就會(huì)不可避免引入鎖的開(kāi)箱,另外,同一條鏈接上的報(bào)文可能分散在不同的核上,大家去訪問(wèn)全局資源時(shí)也會(huì)導(dǎo)致cache的丟失。
所以我們通過(guò)RSS技術(shù)把同一個(gè)五源組報(bào)文扔到同一個(gè)CPU上處理,保證入方向的所有相同連接上的報(bào)文都能交給相同CPU處理,每個(gè)核在轉(zhuǎn)發(fā)出去時(shí)都用當(dāng)前CPU上的Local地址,通過(guò)設(shè)置一些fdir規(guī)則,報(bào)文回來(lái)時(shí)后端RS訪問(wèn)的目的地址就是對(duì)應(yīng)CPU上的local地址,可以交到指定的CPU上去處理,這樣一條連接上左右方向報(bào)文都可以交給同一個(gè)CPU處理,將流在不同的CPU隔離開(kāi)。
另外,我們把所有配置資源包括動(dòng)態(tài)緩存資源在每個(gè)CPU上作了拷貝, 將資源局部化,這使整個(gè)流從進(jìn)入LVS到轉(zhuǎn)發(fā)出去訪問(wèn)的資源都是固定在一個(gè)核上的本地資源,使性能達(dá)到最大化,實(shí)現(xiàn)線性提升。
經(jīng)過(guò)我們改進(jìn)之后,LVS的具體表現(xiàn)如下:
出于對(duì)容災(zāi)和性能提升的考慮,我們做了集群化部署,每個(gè)region有不同機(jī)房,每個(gè)機(jī)房有多個(gè)調(diào)度單元,每個(gè)單元有多臺(tái)LVS設(shè)備;
每臺(tái)LVS經(jīng)過(guò)優(yōu)化后,都能達(dá)到更高性能,大容量,單臺(tái)LVS可以達(dá)到4000W PPS,600W CPS、單個(gè)group可以到達(dá)1億并發(fā);
支持region、IDC、集群和應(yīng)用級(jí)的高可用;
實(shí)現(xiàn)了防攻擊功能,并在原版LVS上提供了更豐富的功能,可以基于各個(gè)維度做管理控制,精確的統(tǒng)計(jì),流量的分析等。
Tengine
Tengine在應(yīng)用過(guò)程中也遇到了各種問(wèn)題,最嚴(yán)重的就是性能問(wèn)題,我們發(fā)現(xiàn)隨著CPU數(shù)量越來(lái)越多,QPS值并沒(méi)有線性提升;Nginx本身是多worker模型,每個(gè)worker是單進(jìn)程模式,多worker架構(gòu)做CPU親和,內(nèi)部基于事件驅(qū)動(dòng)的模型,其本身已經(jīng)提供了很高的性能,單核Nginx可以跑到1W5~2W QPS。Nginx往下第一層是socket API,socket 往下有一層VFS,再往下是TCP、IP,socket層比較薄,經(jīng)過(guò)量化的分析和評(píng)估,性能開(kāi)銷(xiāo)最大的是TCP協(xié)議棧和VFS部分,因?yàn)橥介_(kāi)銷(xiāo)大,我們發(fā)現(xiàn)橫向擴(kuò)展不行,對(duì)此,我們做了一些優(yōu)化。
七層反向代理的路徑更長(zhǎng),處理更復(fù)雜,所以它的性能比LVS低很多,我們比較關(guān)注單機(jī)和集群的性能,集群性能可以靠堆設(shè)備去解決,單機(jī)如果不提升,成本會(huì)一直增加,從性能角度來(lái)看,有以下的優(yōu)化思路和方向:
基于Kernel做開(kāi)發(fā),比如優(yōu)化協(xié)議棧;
基于Aliscoket的優(yōu)化,Alisocket是阿里研發(fā)的高性能TCP協(xié)議棧平臺(tái),底層是DPDK,它將資源做了局部化處理,報(bào)文分發(fā)不同核處理,性能非常出色;
HTTPS業(yè)務(wù)越來(lái)越多,流量逐步遞增,我們采用硬件加速卡方式做一些加解密的性能提升,還有HTTPS的會(huì)話復(fù)用;
基于Web傳輸層的性能優(yōu)化。
從彈性角度看,比如一些公司的應(yīng)用和用戶熱點(diǎn)有關(guān),當(dāng)發(fā)生一個(gè)社會(huì)網(wǎng)絡(luò)熱點(diǎn)后,訪問(wèn)量會(huì)急劇變高,我們固有的基于物理機(jī)器實(shí)現(xiàn)的負(fù)載均衡模型在彈性擴(kuò)展方面是有限制的,對(duì)此,我們可以使用VM去做,把反向代理功能放在VM去跑,我們會(huì)監(jiān)控實(shí)例負(fù)載情況,根據(jù)實(shí)時(shí)需求做彈性擴(kuò)容縮容;
除了VM,還有調(diào)度單元,我們可以在不同調(diào)度單元做平滑切換,根據(jù)不同的水位情況,通過(guò)切換可以把負(fù)載均衡實(shí)例調(diào)度到不同的單元中去,改善使容量上管理。Tengine本身也做了集群化部署,我們?cè)谝粋€(gè)region里有不同的機(jī)房,不同的調(diào)度單元,每個(gè)調(diào)度單元有多組設(shè)備;LVS到Tengine也有健康檢查,如果一臺(tái)Tengine有問(wèn)題,可以通過(guò)健康檢查方式摘除,不會(huì)影響用戶轉(zhuǎn)發(fā)能力;
Tengine具備靈活的調(diào)度能力,可以幫助我們應(yīng)對(duì)更多的復(fù)雜情況;另外,Tengine也有很多高級(jí)的特性,比如基于cookie的會(huì)話保持、基于域名/URL的轉(zhuǎn)發(fā)規(guī)則、HTTP2、Websocket等功能;目前,我們7層單VIP可以支撐10W規(guī)格的HTTPS QPS。
高可用
1、Group
高可用是整個(gè)產(chǎn)品很重要的一部分,圖為集群內(nèi)的高可用架構(gòu)圖,可以看到,在網(wǎng)絡(luò)路徑上是全冗余無(wú)單點(diǎn)的。具體情況如下:
雙路服務(wù)器,每節(jié)點(diǎn)雙網(wǎng)口上聯(lián)不同交換機(jī),增加帶寬,避免跨節(jié)點(diǎn)收包VIP路由兩邊發(fā)不同的優(yōu)先級(jí),不同的VIP,高優(yōu)先級(jí)路由在不同的交換機(jī)上單機(jī)160G轉(zhuǎn)發(fā)能力,單VIP 80G帶寬,單流 40G帶寬網(wǎng)卡故障不影響轉(zhuǎn)發(fā),上下游路由自動(dòng)切換ECMP,VIP路由發(fā)兩邊,通過(guò)優(yōu)先級(jí)控制從入口集群640G轉(zhuǎn)發(fā)能力,單vip 320G帶寬會(huì)話同步,多播、包觸發(fā)同步、定時(shí)同步單機(jī)故障不影響轉(zhuǎn)發(fā)交換機(jī)故障不影響轉(zhuǎn)發(fā),路由秒級(jí)切換用戶無(wú)感知的升級(jí)變更,部分未及時(shí)同步的連接重連即可2、AZ
每個(gè)機(jī)房連接兩個(gè)不同路由器,當(dāng)一個(gè)AZ出現(xiàn)故障之后,我們可以無(wú)縫切換到另外一個(gè)機(jī)房,具體情況如下:
3、Region
當(dāng)用戶訪問(wèn)域名時(shí),通過(guò)DNS解析,可以設(shè)定DNS解析到多個(gè)regionVIP地址,下沉到某一個(gè)Region來(lái)看,如果一個(gè)機(jī)房出現(xiàn)故障,流量可以切換到另一個(gè)可用區(qū)繼續(xù)轉(zhuǎn)發(fā),如果流量進(jìn)到機(jī)房發(fā)現(xiàn)一臺(tái)LVS轉(zhuǎn)發(fā)設(shè)備出現(xiàn)故障后,我們可以切換到另外一臺(tái)LVS作處理,如果LVS后面掛載的RS出現(xiàn)問(wèn)題,通過(guò)健康檢查也可以快速摘掉設(shè)備,將流量轉(zhuǎn)換到健康的設(shè)備上去。我們從多個(gè)維度實(shí)現(xiàn)高可用,最大限度地滿足用戶的需求。
總結(jié)
目前,高性能負(fù)載均衡應(yīng)用主要在幾個(gè)方面:
作為公有云基礎(chǔ)組件,為公有云網(wǎng)站、游戲客戶、APP提供負(fù)載均衡功能,也針對(duì)政府、金融等安全性高的客戶提供專(zhuān)有云支持;為阿里云內(nèi)部云產(chǎn)品RDS、OSS、高防等提供了負(fù)載均衡的功能;負(fù)載均衡作為電商平臺(tái)入口,向淘寶、天貓、1688提供VIP統(tǒng)一接入功能;交易平臺(tái)的流量入口也在負(fù)載均衡設(shè)備上,如支付寶、網(wǎng)上銀行。未來(lái),我們希望有更好的彈性擴(kuò)展能力,更高的單機(jī)處理能力,我們希望VIP主動(dòng)探測(cè)用戶,以及網(wǎng)絡(luò)全鏈路監(jiān)控。
- 蜜度索驥:以跨模態(tài)檢索技術(shù)助力“企宣”向上生長(zhǎng)
- IDC:三季度全球以太網(wǎng)交換機(jī)收入同比下降7.9%、環(huán)比增長(zhǎng)6.6%
- Fortinet李宏凱:2025年在中國(guó)大陸啟動(dòng)SASE PoP節(jié)點(diǎn)部署 助力企業(yè)出海
- Fortinet李宏凱:2024年Fortinet全球客戶已超80萬(wàn)
- 央國(guó)企采購(gòu)管理升級(jí),合合信息旗下啟信慧眼以科技破局難點(diǎn)
- Apache Struts重大漏洞被黑客利用,遠(yuǎn)程代碼執(zhí)行風(fēng)險(xiǎn)加劇
- Crunchbase:2024年AI網(wǎng)絡(luò)安全行業(yè)風(fēng)險(xiǎn)投資超過(guò)26億美元
- 調(diào)查報(bào)告:AI與云重塑IT格局,77%的IT領(lǐng)導(dǎo)者視網(wǎng)絡(luò)安全為首要挑戰(zhàn)
- 長(zhǎng)江存儲(chǔ)發(fā)布聲明:從無(wú)“借殼上市”意愿
- 泛微·數(shù)智大腦Xiaoe.AI正式發(fā)布,千人現(xiàn)場(chǎng)體驗(yàn)數(shù)智化運(yùn)營(yíng)場(chǎng)景
- IDC:2024年第三季度北美IT分銷(xiāo)商收入增長(zhǎng)至202億美元
免責(zé)聲明:本網(wǎng)站內(nèi)容主要來(lái)自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁(yè)或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書(shū)面權(quán)利通知或不實(shí)情況說(shuō)明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開(kāi)相關(guān)鏈接。