業(yè)務(wù)介紹
自2019年,騰競整個(gè)電競賽事數(shù)據(jù)服務(wù)完全由騰訊云TKE容器服務(wù)承載。騰競賽事數(shù)據(jù)開放平臺(tái)目前主要提供職業(yè)賽事數(shù)據(jù)的授權(quán)與查詢,隨著斗魚、虎牙、企鵝、掌盟、微信直播、微博等平臺(tái)的相繼接入,平臺(tái)整體流量有了爆發(fā)式的增長。
此前2021英雄聯(lián)盟全球總決賽(以下簡稱S11)期間更是創(chuàng)下了平臺(tái)流量新高,達(dá)到了百萬級(jí)QPS、百億級(jí)調(diào)用量。面對(duì)電競賽事此類周期性強(qiáng)、并發(fā)高的業(yè)務(wù)場景,有效快速的自動(dòng)擴(kuò)縮容、提升資源利用率,是滿足業(yè)務(wù)高速發(fā)展、合理控制成本的關(guān)鍵所在。
這里將介紹LOL S11賽事期間,騰競賽事數(shù)據(jù)開放平臺(tái)如何通過虛擬節(jié)點(diǎn)彈性調(diào)度+VPC-CNI架構(gòu),輕松應(yīng)對(duì)爆發(fā)的百萬流量。
業(yè)務(wù)特性
電競賽事具備明顯的業(yè)務(wù)特性,其對(duì)服務(wù)的自動(dòng)伸縮能力有非常高的要求。
·周期性
電競賽事具有明顯的周期性,比賽時(shí)段是流量高峰期,其余時(shí)間流量驟減,流量相差數(shù)百倍,需要通過彈性擴(kuò)縮能力,減少波谷時(shí)的冗余資源,降低成本。
·高并發(fā)
比賽期間,服務(wù)需要承載百萬級(jí)QPS,需要快速的擴(kuò)容時(shí)間、及庫存充足的資源池。
·突增快
比賽開始時(shí),玩家開始大量涌入直播間,需要保證服務(wù)穩(wěn)定性,避免突增流量過大引發(fā)集群雪崩。
架構(gòu)介紹
整體架構(gòu)
集群采用Istio作為服務(wù)網(wǎng)格框架進(jìn)行微服務(wù)治理,流量經(jīng)由多條CLB(解決單條CLB帶寬上限)進(jìn)入Istio Ingress(直連Pod)后進(jìn)行流量分發(fā),依托于Istio的Sidecar模式,能夠?qū)Ω鞣?wù)之間進(jìn)行非常精細(xì)化的流量管理,例如:灰度、限流、熔斷等等。
普通節(jié)點(diǎn)+虛擬節(jié)點(diǎn)
開啟VPC-CNI采用直連Pod模式后,集群不再受NodePort網(wǎng)絡(luò)轉(zhuǎn)發(fā)能力的限制,少量常規(guī)節(jié)點(diǎn)應(yīng)對(duì)業(yè)務(wù)日常低負(fù)載場景,利用虛擬節(jié)點(diǎn)彈性擴(kuò)縮容能力應(yīng)對(duì)賽事期間業(yè)務(wù)超高負(fù)載場景。
DevOps
基于Docker的CI/CD服務(wù),支持多環(huán)境(云端、本地)、多集群編排服務(wù),滿足業(yè)務(wù)的不同部署需求。
彈性擴(kuò)容方案演變
基于上述的業(yè)務(wù)特性,針對(duì)彈性擴(kuò)容的方案,經(jīng)歷了【手動(dòng)擴(kuò)容=>節(jié)點(diǎn)池=>虛擬節(jié)點(diǎn)】的一系列演變歷程,目前的彈性擴(kuò)容方案可以完美滿足業(yè)務(wù)需求。
業(yè)務(wù)初期:手動(dòng)擴(kuò)容
業(yè)務(wù)初期,負(fù)載較低,根據(jù)業(yè)務(wù)特征,手動(dòng)擴(kuò)縮容基本可以滿足需求。
由于手動(dòng)擴(kuò)縮容需要一定的時(shí)間窗口,因此需要放置一定數(shù)量的冗余資源應(yīng)對(duì)突增流量,資源利用率較低,只有6%左右。
業(yè)務(wù)發(fā)展中:節(jié)點(diǎn)池
隨著業(yè)務(wù)發(fā)展,周期性的高低峰流量特征愈發(fā)明顯,面對(duì)高頻的擴(kuò)縮容需求時(shí),手動(dòng)擴(kuò)縮容不僅人力成本較高,而且無法避免人為失誤。
在突增流量速度較慢的場景下,節(jié)點(diǎn)池可以較好滿足業(yè)務(wù)需求,不過需配置服務(wù)器,擴(kuò)容速度較慢,冗余資源仍存在,資源利用率較低。另外,縮容時(shí)對(duì)節(jié)點(diǎn)進(jìn)行封鎖、驅(qū)逐等操作,不利于服務(wù)的穩(wěn)定性。
業(yè)務(wù)高速發(fā)展:虛擬節(jié)點(diǎn),秒級(jí)擴(kuò)容,節(jié)省30%成本
業(yè)務(wù)高速發(fā)展階段,高低峰流量相差懸殊、并發(fā)逐漸增高、突增流量時(shí)間達(dá)到秒級(jí),節(jié)點(diǎn)池的擴(kuò)容速度不足以滿足業(yè)務(wù)需求,還有購置服務(wù)器時(shí)庫存不足的風(fēng)險(xiǎn)。
虛擬節(jié)點(diǎn)是TKE提供的一種彈性調(diào)度能力,提供了近乎無限資源的擴(kuò)容能力,可以直接將Pod調(diào)度至彈性容器服務(wù)EKS維護(hù)的云上資源中,無需擴(kuò)容節(jié)點(diǎn)。相比節(jié)點(diǎn)池,虛擬節(jié)點(diǎn)的擴(kuò)容、縮容流程簡化了購買、初始化、退還服務(wù)器的流程,大大提升了彈性的速度,盡可能降低在擴(kuò)容流程中可能出現(xiàn)的失敗,使得彈性更快、更高效、更節(jié)省成本。
在彈性效率層面,虛擬節(jié)點(diǎn)可在數(shù)十秒內(nèi)啟動(dòng)數(shù)以百計(jì)的Pod,能夠很好的應(yīng)對(duì)S11這類高爆發(fā)業(yè)務(wù)場景。在成本層面,避免了普通節(jié)點(diǎn)由于無法完美分配Pod申請(qǐng)的資源而產(chǎn)生的buffer資源,節(jié)省了資源成本。
在此基礎(chǔ)上,我們結(jié)合業(yè)務(wù)側(cè)數(shù)據(jù),采取自動(dòng)化資源預(yù)熱的方式應(yīng)對(duì)高頻的突增流量場景;運(yùn)營類業(yè)務(wù)場景則需要和運(yùn)營部門緊密結(jié)合做好手動(dòng)擴(kuò)容的準(zhǔn)備。
網(wǎng)絡(luò)轉(zhuǎn)發(fā)方案優(yōu)化
存在的問題
集群提供公網(wǎng)訪問入口時(shí),默認(rèn)情況下外部流量經(jīng)由集群節(jié)點(diǎn)NodePort轉(zhuǎn)發(fā)至集群內(nèi)部,當(dāng)虛擬節(jié)點(diǎn)中部署的Pod數(shù)量較少,集群整體負(fù)載較低時(shí),該模式不會(huì)有網(wǎng)絡(luò)轉(zhuǎn)發(fā)性能瓶頸。不過隨著部署在虛擬節(jié)點(diǎn)中的Pod數(shù)量增大,集群整體負(fù)載升高,就需要添加更多的節(jié)點(diǎn)用于網(wǎng)絡(luò)轉(zhuǎn)發(fā),這與自動(dòng)伸縮、快速擴(kuò)容、降低成本的目標(biāo)背道而馳。
優(yōu)化方案
開啟VPC-CNI后采用直連Pod模式,容器與節(jié)點(diǎn)分布在同一網(wǎng)絡(luò)平面,每個(gè)Pod分配有固定IP,網(wǎng)絡(luò)直接由CLB轉(zhuǎn)入Istio Ingress,不再經(jīng)由NodePort轉(zhuǎn)發(fā),提高了網(wǎng)絡(luò)轉(zhuǎn)發(fā)效率,集群也不在需要網(wǎng)絡(luò)轉(zhuǎn)發(fā)節(jié)點(diǎn),大大提高了集群的擴(kuò)容能力。該模式下,集群擴(kuò)容上限受到集群所分配網(wǎng)段可用IP數(shù)的限制,因此需要提前做好規(guī)劃,避免集群擴(kuò)容受限。
最終效果
通過虛擬節(jié)點(diǎn)和VPC-CNI模式下直連Pod的結(jié)合,目前集群整體承載能力有了很大的提升,在成本控制方面也有了長足的進(jìn)步。
秒級(jí)擴(kuò)縮容
通過虛擬節(jié)點(diǎn)+K8s HPA能力,集群可在數(shù)十秒內(nèi)啟動(dòng)數(shù)以百計(jì)的承載百萬級(jí)流量的Pod,可以輕松應(yīng)對(duì)快速擴(kuò)縮容需求。再結(jié)合業(yè)務(wù)側(cè)數(shù)據(jù),自動(dòng)化進(jìn)行資源預(yù)熱,提升集群抗突增流量能力。縮容時(shí)也不再需要對(duì)節(jié)點(diǎn)進(jìn)行封鎖、驅(qū)逐等操作,提高了服務(wù)的穩(wěn)定性。
百萬承載
VPC-CNI直連Pod解決了NodePort流量轉(zhuǎn)發(fā)瓶頸的問題,加上虛擬節(jié)點(diǎn)近乎無限資源的擴(kuò)容能力大大提高了集群水平擴(kuò)容的上限,像騰競賽事數(shù)據(jù)開放平臺(tái)這樣大量讀的場景能輕松擴(kuò)容至百萬乃至千萬級(jí)QPS。
降低成本
虛擬節(jié)點(diǎn)的高效擴(kuò)縮容,配合K8s的HPA自動(dòng)伸縮機(jī)制,減少了資源的準(zhǔn)備和閑置時(shí)間,避免普通節(jié)點(diǎn)中的碎片化資源問題,有效的提高了資源利用率,最終為業(yè)務(wù)節(jié)省了30%的成本。
參考文檔
容器服務(wù)TKE:
【https://cloud.tencent.com/document/product/457/6759】
虛擬節(jié)點(diǎn)概述:
【https://cloud.tencent.com/document/product/457/53027】
彈性集群:
【https://cloud.tencent.com/document/product/457/39804】
VPC-CNI模式介紹:
【https://cloud.tencent.com/document/product/457/50355】