自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何打造應對超大流量的高性能負載均衡?

開發(fā) 后端
什么是負載均衡呢?負載均衡是云計算的基礎(chǔ)組件,是網(wǎng)絡(luò)流量的入口,其重要性不言而喻。從應用場景上來說,常見的負載均衡模型有全局負載均衡和集群內(nèi)負載均衡,從產(chǎn)品形態(tài)角度來說,又可以分為硬件負載均衡和軟件負載均衡。

負載均衡

負載均衡是云計算的基礎(chǔ)組件,是網(wǎng)絡(luò)流量的入口,其重要性不言而喻。

什么是負載均衡呢?用戶輸入的流量通過負載均衡器按照某種負載均衡算法把流量均勻地分散到后端的多個服務器上,接收到請求的服務器可以獨立的響應請求,達到負載分擔的目的。從應用場景上來說,常見的負載均衡模型有全局負載均衡和集群內(nèi)負載均衡,從產(chǎn)品形態(tài)角度來說,又可以分為硬件負載均衡和軟件負載均衡。

全局負載均衡一般通過DNS實現(xiàn),通過將一個域名解析到不同VIP,來實現(xiàn)不同的region調(diào)度能力;硬件負載均衡器常見的有F***10、Array,它們的優(yōu)缺點都比較明顯,優(yōu)點是功能強大,有專門的售后服務團隊,性能比較好,缺點是缺少定制的靈活性,維護成本較高;現(xiàn)在的互聯(lián)網(wǎng)更多的思路是通過軟件負載均衡來實現(xiàn),這樣可以滿足各種定制化需求,常見的軟件負載均衡有LVS、Nginx、Haproxy。

負載均衡

我們的高性能負載均衡使用LVS和Tengine,在一個region區(qū)分不同的機房,每個機房都有LVS集群和Tengine集群,對于用戶配置的四層監(jiān)聽,LVS后面會直接掛載用戶ECS,七層用戶監(jiān)聽ECS則掛載在Tengine上,四層監(jiān)聽的流量直接由LVS轉(zhuǎn)發(fā)到ECS,而7層監(jiān)聽的流量會經(jīng)過LVS到Tenigine再到用戶ECS。每一個region里都會有多個可用區(qū),達到主備容災目的,每一個集群里都有多臺設(shè)備,***是為了提升性能,第二也是基于容災考慮。

負載均衡

上圖為高性能負載均衡控制管理概要圖,SLB產(chǎn)品也有SDN概念,轉(zhuǎn)發(fā)和控制是分離的,用戶所有配置通過控制臺先到控制器,通過集中控制器轉(zhuǎn)換將用戶配置推送到不同設(shè)備上,每臺設(shè)備上都有Agent接收控制器下發(fā)的需求,通過本地轉(zhuǎn)換成LVS和Tengine能夠識別的配置,這個過程支持熱配置,不影響用戶轉(zhuǎn)發(fā),不需要reload才能使新配置生效。

LVS

1. LVS支持的三種模式

LVS支持的三種模式

早期LVS支持三種模式,DR模式、TUN模式和NAT模式。

DR模式經(jīng)過LVS之后,LVS會將MAC地址更改、封裝MAC頭,內(nèi)層IP報文不動,報文經(jīng)過LVS負載均衡查找到RS之后,將源MAC頭改成自己的,目的MAC改成RS地址,MAC尋址是在二層網(wǎng)絡(luò)里,對網(wǎng)絡(luò)部署有一定的限定,在大規(guī)模分布式集群部署里,這種模式的靈活性沒有辦法滿足需求;

TUN模式走在LVS之后,LVS會在原有報文基礎(chǔ)上封裝IP頭,到了后端RS之后,RS需要解開IP報文封裝,才能拿到原始報文,不管是DR模式還是TUN模式,后端RS都可以看到真實客戶源IP,目的IP是自己的VIP,VIP在RS設(shè)備上需要配置,這樣可以直接繞過LVS返回給用戶,TUN模式問題在于需要在后端ECS上配置解封裝模塊,在Linux上已經(jīng)支持這種模塊,但是windows上還沒有提供支持,所以會對用戶系統(tǒng)鏡像選擇有限定。

NAT模式用戶訪問的是VIP,LVS查找完后會將目的IP做DNAT轉(zhuǎn)換,選擇出RS地址,因為客戶端的IP沒變,在回包的時候直接向公網(wǎng)真實客戶端IP去路由,NAT的約束是因為LVS做了DNAT轉(zhuǎn)換,所以回包需要走LVS,把報文頭轉(zhuǎn)換回去,由于ECS看到的是客戶端真實的源地址,我們需要在用戶ECS上配置路由,將到ECS的默認路由指向LVS上,這對用戶場景也做了限制。

2. LVS基于Netfilter框架實現(xiàn)

 LVS基于Netfilter框架實現(xiàn)

Netfilter是Linux提供的網(wǎng)絡(luò)開放平臺,基于平臺可以開發(fā)自己的業(yè)務功能模塊,早期好多安全廠商都是基于Netfilter做一些業(yè)務模型實現(xiàn),這種模型比較靈活,但通用模型里更多的是兼容性考慮,路徑會非常長;而且通用模型中沒辦法發(fā)揮多核特性,目前CPU的發(fā)展更多是向橫向擴展,我們經(jīng)常見到多路服務器,每路上有多少核,早期通用模型對多核支持并不是特別友善,在多核設(shè)計上有些欠缺,導致我們在通用模型上做一些應用開發(fā)時的擴展性是有限的,隨著核的數(shù)量越來越多,性能不增反降。

3. LVS的改進

  • 早期模式的各種限制制約了我們的發(fā)展,所以我們首先做了FullNAT,相比原來的NAT方式,F(xiàn)ullNAT多了SNAT屬性,將客戶端的原IP地址作了轉(zhuǎn)換;
  • 其次,我們在并行化上做了處理,充分利用多核實現(xiàn)性能線性提升;
  • 然后是快速路徑,我們在做網(wǎng)絡(luò)轉(zhuǎn)發(fā)模型時很容易想到設(shè)計快速路徑和慢速路徑,慢速路徑更多是解決首包如何通過設(shè)備問題,可能需要查ACL或路由,需要判斷許多和策略相關(guān)的東西,后面所有報文都可以通過快速路徑轉(zhuǎn)發(fā)出去;
  • 還有指令相關(guān)優(yōu)化,利用因特爾特殊指令提升性能;
  • 另外針對多核架構(gòu),NUMA多節(jié)點內(nèi)存訪問,通過訪問Local節(jié)點內(nèi)存可能獲得更好的延遲表現(xiàn)。

客戶端進來IP首先訪問LVS的VIP,原IP是客戶端的,目的IP是LVS的VIP,經(jīng)過FullNAT轉(zhuǎn)換后,原IP變成LVS的Local地址,目的地址是LVS選擇出來的RS地址,這樣在RS回包時比較容易,只要路由可達,報文一定會交到LVS上,不需要在RS上做特殊的配置。右面就是DNAT+SNAT轉(zhuǎn)換,報文就可以通過LVS轉(zhuǎn)發(fā)回客戶端,這種方式主要帶來應用場景部署靈活性選擇。

通過并行化實現(xiàn)對LVS性能的改善,性能沒有辦法得到線性提升更多的是因為每條路徑都需要訪問全局資源,就會不可避免引入鎖的開箱,另外,同一條鏈接上的報文可能分散在不同的核上,大家去訪問全局資源時也會導致cache的丟失。

所以我們通過RSS技術(shù)把同一個五源組報文扔到同一個CPU上處理,保證入方向的所有相同連接上的報文都能交給相同CPU處理,每個核在轉(zhuǎn)發(fā)出去時都用當前CPU上的Local地址,通過設(shè)置一些fdir規(guī)則,報文回來時后端RS訪問的目的地址就是對應CPU上的local地址,可以交到指定的CPU上去處理,這樣一條連接上左右方向報文都可以交給同一個CPU處理,將流在不同的CPU隔離開。

另外,我們把所有配置資源包括動態(tài)緩存資源在每個CPU上作了拷貝, 將資源局部化,這使整個流從進入LVS到轉(zhuǎn)發(fā)出去訪問的資源都是固定在一個核上的本地資源,使性能達到較大化,實現(xiàn)線性提升。

經(jīng)過我們改進之后,LVS的具體表現(xiàn)如下:

  • 出于對容災和性能提升的考慮,我們做了集群化部署,每個region有不同機房,每個機房有多個調(diào)度單元,每個單元有多臺LVS設(shè)備;
  • 每臺LVS經(jīng)過優(yōu)化后,都能達到更高性能,大容量,單臺LVS可以達到4000W PPS,600W CPS、單個group可以到達1億并發(fā);
  • 支持region、IDC、集群和應用級的高可用;
  • 實現(xiàn)了防×××功能,并在原版LVS上提供了更豐富的功能,可以基于各個維度做管理控制,較精確的統(tǒng)計,流量的分析等。

Tengine

Tengine在應用過程中也遇到了各種問題,最嚴重的就是性能問題,我們發(fā)現(xiàn)隨著CPU數(shù)量越來越多,QPS值并沒有線性提升;Nginx本身是多worker模型,每個worker是單進程模式,多worker架構(gòu)做CPU親和,內(nèi)部基于事件驅(qū)動的模型,其本身已經(jīng)提供了很高的性能,單核Nginx可以跑到1W5~2W QPS。Nginx往下***層是socket API,socket 往下有一層VFS,再往下是TCP、IP,socket層比較薄,經(jīng)過量化的分析和評估,性能開銷較大的是TCP協(xié)議棧和VFS部分,因為同步開銷大,我們發(fā)現(xiàn)橫向擴展不行,對此,我們做了一些優(yōu)化。

七層反向代理的路徑更長,處理更復雜,所以它的性能比LVS低很多,我們比較關(guān)注單機和集群的性能,集群性能可以靠堆設(shè)備去解決,單機如果不提升,成本會一直增加,從性能角度來看,有以下的優(yōu)化思路和方向:

  • 基于Kernel做開發(fā),比如優(yōu)化協(xié)議棧;
  • 基于Aliscoket的優(yōu)化,Alisocket是阿里研發(fā)的高性能TCP協(xié)議棧平臺,底層是DPDK,它將資源做了局部化處理,報文分發(fā)不同核處理,性能非常出色;
  • HTTPS業(yè)務越來越多,流量逐步遞增,我們采用硬件加速卡方式做一些加解密的性能提升,還有HTTPS的會話復用;
  • 基于Web傳輸層的性能優(yōu)化。

從彈性角度看,比如一些公司的應用和用戶熱點有關(guān),當發(fā)生一個社會網(wǎng)絡(luò)熱點后,訪問量會急劇變高,我們固有的基于物理機器實現(xiàn)的負載均衡模型在彈性擴展方面是有限制的,對此,我們可以使用VM去做,把反向代理功能放在VM去跑,我們會監(jiān)控實例負載情況,根據(jù)實時需求做彈性擴容縮容;

除了VM,還有調(diào)度單元,我們可以在不同調(diào)度單元做平滑切換,根據(jù)不同的水位情況,通過切換可以把負載均衡實例調(diào)度到不同的單元中去,改善使容量上管理。Tengine本身也做了集群化部署,我們在一個region里有不同的機房,不同的調(diào)度單元,每個調(diào)度單元有多組設(shè)備;LVS到Tengine也有健康檢查,如果一臺Tengine有問題,可以通過健康檢查方式摘除,不會影響用戶轉(zhuǎn)發(fā)能力;

Tengine具備靈活的調(diào)度能力,可以幫助我們應對更多的復雜情況;另外,Tengine也有很多高級的特性,比如基于cookie的會話保持、基于域名/URL的轉(zhuǎn)發(fā)規(guī)則、HTTP2、Websocket等功能;目前,我們7層單VIP可以支撐10W規(guī)格的HTTPS QPS。

高可用

1. Group

Group

高可用是整個產(chǎn)品很重要的一部分,圖為集群內(nèi)的高可用架構(gòu)圖,可以看到,在網(wǎng)絡(luò)路徑上是全冗余無單點的。具體情況如下:

  • 雙路服務器,每節(jié)點雙網(wǎng)口上聯(lián)不同交換機,增加帶寬,避免跨節(jié)點收包
  • VIP路由兩邊發(fā)不同的優(yōu)先級,不同的VIP,高優(yōu)先級路由在不同的交換機上
  • 單機160G轉(zhuǎn)發(fā)能力,單VIP 80G帶寬,單流 40G帶寬
  • 網(wǎng)卡故障不影響轉(zhuǎn)發(fā),上下游路由自動切換
  • ECMP,VIP路由發(fā)兩邊,通過優(yōu)先級控制從入口
  • 集群640G轉(zhuǎn)發(fā)能力,單vip 320G帶寬
  • 會話同步,多播、包觸發(fā)同步、定時同步
  • 單機故障不影響轉(zhuǎn)發(fā)
  • 交換機故障不影響轉(zhuǎn)發(fā),路由秒級切換
  • 用戶無感知的升級變更,部分未及時同步的連接重連即可

2. AZ

每個機房連接兩個不同路由器,當一個AZ出現(xiàn)故障之后,我們可以無縫切換到另外一個機房,具體情況如下:

  • VIP在不同的AZ發(fā)不同優(yōu)先級的路由(秒級切換、自動切換)
  • VIP區(qū)分主備AZ,不同的VIP主備AZ不同
  • 多個AZ的負載通過控制系統(tǒng)分配
  • 缺省提供VIP多AZ的容災能力
  • 不支持跨AZ的session同步,跨AZ切換后,所有連接都需要重連

3. Region

當用戶訪問域名時,通過DNS解析,可以設(shè)定DNS解析到多個regionVIP地址,下沉到某一個Region來看,如果一個機房出現(xiàn)故障,流量可以切換到另一個可用區(qū)繼續(xù)轉(zhuǎn)發(fā),如果流量進到機房發(fā)現(xiàn)一臺LVS轉(zhuǎn)發(fā)設(shè)備出現(xiàn)故障后,我們可以切換到另外一臺LVS作處理,如果LVS后面掛載的RS出現(xiàn)問題,通過健康檢查也可以快速摘掉設(shè)備,將流量轉(zhuǎn)換到健康的設(shè)備上去。我們從多個維度實現(xiàn)高可用,較大限度地滿足用戶的需求。

總結(jié)

目前,高性能負載均衡應用主要在幾個方面:

  • 作為公有云基礎(chǔ)組件,為公有云網(wǎng)站、游戲客戶、APP提供負載均衡功能,也針對政府、金融等安全性高的客戶提供專有云支持;
  • 為阿里云內(nèi)部云產(chǎn)品RDS、OSS、高防等提供了負載均衡的功能;
  • 負載均衡作為電商平臺入口,向淘寶、天貓、1688提供VIP統(tǒng)一接入功能;
  • 交易平臺的流量入口也在負載均衡設(shè)備上,如支付寶、網(wǎng)上銀行。

未來,我們希望有更好的彈性擴展能力,更高的單機處理能力,我們希望VIP主動探測用戶,以及網(wǎng)絡(luò)全鏈路監(jiān)控。

責任編輯:趙寧寧 來源: 今日頭條
相關(guān)推薦

2019-09-11 09:30:44

2017-11-07 09:06:32

2018-10-23 09:22:06

2019-05-20 15:28:27

流量 NginxLinux

2010-05-10 14:48:01

流量負載均衡

2021-04-21 14:56:28

負載均衡高并發(fā)優(yōu)化技術(shù)架構(gòu)

2022-01-07 14:35:03

DockerHAProxyLinux

2013-12-20 09:53:08

大數(shù)據(jù)J2eeOracle

2018-11-15 08:19:47

大流量高并發(fā)限流

2010-05-10 14:00:21

流量負載均衡

2010-04-23 11:05:16

流量負載均衡

2011-07-01 09:36:30

高性能Web

2016-11-01 11:38:50

DNS網(wǎng)站性能

2018-11-20 08:24:46

醫(yī)療高負載負載均衡

2015-08-19 09:38:29

云集群高性能計算云計算

2010-04-26 10:55:41

全局負載均衡

2015-11-11 15:52:36

應用交付負載均衡太一星晨

2018-10-12 08:43:54

2015-07-22 16:50:24

2019-11-27 15:19:44

系統(tǒng)緩存架構(gòu)
點贊
收藏

51CTO技術(shù)棧公眾號