把騰訊搬上云:雲伺服器 CVM 的半部進化史

csdn 發佈 2022-06-30T09:13:59.097173+00:00

6月16日,騰訊對外宣布自研業務已實現全面上雲,三年上雲規模已經突破5000萬核,累計節省成本超過30億。這意味著包括QQ、微信、騰訊視頻、王者榮耀等在內的騰訊業務,已經實現和騰訊雲百萬級外部客戶一樣,基於公有雲的模式來開發運營。

6月16日,騰訊對外宣布自研業務已實現全面上雲,三年上雲規模已經突破5000萬核,累計節省成本超過30億。這意味著包括QQ、微信、騰訊視頻、王者榮耀等在內的騰訊業務,已經實現和騰訊雲百萬級外部客戶一樣,基於公有雲的模式來開發運營。

在騰訊集團高級執行副總裁、雲與智慧產業事業群CEO湯道生看來,騰訊自研業務上雲將不僅幫助騰訊構建了面向未來的技術架構和研發文化,也全面錘鍊了騰訊雲的產品、技術和綜合服務能力。這將幫助騰訊開啟雲端生長新時代。

時光回溯至2018年。彼時,騰訊作出歷史上第三次戰略升級,宣布紮根消費網際網路,擁抱產業網際網路。伴隨戰略調整的是,騰訊在技術上啟動了自研上雲和開源協同兩個集團級工程。

作為一個涉及騰訊業務底座變革的技術工程,自研上雲意味著騰訊雲的技術和產品將直面騰訊這個超級客戶的考驗。其中的難點在於,騰訊自研業務不僅有著業界首屈一指的體量和複雜性,而且還在穩定性上有著最嚴苛的要求。

從結果來看,騰訊雲在這個考場上成功經受住了考驗,騰訊雲的產品能力也藉此實現了蛻變和進化。其中,承擔著最基礎也是最核心角色的騰訊云云伺服器CVM,便是一個縮影。

「損耗降不下來,雲就上不了」

自研上雲這個決定一度讓CVM雲伺服器團隊興奮不已。對他們來說,過去總是被客戶靈魂拷問的問題「騰訊業務用的是騰訊雲嗎?」——即將擁有一個理直氣壯的答案。

但要把騰訊複雜的自研業務搬上雲卻沒有想像的那麼簡單,首當其衝的挑戰便直指CVM的核心性能指標:虛擬化損耗。

所謂虛擬化,就是將物理伺服器的資源連接成一個大的伺服器資源池,並能按照需要分割、組合為各種規格的雲伺服器。虛擬化能解決傳統IT在敏捷性、靈活性和可擴展性上的不足,實現更高的工作負載移動性和更高的資源可用性。

但虛擬化也有軟肋:物理伺服器在進行虛擬化的過程中,作為任務進程的虛擬化必不可少地會占用物理伺服器的資源,也就是虛擬化損耗。

騰訊自研業務關注虛擬化損耗,一方面是因為騰訊自研業務多數是面臨海量用戶,每個業務模塊對單台伺服器的性能要求都比較高,過高的損耗將影響業務穩定性;另一方面,損耗占掉過多資源就會導致業務需要占用更多的伺服器,這將會讓上雲後的成本不降反升。

說到這裡,還需要插空回顧一段騰訊雲虛擬化技術選型的歷史——

2013年,騰訊雲面臨對虛擬化技術路線選擇:是選擇業界成熟但可能在未來遇到性能瓶頸的Xen,還是選擇社區新銳但尚未驗證過的KVM。

經過決策,騰訊雲在國內率先扎進了KVM的技術隊列,一方面是因為KVM在技術架構上有著更好的前景,在面對超大規模集群場景下更有優勢;另一方面,KVM社區當時已經有很高的活躍度,符合騰訊擁抱開源的技術思路。

隨後幾年行業的發展證明了當初騰訊雲選擇的正確性,KVM 逐漸成為所有主流雲計算廠商的虛擬化方案。騰訊雲也因為在KVM領域早期投入和持續深耕,一直保持著在虛擬化領域的行業領先性。

然而,即便這樣的領先性在自研業務的高要求下,依舊面臨著巨大的挑戰。

彼時,騰訊雲在伺服器虛擬化上性能損耗大約在15%,雖然已是行業最好的水平。但自研業務比如微信、QQ群業務,對虛擬化性能損耗接受預期在8%以內。換言之,如果虛擬化損耗降不下來,這些業務就上不了雲。

死磕虛擬化損耗的優化,成了隨後幾個月CVM團隊的一號任務。

經過定位,團隊找出優化方向:

在網絡虛擬化層面,團隊發現虛擬化網卡底層存在著一個VPC網絡,對於UDP的隨機埠的訪問性能比較差,於是採用加網卡隊列數的方式,保證網絡性能,同時在網絡IO的設計上開創性地設計出單獨拷貝和never copy的機制,確保整個過程當中不會再進行過多的拷貝從而節省開銷;

在CPU虛擬化層面,為了解決雲伺服器的核間通信帶來的性能開銷過大的問題,團隊採用雲伺服器即使CPU空閒的時候也不出讓給宿主機的方式,確保雲伺服器獨占資源;

與此同時,騰訊雲首款自研伺服器星星海也正式投入生產環境使用,帶來更適配雲端的硬體支撐;

……

軟硬體聯合定製化調優後,CVM伺服器的實測虛擬化開銷突飛猛進地降低到5%以內。這甚至出乎業務團隊的意料。

讓CVM團隊印象深刻的是,騰訊廣告業務一度提出,為什麼用了雲伺服器性能相比之前用物理伺服器還提升了20%多,要求儘快定位清楚……

解決了虛擬化損耗大指標的問題,自研上雲的第一個攔路虎算是被初步解決。但上雲的挑戰還遠沒有結束。

「被人肉DDoS的感覺」

由於面對的業務場景有著超出過往任何客戶的複雜度和體量,CVM團隊還需要面對各種各樣的問題。

以性能測試為例。過去,行業在進行雲伺服器性能驗證,由於很難窮舉每一個用戶場景,所採用的是功能性的的驗證,主要沿用業界比較規範的幾個指標。

但在騰訊自研業務上雲中,業務更加傾向於在不同場景下做精細化的測試。比如QQ紅包,大的類別分場景測試和性能壓測,其中一個場景測試,就區分了三種場景,近十個的指標項,比如延時、丟包率等等。

不止於此,QQ紅包的團隊的測試標準跟QQ基礎團隊的測試標準又有區別,在QQ群場景中測試邏輯又會變化。再擴展到微信、遊戲、視頻等業務場景下,需要應對的問題更是翻倍增長。很多時候,很難預料到的一個小開關、某一個小改動,就會體現到在不同業務上出現問題。

「你這個丟包怎麼這麼高?」、「你們性能打到這又打不上去了?」一堆問題接踵而至,CVM團隊時常有種被人肉DDoS的感覺。

最終,通過跟業務團隊的一次次驗收對接,CVM團隊與業務團隊合作,對性能點進行針對性調優。

同時,CVM團隊在綜合不同業務部門需求的前提下,整合了一個更大、更多樣、更偏向業務的測試工具集,囊括了不同語言環境的編譯測試、AI測試等眾多子項,能夠反映出雲主機在真實業務場景中的實際表現。

除了技術本身的優化外,CVM團隊還要時不時應對一些非技術型問題。

比如,在微信業務上雲時,業務團隊發現一個依賴系統在90核(45物理核心)的CVM雲主機當中伺服器中運行效率異常低下。經過CVM團隊、星星海團隊、微信團隊聯合分析發現,由於代碼形成於微信業務早期,運行邏輯存在一定的特殊性,這導致其在單數物理核心上運行時會產生詭異的效率降低;而物理機核心數量都是雙數,所以問題並沒有在之前的運行中暴露。在業務部門更新代碼之後,這個性能問題迎刃而解。

騰訊遊戲《天涯明月刀手遊》是另外一個例子。當時,這款大作上雲之後,業務團隊發現雲伺服器性能不及預期,導致遊戲伺服器經常處在高負載狀態,玩家掉線、登錄異常時有發生。業務團隊只能不斷安撫玩家情緒。如果任由事態繼續,遊戲的運營和生命周期都會受到巨大影響。

經過CVM團隊和業務團隊聯合定位,問題最終明確:原來在申請資源時沒有考慮雲伺服器主頻與此前遊戲設計時的主頻匹配,導致雲伺服器產生持續的高負載情況,而這一問題在更換新的雲伺服器之後得到順利解決。事後,騰訊雲團隊也收到了業務團隊分享的慶功蛋糕。

諸如此類的技術優化和服務經驗,也在被不斷地注入到騰訊雲的產品服務和交付體系中,為雲上用戶提供經過嚴苛場景歷煉的保障。

「利用率提上去,成本降下來」

除了增效,降本也是業務對上雲的核心關切。CVM團隊在雲伺服器裝箱率上動起了腦筋。

所謂雲伺服器裝箱率,就類似於用箱子裝東西時對箱子空間的利用率。由於物品沒法同時裝到兩個箱子裡,所以箱子裡物品碼放的越整齊,能裝的東西就越多。放在雲伺服器場景中也一樣,雲伺服器里的配置之和越接近於宿主機的容量,就意味著裝箱率越高,資源利用率越好。

在騰訊自研業務場景下,卻不得不面臨這樣一種問題:就是很多業務由於使用場景和習慣,通常需要大規格配置的伺服器。

這就會帶來一個問題:假如一台物理宿主機有80個核心,而業務需求是60核,那麼剩下的20核應該怎麼用?如果不能投入使用,對於騰訊自研業務上雲的體量來說,就會帶來巨大的資源浪費。

只有利用率提上去,成本才能降下來。

為了解決這一問題,CVM團隊在首次裝箱的時候就按照不同業務的資源需求對裝箱率進行最優化配置,儘量保證物理伺服器能夠「用好用滿」。而對於雲伺服器退訂所產生的資源間隙,CVM團隊則能藉助成熟的熱遷移技術會定期進行統籌調度,找到合適的業務補齊。

最終,在自研業務上雲工程中,騰訊雲的伺服器裝箱率從之前的80%+一路上漲到現在97-98%,大幅降低了運營成本。

結語

在騰訊自研上雲工程中,業務目標不是簡單的將業務從物理機搬到雲上虛擬機。但騰訊雲CVM在一路的歷煉中不斷實現自身的產品進化:

他們通過網絡優化和重構數據遷移流程,讓雲伺服器的遷移成功率從70提高到了98%;

他們找到了處理器廠商內存RAS技術中的不足,讓雲伺服器的可靠性大幅提升;

他們優化了雲伺服器的網絡和IO性能,分別實現了700%和300%的性能提升;

他們在騰訊會議最關鍵的時刻,支撐業務8天擴容100萬核;

在自研上雲的基礎上,他們如今把虛擬化損耗降低到0%;

……

正是在這樣一輪輪的進化中,騰訊自研上雲的基石不斷打牢、扎深,並支撐自研業務走向雲原生的新未來。

關鍵字: