疫情期間,騰訊會議作為一款非常便捷的遠程協(xié)作工具,成為國內(nèi)眾多企業(yè)日常會議溝通交流的主要平臺。殊不知,這款產(chǎn)品從2019年12月26日才正式推出。如何在這么短的時間內(nèi),有效撐起國內(nèi)數(shù)以億計的用戶訪問量,保證系統(tǒng)的穩(wěn)定運行?本文來自騰訊云的技術(shù)人員,為你解析8天時間內(nèi)完成100萬核資源的擴容背后的技術(shù),希望對大家有所借鑒。
如果需要交付100萬核的計算資源,需要做什么?準備資源,然后按用戶需求進行交付。如果在前面加一個定語“快速”呢?可以加班加點完成。但是如果要實現(xiàn)8天內(nèi)完成100萬核的資源交付,換算下來,每天需要交付12.5萬核,這就有點苛刻。在云計算的歷史上,從未出現(xiàn)過類似的案例。
那么,騰訊會議是如何做到的呢?
解決思路
首先,分析如此短的時間內(nèi),交付這些資源需要做哪些事情,會遇到哪些問題。
實際上,借助于當前成熟的虛擬化技術(shù),可以基于已經(jīng)制作好的鏡像系統(tǒng)文件,快速地部署一套用于提供服務(wù)的生產(chǎn)環(huán)境,所以,只需要準備好足夠的計算資源就能夠?qū)崿F(xiàn)服務(wù)的無限擴容,而這個過程大概需要以下四步。
1.準備資源,投放物理機:作為云計算服務(wù)提供商,首先資源是第一位的,所以第一步要準備用于提供服務(wù)的物理機。這100萬核心的資源,相當于約12000臺物理機。以防資源不足的問題,需要快速將這些物理機全部上架,同時,保證每臺物理機經(jīng)過驗證,并且部署了正確版本的后臺組件。
2.資源注冊與分配:有了物理機資源,下一步就需要把初始化好的物理機資源投放到現(xiàn)網(wǎng)環(huán)境中,確保每一臺物理機資源都在CVM后臺服務(wù)中注冊。騰訊云操作系統(tǒng)VStation需要維護數(shù)十萬級的物理機資源,這無疑對資源調(diào)度能力提出了極大的挑戰(zhàn)。這一步需要快速將所有計算資源找到對應(yīng)的物理機承載。
3.資源創(chuàng)建與交付:當后臺調(diào)度系統(tǒng)選擇好承載計算能力的物理機之后,下一步是到物理機上創(chuàng)建虛擬機資源。這一步看似簡單但需要做的事情卻不少,如生成用戶控制數(shù)據(jù),與存儲、網(wǎng)絡(luò)系統(tǒng)交互,生成對應(yīng)的虛擬機配置,啟動虛擬機。
4.虛擬機初始化:虛擬機成功創(chuàng)建之后,就已經(jīng)可以交付使用了。不過可能還需要進行配置,如拉取配置、加入服務(wù)集群、啟動服務(wù)等。
完整歷程解密
圖1是騰訊云操作系統(tǒng)VStation架構(gòu)圖,騰訊云操作系統(tǒng)VStation,承擔資源調(diào)度、請求排隊的任務(wù),已經(jīng)對大批量、高并發(fā)的創(chuàng)建請求進行了充分優(yōu)化。具體來說:
·API部分接入用戶請求,管理用戶角色、CVM機型、用戶配額等;
·云操作系統(tǒng)VStation,承擔資源調(diào)度、請求排隊,目前虛擬機每分鐘吞吐可達到5000臺;
·Host組件上安裝用于生產(chǎn)和配置CVM實例的各種輔助組件。
圖1:VStation云操作系統(tǒng)
下面從資源準備、注冊與分配、創(chuàng)建與交付、虛擬機初始化四大部分詳細介紹下其中的具體過程。
1.準備資源,投放物理機
騰訊云基于定制化騰訊TLinux、自研的虛擬化hypervisor系統(tǒng),可以實現(xiàn)批量自動部署、自動投放,并且在投放到現(xiàn)網(wǎng)之前進行自動驗證,保證軟硬件不存在隱患。騰訊云Host組件管控系統(tǒng),方便管理騰訊云hypervisor上的各種代理組件,易于發(fā)布,方便運維。
圖2:Host初始化過程
·安裝系統(tǒng):運維平臺從資產(chǎn)管理平臺CMDB拉取對應(yīng)Host相關(guān)機型信息,尋找與該機型對應(yīng)的TLinux操作系統(tǒng)控制BMC配置從pxe啟動,從pxe服務(wù)器拉取系統(tǒng)鏡像安裝系統(tǒng)。
·系統(tǒng)初始化:安裝完系統(tǒng)后需要配置各種系統(tǒng)參數(shù),調(diào)優(yōu)。
·部署Host使用的組件:每種不同機型的CVM使用的Host會使用不同的后臺Agent,以及相關(guān)配置。通過Host組件管控系統(tǒng)Host使用的插件進行統(tǒng)一管理,下發(fā)。
·導入集群:已經(jīng)初始化好的Host,需要導入到VStation集群才能售賣和生產(chǎn)CVM。
圖3:Host組件管控系統(tǒng)
Host組件管控系統(tǒng)用于下發(fā)Host組件、灰度版本、控制、支持并發(fā)下載、灰度發(fā)布,同時上報Host上各個組件的信息、組件健康管理、自動拉起組件、異常告警等。
2.資源注冊與分配
作為整個系統(tǒng)的核心,騰訊云操作系統(tǒng)VStation需要管理10萬級的物理機資源,近千萬級的核數(shù),所以需要實現(xiàn)快速和穩(wěn)定的調(diào)度系統(tǒng)。VStation服務(wù)類似Google Borg/Omega使用的分布式調(diào)度架構(gòu),對計算資源進行調(diào)度。
圖4:VStation調(diào)度系統(tǒng)
其中,水平擴展調(diào)度器支持橫向擴容,每個調(diào)度器擁有幾乎全部的集群信息,方便掌握全局資源;采取增量同步、定時更新、局部緩存的方式,盡可能多地掌握全局視圖,并且維持集群狀態(tài)信息的準確性。
調(diào)度決策方面,將可能過濾掉更多物理機的基礎(chǔ)條件放在調(diào)度器的靠前位置,過濾掉無法滿足基本條件的物理機列表,減少調(diào)度過程中物理機集合在不同調(diào)度器之間的傳遞;同時,根據(jù)多個維度,如物理機資源使用率、剩余資源等,對滿足裝箱條件的物理機進行排序,盡可能優(yōu)先使用優(yōu)質(zhì)Host資源,合理調(diào)配。此外,避免多個調(diào)度器在并發(fā)時選中相近的物理機,對經(jīng)過排序后的物理機進行隨機調(diào)整,減少大并發(fā)時造成的沖突。
3.資源創(chuàng)建與交付
解決資源調(diào)度問題后,需要在選中的物理機上創(chuàng)建虛擬機資源,其中有一些耗時的硬性階段無法解決,VStation對此結(jié)合資源創(chuàng)建過程的的特點,做出了令人滿意的優(yōu)化,把單臺虛擬機創(chuàng)建時間基本控制在3-5秒。
前面提到,資源創(chuàng)建需要與諸如用戶控制數(shù)據(jù)、網(wǎng)絡(luò)服務(wù)、存儲服務(wù)、鏡像服務(wù)、密鑰、安全組服務(wù)等進行交互,完成用戶與所創(chuàng)建的虛擬機資源之間的映射。VStation平臺設(shè)計之初就考慮到高并發(fā),批量創(chuàng)建的場景,對周邊系統(tǒng)的交互實現(xiàn)了并行化通信。同時,為支持高并發(fā),提高服務(wù)的吞吐量,每種與其他服務(wù)交互的工作進程通過高可用消息隊列通信,都是無狀態(tài)和可擴容的。真正實現(xiàn)了高可用、高并發(fā)、自動容災。圖5是VStation內(nèi)部系統(tǒng)的核心架構(gòu)。
圖5:VStation后臺架構(gòu)
VStation通過高可用的消息隊列,控制數(shù)據(jù)與周邊系統(tǒng)交互的工作進程間通信,同時對創(chuàng)建過程中的關(guān)鍵任務(wù)按照依賴關(guān)系實現(xiàn)并行化,最大限度的壓縮創(chuàng)建總耗時。針對高并發(fā)請求,為減少對系統(tǒng)自身的影響,系統(tǒng)具備以下特性:
1 控制信息載荷自動壓縮
控制消息攜帶了CVM實例的各種控制信息:計算、存儲、網(wǎng)絡(luò)以及各種元數(shù)據(jù)信息。隨著系統(tǒng)功能增加,控制層面數(shù)據(jù)也有所增長,控制信息載荷增大。使用壓縮算法在投遞消息前進行壓縮并在接受消息后解壓縮,能夠大大降低消息占用消息總線,提高消息吞吐率。目前VStation使用開源LZ4-Extremely fast compression壓縮和解壓縮算法,壓縮速率可達到780 MB/s,解壓縮速率在4970 MB/s,壓縮率在2倍左右。
2 負載平衡
分布式系統(tǒng)中會使用多個實例以增加系統(tǒng)請求響應(yīng)吞吐率,控制模塊負載平衡可以保證請求均勻地被各個worker處理。負載平衡需要后臺處理請求的worker均勻分配到不同處理實例上,降低等待隊伍長度,并發(fā)執(zhí)行任務(wù)。同時需要將虛擬機實例盡量均勻地分配在不同Host。
將并發(fā)請求盡可能均勻地分在不同物理機,有利于加快辦法創(chuàng)建速度。生產(chǎn)虛擬機較為耗時的任務(wù)有創(chuàng)建虛擬機磁盤、下載虛擬機鏡像、申請網(wǎng)卡、配置網(wǎng)絡(luò)等。如果多臺虛擬機串行地在同一臺物理機上創(chuàng)建,必然是系統(tǒng)瓶頸,創(chuàng)建耗時延長。VStation Scheduler在裝箱時,每個Scheduler實例有近乎全局的資源視圖,對同一批次的創(chuàng)建任務(wù),可以在虛擬機并發(fā)裝箱時保證虛擬機盡量不落在同一臺物理機。
3 流控系統(tǒng)
當請求數(shù)超過系統(tǒng)承載能力時,如果不加控制,會對周邊系統(tǒng)造成危害,導致系統(tǒng)過載,內(nèi)部組件異常(如DB慢查詢、不響應(yīng)、消息隊列丟消息),破壞性較大,嚴重時會造成服務(wù)不響應(yīng),甚至用戶數(shù)據(jù)不一致。VStation增加排隊機制,降級服務(wù),而不是返回系統(tǒng)內(nèi)部錯誤,以提升用戶體驗。流控系統(tǒng)由以下幾個方面組成:
·關(guān)鍵請求頻次控制:在API請求頻次上對用戶做限制,防止惡意用戶頻發(fā)請求系統(tǒng),如惡意購買,刷單等。
·用戶配額限制:限制用戶隨意申請資源,尤其是按量資源,限制配額。
·后臺請求排隊與流速控制:任何系統(tǒng)都有能承載的處理容量,當VStation正在處理的請求超過一定閾值時,對新加入的請求不做拒絕處理,而是放入等待隊列中待正在處理的任務(wù)完成后繼續(xù)執(zhí)行。
圖6:VStation流控系統(tǒng)
4 任務(wù)編排優(yōu)化
一個完整的創(chuàng)建任務(wù)涉及到的各種子任務(wù)較多,單純串行執(zhí)行雖然邏輯清楚且維護簡單,但不利于充分發(fā)揮系統(tǒng)能力,高并發(fā)創(chuàng)建場景中耗時較長。通過分析虛擬機實例創(chuàng)建過程中的各種依賴關(guān)系,將不耦合的任務(wù)并行執(zhí)行,把簡單的單項圖轉(zhuǎn)換成有向無環(huán)圖(DAG),進一步提升任務(wù)的并行度。
圖7:創(chuàng)建流程任務(wù)優(yōu)化
調(diào)整后,單臺CVM實例創(chuàng)建任務(wù)可以控制在5秒以內(nèi)。
4.虛擬機初始化
提到云主機的初始化,CVM支持使用云原生的cloud-init服務(wù),支持云計算主機鏡像初始化協(xié)議,用戶通過傳入自定義的腳本程序,實現(xiàn)云主機創(chuàng)建后自動執(zhí)行預定義配置。同時,騰訊云提供實例metadata服務(wù)。用戶在自定義腳本程序中可以訪問實例metadata服務(wù)獲取與實例有關(guān)的信息,如IP地址、實例名稱等,來實現(xiàn)每個實例的特殊化配置。
圖8:CVM元數(shù)據(jù)
CVM實例相關(guān)元數(shù)據(jù)信息包括鏡像、用戶數(shù)據(jù)、vendor數(shù)據(jù)、元數(shù)據(jù)幾部分組成。其中鏡像信息和用戶數(shù)據(jù)信息可以讓用戶自行配置,vendor數(shù)據(jù)和實例元數(shù)據(jù)(如IP信息、地域信息等)可以通過內(nèi)網(wǎng)訪問騰訊云元數(shù)據(jù)服務(wù)獲取,從而實現(xiàn)快速自動化配置CVM實例。
總結(jié)
8天內(nèi)完成為騰訊會議擴容100萬核的任務(wù),在此一役,騰訊云CVM后臺服務(wù)有效地支持了高并發(fā)請求,通過優(yōu)化調(diào)度算法、優(yōu)化內(nèi)部架構(gòu)、降低創(chuàng)建耗時,完美經(jīng)受住了此次考驗。未來,將更有信心迎接其它更艱巨的挑戰(zhàn)。