我遇到一群靠「造夢」改變世界的人

2020-07-27   淺黑科技

原標題:我遇到一群靠「造夢」改變世界的人

我遇到一群靠「造夢」改變世界的人

故事的開頭,是2013年那個風雨交加的夜晚。

窗外打著雷,屋裡亮著燈。會議室里,頭髮蓬亂鬍子拉碴的宅男們列坐兩旁。如果不是有人電腦上粘著幾隻企鵝貼紙,估計你很難辨認出他們是騰訊的工程師。

氣氛多少有點火藥味,老司機們像辯論賽一樣分成了兩撥。

一撥人懷裡揣著三個字母:Xen,另一撥人手裡攥著另外三個字母:KVM。

這是要給什麼新產品選名字嗎?當然不是,技術宅選名字什麼的都很隨性的,絕不會打起來。比這厲害得多,他們是要給一個即將誕生的新產品選擇「技術靈魂」。

啥新產品,值得這幫老司機大動干戈呢?

中哥不賣關子了,當時的情況是醬的:

2013年,騰訊做出了一個重磅決定,把自己旗下的騰訊開放平台改組為騰訊雲,正式對外提供雲計算服務。而會議室里這群老司機,就是在為騰訊雲底層的「虛擬化架構」進行技術選型。

啥是 「虛擬化架構」,你可能還不了解;但 「騰訊雲」這三個字在日後掀起了多少波瀾,吃瓜群眾有目共睹。

站在今天回望, 這場會議的結論曾撥動了鵝廠的一顆命運轉輪。

(一)其實,我是一個「造夢師」

要想故事看得好,一波科普少不了。

在搞明白 虛擬化技術的工作原理之前,中哥決不允許你往下看故事。別緊張,科普很快的,一點兒都不疼。

你看,這是啥:

這是一棟大廈。這是一棟充滿魔力的「計算力大廈」。

騰訊把無數伺服器堆積起來,建造了這座計算力大廈,起名為騰訊雲。

然後他們的操作是把這幢大廈隔成一間間屋子租給有需要的人。(就是把計算力分割成小塊租給企業。)

很快就來生意了。

有闊氣的老闆想租600平米,有剛畢業的年輕人想租15平米。於是,騰訊雲就得按照人家的需要,打好隔斷,交給他們。

沒過兩天,老闆覺得用不到這麼大的房子,想把600平米換成200平米;可年輕人突然事業爆發,要把15平米的房子換成2000平米。於是,騰訊雲就要重新為他們打隔斷,交付合適的「面積」。

騰訊雲上的租戶成千上萬,難道要真的有一個「裝修隊」,每天手忙腳亂地打隔斷嗎?

並不是。

其實他們採用了一種更高級的技術——用代碼做成一個個「夢境」,只需要修改參數就可以實時調節這個「夢境」的面積,從15平米,調到2000平米,就是一分鐘的事兒。

而且,兩個「夢」之間就像兩個平行宇宙,既不透光也不透聲,一切信息都無法相互交流,比隔斷更安全,既乾淨又衛生。

這個營造夢境的技術,就是 「虛擬化技術」

中哥說得這麼玄幻,其實是為了你方便理解。現實世界中虛擬化技術,就是在物理機上通過虛擬化技術創造出來的一個個相互隔離的「虛擬機」。讓跑在虛擬機裡面的作業系統感覺不到任何異常,而且可以像金箍棒一樣隨大隨小。給你看個圖就明白了:

如果拿一種職業作比較,虛擬化工程師非常像《盜夢空間》里的造夢師,不僅要把「夢」造得真實,還要讓「夢」穩定運行——這是一個屬於瘋子或者天才的職業。

好,科普完畢。

現在你應該知道了吧,這個風雨交加的夜晚,屋子裡坐的其實都是一群大內高手。 正好他們的對決尚未分出勝負,你來幫忙評評理。

支持 Xen 的同學是大多數。Xen 有點像虛擬化界的「中堅派」,最主流。當時騰訊內部有很多地方也在使用 Xen。可是 Xen 也有缺點:它雖然是開源的,但代碼過於複雜,工程師們很難100%把控它。有點像小時候家裡的鬧鐘,你拆了就可能裝不回來。。。

支持 KVM 的同學是少數。KVM 有點像虛擬化界的「少壯派」,它也是開源的,但代碼簡單清晰,有點像樂高積木,技術宅們可以隨心拼拆,但它究竟能不能扛起雲計算的底層架構,沒有人驗證過。

「中堅派」咄咄逼人:去飯館吃飯還要挑人多的那家呢。先走一步的友商亞馬遜 AWS 和阿里雲都選擇用 Xen 而不是 KVM 做虛擬化技術,難道是拍腦袋決定的嗎?KVM 畢竟太新了,我們憑什麼去踩坑啊?

「少壯派」據理力爭:如果用複雜的 Xen,我們就不能100%駕馭它。技術最怕有漏洞,萬一哪天發現了 Xen 有漏洞,我們又修不了,影響到上面的用戶怎麼辦?

「中堅派」發出靈魂一問:擔心 Xen 有漏洞,KVM 就沒事了嗎?

「少壯派」一拍胸脯放出豪言:如果我們能研發出一套「熱升級技術」呢?

空氣突然安靜。

啥是熱升級技術?就是能在系統一邊運行的時候,一邊升級的騷操作。就像老司機一邊開車還能一邊修車那樣。如果真的能做出來熱升級,那就相當於《終結者》里的自修復機器人,再多傷口也能癒合,媽媽再也不用擔心我死翹翹了。

幾秒沉默之後,領導發話:吹牛沒用,代碼說話。給你們兩個月時間,要是你們真的能研發出來 KVM 的熱升級,那我就同意讓 KVM 做騰訊雲的虛擬化平台。

散會!

少壯派同學們拿到令牌,前一秒還擊掌慶祝,後一秒才意識到時間緊迫壓力山大,趕緊滾回去擼代碼。這時他們才恨自己沒有三頭六臂——人手這麼少,先找幾個志同道合的大牛來才是主要的。

王佳就是這個時候加入騰訊雲的。

王佳

王佳是 KVM 的堅定支持者,聽說騰訊雲正在求賢若渴地尋找 KVM 大牛,滿心歡喜地加入。哪成想一進騰訊雲連氣都沒喘勻,就被同事們揪進了漩渦中心——分秒必爭地開始研究 KVM 熱升級技術。

精誠所至,金石為開。「少壯派」有如神助。一個月時間,王佳和同事們就把熱升級模塊的代碼拍到了桌子上。

同事們驚為天人。

「現在回想起來,雖然有些代碼實現並不優美,但我們卻不小心成為了業界最早研發出 KVM 熱升級的團隊。」王佳笑。

槍桿子裡面出政權,代碼就是技術世界的馬克沁機槍。

技術領導看著 KVM 團隊六親不認的眼神,終於同意從騰訊雲上分出5%的機器,讓他們用 KVM 來做虛擬化,之後根據表現再擇機增加比例。

你可能覺得,5%也太摳門了吧。。。

別忘了,騰訊雲的總體量很大,哪怕5%所對應的絕對數量也已經很驚人了。而且騰訊雲是當時騰訊的重要嘗試,一萬雙眼睛在盯著。此時,給這個沒人用過的技術選型投信任票,技術領導們背了多大的壓力,可想而知。

2013年,騰訊雲正式上線。中國雲計算猝不及防地進入「戰國時代」。而騰訊雲因為身體里流淌著 KVM 的血液,成為雲計算列強里的一個「另類」。

故事講到這裡,反派就準備登場了。把鏡頭拉遠,在遠處的黑暗中,敵人正在躡足潛蹤,準備扼住我們主角的小咽喉。

「老司機,帶帶我。。。」那天晚上,王佳結束了愉快的加班,回家打開音樂。手機還沒來得及扔到桌子上,就開始瘋狂震動。

「大家趕緊上線,我們的 KVM 虛擬機掛啦!!」

(二)生死熱遷移

擔心的事情,終於還是發生了。

而且要命的是,這個事故還發生在騰訊雲第一波大客戶——某大型視頻網站——身上。

客戶的「夢境」里包含N台虛擬機,每掛一台虛擬機,就相當於一部分「夢境」沒了。幸好出問題的只是占比5%的 KVM 虛擬機,客戶主體的「夢境」還在,業務沒受太大影響,怒氣值暫未爆表。

但留給中國隊的時間不多了。。。

王佳他們灰頭土臉沒日沒夜地檢查了好幾天。結果非常氣人:雖然看上去很嚴重,但原因只是 KVM 開源版本里有一個隱秘的小錯誤,只要修改掉就可以了。

如果這個問題發生在 Xen 上,那難免要把騰訊雲整個暫停,來一次停機升級。可在 KVM 上,你還記得之前搞出來的「熱升級技術」麼?

沒錯,終於派上用場了。

他們趕快對所有 KVM 虛擬機都進行了在線熱升級。而雲上的用戶業務不僅沒中斷,而且幾乎是沒有感覺的。

接下來的劇情走向就很有意思了。

王佳心裡涼了半截,本以為經過這次事件,KVM 技術在騰訊雲里要被打入冷宮,沒想到,由於 KVM 的熱升級能力在眾目睽睽之下經受住了考驗,領導們做出了一個兇猛的決定: 繼續加大 KVM 虛擬機的比重。

就這樣,KVM 在騰訊雲里的比重加到了30%,穩定運行一段時間,又加到了60%,到了2014年底,KVM 就成為了騰訊雲官方指定唯一白金鑽石級底層虛擬化平台,虛擬化團隊也全部轉向 KVM 技術路線。

這是當時團隊的合影

對於這些宅男老司機來說,看著自己從零呵護起來的技術路線支撐起整個騰訊雲,比跟相戀多年的女友修成正果還開心。

此時,時間已經推進到了2015年,最愚鈍的人,都發現了世界的變化。

北京杭州上海深圳的機場,巨幅的廣告位被各家雲計算大廠包攬一空。

這些一擲千金的廣告背後,折射出雲計算行業刺刀見紅的競爭。各家雲廠商也清楚,療效比廣告更重要,他們紛紛加大投入,打磨底層技術。

有一個細節,王佳後來才知道——就在那時,阿里雲和 AWS 已經越來越感受到 Xen 的束手束腳,疼定思痛,成立了小分隊,認真研究要把底層虛擬化技術從 Xen 切換到 KVM。

而由於兩年前雨夜的那場「豪賭」,騰訊雲幸運地最早擁抱了 KVM,在這一回合技術較量中占盡了先機。市場份額不會說謊,在諸多研究機構的報告中,那一年騰訊雲的用戶暴漲,開始奮起直追中國市場的領頭羊阿里雲。

真正讓這群老司機感覺到鼓舞的,不是市場份額,而是聚光燈。彼時騰訊雲成了國內 KVM 虛擬化技術的聖地,各路頂級英雄紛紛來投。

如今騰訊雲虛擬化團隊的負責人 陳立東,就是在這個時候加入的。

陳立東

陳立東還記得,自己加入不久,騰訊雲的總負責人湯道生就宣布,要在未來3年豪擲500億,爭奪中國雲計算的權柄。

這時的騰訊雲,已經不僅僅是一個「重要嘗試」這麼簡單,就像一個弱冠年輕人,需要為整個家族的命運承擔責任了。

「從那時起,虛擬化團隊每天都是如履薄冰,一秒都不敢鬆懈。」陳立東回憶。

可問題還是來了,以一種妖嬈的姿勢來了。

2015年,陳立東他們在後台數據中突然發現了怪異現象:最近一些虛擬機好像故障率有點高。。。

在各家雲計算混戰正酣的時候,出了這個問題,無異於蘇德交兵的時候,坦克突然掉鏈子。

正在他們努力定位問題的時候,商務同事開始在群里反饋:有用戶說了,最近感覺騰訊雲不如以前穩定了,要是不趕緊處理,他們可是要轉投別人家了!

大家更緊張了。。。

問題找到了,果然不是軟體問題,而是最近採購的部分內存有質量缺陷。

硬體是雲計算的基礎。就像組成一幢房子的磚石,非常重要。

內存廠家有錯就認,挨打立正,同意把這批貨全部更換。

可是,陳立東他們卻犯愁了。如果換內存,虛擬機一定會被破壞。在那之前,得先把用戶的虛擬機搬個家,可是搬家的時候,客戶還得把機器關掉一段時間啊。

這可不是小事。當時騰訊雲的客戶有很多都是遊戲廠商。你這給人家虛擬機停機再遷移,少說也得半小時。相應的他們就得給玩家停服半小時,這後面的損失算誰的??

箭在弦上,陳立東他們必須火速研究出一種技術:熱遷移

顧名思義,熱遷移就是一個搬家隊,在系統不停機的情況下,把所有東西從一個虛擬機搬家到另一個虛擬機。打個比方,就像一個飯店,要一邊炒著菜,一邊從一個屋子搬到另一個屋子,還不能耽誤給食客上菜的速度。這難度可想而知。。。

戰場上已經吹響了衝鋒號。這群老司機沒有退路,就是死也得把這個「搬家技術」搞出來再死。

熱遷移起碼要解決兩個問題:

1、遷移成功率;

2、服務可用性。

先說「遷移成功率」。

之前說過,虛擬機就像大廈里的隔間,有大也有小。

給一間小飯館搬家比較容易,把屋裡的東西裝進一個箱子,搬到另一個屋子就行了。 可是如果面對一間大飯店,各種東西琳琅滿目,還有不少大件物品。

這時就需要一個很大的搬家隊,而且搬得時候還有可能磕碰損壞。

陳立東他們遇到的就是你這個問題。如果虛擬機配置小,那麼遷移起來就很容易成功;如果虛擬機配置大,就會有一定的機率遷移失敗。

這怎麼解?

他們的辦法是:壓縮!

還拿搬家打比方,這就像是搬家的時候,把家裡的物品條理清晰地放進箱子裡,讓它們占用空間的方式最緊湊,這樣就可以讓箱子數量儘可能少,搬家時損壞的可能性也就更低了。

那段時間他們沒日沒夜,嘗試了各種工程方案,生生把內存里的文件壓縮後的大小降低到了安全線以內。隨之,遷移失敗率大大下降。

再說「服務可用性」。

剛才說過,遷移的過程中,這個虛擬機還是要正常運行的。上一秒還在這間屋子裡炒菜,下一秒就要在新屋子裡繼續炒菜。

解決這個問題,就要求搬家的動作又快又穩。

但是,陳立東和同事們被生生卡在了這裡。

由於 KVM 本身的設計問題,在熱遷移處理某個特定邏輯的時候,同時只能交給一個 CPU 核心。這就好像飯店裡的煤氣灶,搬遷有危險性,必須由專業的師傅來搬。給一間小飯店搬家還可以,但是面對大飯店,煤氣灶很多的時候,這個師傅就會手忙腳亂,宏觀表現就是虛擬機在搬遷的時候性能「抖動」。

最開始,這群技術宅的思路就是「多找幾個煤氣師傅一起來搬」。可是弄來弄去,並發的細節怎麼都搞不定。結論很沮喪——只能由一個師傅來搬。

眼看時間一點一點流逝,虛擬化團隊的技術宅們心急如焚。

一天早晨,商務的同事在技術群里恨恨地發了一條消息:客戶走了。

言下之意,是誰的責任,你們心裡有數。

陳立東他們內疚極了。然而,他們每天仍然不斷地被拉進各種客戶群,面對像浪潮一樣湧來的吐槽。虛擬化團隊一口口嗆水,拚命找出路。

那段時間,根本連覺都睡不著,做夢都在嘗試技術方案。

陳立東回憶起來,仍然心緒難平。

說出來你可能不信,方案真的是做夢時候想出來的。

那天半夜,陳立東「垂死病中驚坐起」。衝到電腦邊,開始記錄他想到的方法。

這個方案其實並不複雜。你還記得吧,之前他們的思路一直是多找幾個煤氣師傅,現在的思路是:就讓這一個師傅來搬,但是用多種技術限制他同一時刻的工作量,這樣就起碼不會出現手忙腳亂(進程卡滿)的狀況,從宏觀上看,虛擬機的抖動反而大大下降了。

雖說這個技術方案不如之前的那麼優美,但在當時卻能堪大用——解決了大配置虛擬機平穩熱遷移的問題。

技術方案出爐,接下來就一馬平川。依靠熱遷移技術,客戶們被平滑地般到了健康的主機上,這批問題內存也第一時間被換掉了,客戶們的吐槽也以依次平息,沒人再提要離開了。

我們把鏡頭搖回這群技術宅,他們的打怪升級還在繼續。

就像一個人買彩票,一輩子都中不了獎,但是一千萬人一起買彩票,那就幾乎每期都會有人中獎。隨著騰訊雲上的客戶越來越多,原本發生機率非常非常低的問題,漸漸開始顯露。

這讓虛擬化團隊的遊戲難度陡然升為「變態模式」。

這不,2017年,新課題又來了。

事情還是出在老冤家——內存——身上。

如果把一台電腦比作人的話,內存就是人的短期記憶。你日常生活里做任何事,都要時刻查詢短期記憶。電腦也是一樣,所以內存經常被讀寫,讀寫的次數多了,就難免出現內存錯誤。

內存一錯誤,虛擬機就會宕機。虛擬機一宕機,客戶就抄刀。

可是人類目前的科技水平就是這樣,內存就是有一個極低的機率會錯誤。在這個前提下,有沒有辦法讓虛擬機依然不宕機呢?

還真讓他們找到了,解決的方案就在內存的好基友——CPU——里。

(三)深探 Intel

眾所周知,CPU 是一個計算系統的大腦,掌握著生殺予奪的大權。

我們假設一個場景:

今天上午同事告訴你有一家新開的快餐店很好吃,出門左拐不遠就到了。於是你把這個方位放在大腦的短期記憶(內存)里,決定午飯的時候去試試。

結果中午的時候,你剛出樓門,瞬間就給忘了同事說的是出門左拐還是右拐。此時你就發生了一個內存錯誤。

這個內存錯誤被迅速報告到你的大腦(CPU),這時你的大腦就懵逼了,你立刻站在原地。。。

剛才這個場景其實就模擬了內存錯誤時的情況。

一旦內存在運行過程中存儲發生錯誤,就會立刻彙報給 CPU,這時 CPU 為了防止錯誤繼續擴大,最穩妥的選擇就是先尬住,這就是死機。

日常查看技術資料的時候,陳立東突然發現,其實 CPU 的製造商 Intel 也注意到了這個問題,並且研究出來一個解決方案。

這個方案就叫做 MCA Recovery。

這個方案用白話解釋起來挺簡單:之前 CPU 的邏輯是,無論遇到什麼內存錯誤,都直接宕機。MCA Recovery 就是讓 CPU 在遇到內存報錯時先不要慌,抽根煙,對內存發生錯誤的嚴重性做一個判斷,如果判斷這個錯誤不會影響程序進程,就忽略掉這個錯誤,繼續運行;如果嚴重,再死不遲。

「踏破鐵鞋無覓處,得來全不費工夫!」陳立東正準備高興,突然發現備註里寫著一行小字,只有在4路和8路的伺服器里,Intel 才支持這個功能。(4路伺服器指的是在一台伺服器里有4顆 CPU。)

然鵝,騰訊雲的很多伺服器都是2路的,感覺有被忽略到。

沒有沒關係,我拿錢砸到你有。

在2016年,騰訊雲對 Intel 提交了定製晶片的訂單,裡面就明確了需求,要在2路伺服器上加入 MCA Recovery 功能。

半年之後,虛擬化團隊激動的心顫抖的手,終於拿到了定製 CPU。

放到測試環境里一試,結果感人:虛擬機還是想死就死,不給任何人留情面。。。

這群老司機愣在原地,為這個世界的不科學深深嘆服。

仔細尋找問題才發現,僅僅 CPU 支持了 MCA Recovery 還不管用,還要伺服器里的很多其他模塊跟著調整,虛擬化平台也需要大量修改適配。

問題是,當時這些伺服器都不是騰訊自己研發設計的,而是從供應商那裡買的。所以他們趕緊提出需求,讓供應商開發完整支持 MCA Recovery 的伺服器。

然而,由於 MCA Recovery 是新技術,不同的伺服器供應商「悟性」不同,有的支持得好,有的支持得屎。於是虛擬化團隊還專門編寫了一套測試軟體,告訴硬體採購的同事:以後通過這套測試的機器才能進入採購名單,不通過的一律不要。

站在現在回望, 這件事也堅定了騰訊雲自研伺服器的決心。當然這是後話。

這張照片就是後來騰訊雲自研的星星海伺服器。

折騰了幾個月,總算是伺服器都支持 MCA Recovery 了,這群老司機又發現,MCA Recovery 還是有很小的機率會在不該死機的時候死機。所有的證據都表明,問題出在 Intel 晶片裡面,需要了解晶片的內部處理機制才有機會進一步優化。

陳立東趕緊聯繫了 Intel 中國的技術人員,對方研究了一個禮拜,最後還是建議:「你們去一趟美國總部吧,跟晶片開發工程師直接聊聊。。。」

就這樣,陳立東和同事又買了去美國的機票,跟 Intel 的工程師當面「對質」。

在 Intel 總部,美國的技術宅也很坦誠,把晶片的內部邏輯都展示給陳立東他們,開誠布公地一起研究。果然,在 Intel CPU 設計 MCA Recovery 的時候,確實存在一些有待改進的空間。這些問題很隱秘,一般很難觸發,除非使用的機器足夠多。不巧,騰訊雲上的伺服器就足夠多。

中美兩波工程師還抽空合了影。

可是在了解了晶片內部邏輯之後,陳立東也發現,這個問題修復起來並不容易。

最後,兩撥工程師商量出一個方案:在 KVM 里把有可能觸發異常的邏輯禁用 ,提升 MAC Recovery 的成功率。

你看,內存錯誤發生的機率本來就不大。可就是為了搞定這個機率極低的宕機問題,這群技術宅定製了伺服器,又定製了 CPU,還去 Intel 美國總部殺了一遭,揪著晶片里幾個特定的迴路跟 Intel 工程師掰扯了一個底朝天,橫跨東西半球,才終於讓這個問題得以緩解。。。

就這樣,騰訊雲的穩定性指標,在小數點幾位之後,又增加了那麼一塊。雖然很多粗心的用戶甚至體感不到騰訊雲每年穩定性的提升,但是陳立東他們卻一刻不敢懈怠。

如今,這些代碼所承載的騰訊雲,已經不是可有可無的玩物,而是銀行、製造、商品流轉、衣食住行,是無數人的簞食瓢飲,是很多人的工作生計。每一行代碼都在悄無聲息地改變著這個社會的命運轉輪。

在我們的故事裡,「造夢師」們一步步把騰訊雲建造成夢想中的樣子,終於為自己迎來了榮耀時刻。

(四)吃自己的狗糧

2018年,騰訊集團做出了一個決定:吃自己的狗糧——騰訊內部所有業務,包括QQ、微信、遊戲等等全部切換到騰訊雲上。

這就是騰訊轟轟烈烈的「自研業務上雲」運動。

你可能有點納悶:咦,原來騰訊自己的業務都沒有在騰訊雲上啊。

你說得沒錯。對於騰訊來說,是先有的QQ、微信,再有的騰訊雲。所以那些較早的大業務其實並沒有使用騰訊雲,這是歷史原因造成的。

那麼,這些業務之前使用什麼作為底層計算力呢?使用的是物理機。

你還記得那個房子的比喻嗎?使用物理機,相當於自己蓋一座計算力的別墅,因為全是自家的,所以根本不用打隔斷,不用虛擬化。

現在全集團上雲,每個業務都得放棄自己的房子,進駐騰訊雲大廈里的一個個隔間,這樣既可以節省成本,又能依靠虛擬化技術「伸縮自如」的優勢增強業務彈性。

你可能會想,畢竟是兄弟部門,讓內部業務上騰訊雲應該很簡單吧。

呵呵你錯了,親兄弟才明算帳呢。

由於業務部門是從別墅遷移到大廈的隔間裡,自然會把現在和過去的體驗作對比。虛擬化虛擬化,畢竟是虛擬的,肯定在某些地方比不上真實的物理機。

其中有一個最主要的地方,叫做「性能損耗」。

簡單來說,在物理機里造出並維持虛擬機的夢境,是需要耗費一部分性能的。也就是說,在一台物理機上運行一台虛擬機,虛擬機的絕對性能是要低於物理機的。

假如虛擬機只有物理機性能的95%,我們就說它的虛擬化損耗是5%。至於此時此刻虛擬化損耗到底是多少,取決於跑在上面的應用是什麼。

按理說,全員上雲應該從比較小的業務開始。不過騰訊「藝高人膽大」。2018年第一個吃螃蟹的,就是最重磅的應用之一——微信。

為了判斷性能損耗有多嚴重,微信先拿了一部分虛擬機做測試。結果證明,微信的很多功能恰恰是對虛擬機很不友好的。在這種情況下,虛擬機的性能只能達到同樣物理機的70%,損耗達到了將近30%。也就是說原本100台物理機能搞定的事情,現在需要140台同等配置的虛擬機才能搞定。

微信的同事把測試結果的螢幕轉到陳立東面前:請開始你的解釋。

沒啥好解釋的。陳立東帶著同學們回到辦公室,重新來過。

團隊專門派出兩個最資深的老司機,就以微信為例,看看哪裡還有能降低虛擬化損耗的地方。

山重水複疑無路,柳暗花明又一村。他們發現 KVM 在虛擬化損耗方面的優化空間還是很大的。只不過降低虛擬化損耗這件事,恨不得比外科手術還要精細,其中的技術細節太高深。

不過為了滿足你的好奇心,這裡中哥還是簡單給你舉個例子:

KVM 下面連接物理機,上面連接虛擬機,再上面是作業系統。作業系統對 CPU 的某些操作,在虛擬機里是無法執行的,需要由 KVM 跳出到物理機層面執行。這個跳出跳入的過程,就造成了損耗。

而降低這種損耗的一種方法,就是具體分析這些指令,看是否可以把很多需要跳出執行的指令歸在一起執行,這樣就避免了頻繁的跳出跳入,從而讓系統減少負擔。就像你去超市之前先列一個清單,一趟就買齊,就會比頻繁往來超市節省時間。

類似這種邏輯,團隊發現了很多 KVM 的優化點,每做好一個優化就把微信的同事們拉過來測一次。果然,虛擬化損耗漸漸地從30%降到5%。

微信之後,很多應用都陸續來做上雲測試,提出了各種問題。我們沒白沒黑集中搞了半年以後,突然有一天,發現大家都沒什麼意見了。那一刻我知道我們成了,別提多高興了。

陳立東回憶。

於是,微信、QQ、王者榮耀、穿越火線等等你耳熟能詳的騰訊應用,開始了正式的「上雲大遷徙」。

騰訊轟轟烈烈的自研業務上雲,其實只是一個縮影。把鏡頭拉遠,是煙塵中的千軍萬馬,幾乎全中國的企業都在奮勇地跨越河流,從傳統的 IT 架構跳向雲計算的彼岸,成為更自信的數字中國的一部分。

正在讀文章的你,當然也是這一切的見證者。

有一件事不得不提。這些年為了改進騰訊雲的底層技術,虛擬化團隊積累了很多硬核代碼。他們陸續把這些改進都整理清晰,提交給了 KVM 開源社區。在過去的三年,騰訊雲團隊一直是 KVM 社區貢獻榜的中國區第一名。

在 KVM 大會上演講

僅僅在過去的2019年,騰訊提交了40個改進,其中Exitless Timers、Yield to IPI target、Per-VM cap to disable exits 等等都被認為是年度重大改進。騰訊雲毫無疑問地成為了 KVM 社區的重要貢獻力量。

之前中國人一直被開源社區詬病,認為我們總索取,不貢獻。客觀來說,我們確實有做得不好的地方。但我們希望用行動說話,為開源社區貢獻真正硬核的好東西,慢慢改變開源社區對中國的偏見。

陳立東說。

(五)靠「做夢」改變世界

2019年底,KVM 已經成為所有主流雲計算廠商的虛擬化方案。

同一時刻,在最新的行業報告中,騰訊雲市場份額位居中國第二,和領頭羊阿里雲的差距進一步縮小。考慮到騰訊在阿里之後才進入雲計算市場,這樣的成績值得讚嘆。

不過老司機的步伐絲毫沒有停止。

用了幾年時間,基本搞定了 Intel CPU 的虛擬化優化之後,他們又馬不停蹄地開始了 AMD CPU 的虛擬化優化,而基於更多種類 CPU 的虛擬化,也在他們的計劃之列。

你還記得當年非常困擾他們的「熱遷移」技術嗎?(就是那個一邊炒菜一遍移動煤氣灶的技術。。。)當年他們採用了「妥協方案」,而這幾年他們並沒有停止思考,最近他們終於解決了全部技術難題,正在仔細地寫新模塊的代碼。

陳立東告訴我,這個模塊也會貢獻給 KVM 社區,這之後,所有使用 KVM 的雲計算產品,就將會自動具備強大的熱遷移功能。

「把這些核心功能貢獻出來,不是給競爭對手增加武器嗎?」我問。

「雖然你說的也沒錯,不過我們不從這個角度想。KVM 正在成為這個世界雲計算的基座,我們的貢獻,是代表騰訊云為 KVM 社區做的。」陳立東說。

告別之後,我反覆回想這句話。

我從這句話里讀到了自信。而在漫長的歲月里,自信恐怕是最美的東西。但自信也像稀世的珍寶,只有跟世界死磕,滿身傷疤之後仍然傲視群雄,你才會擁有它。

這群老司機雖然沉默寡言,雖然屢遭挫敗,但好在從未想過停下腳步。他們把技術邊界向前一點點移動,把我們的計算力基座一毫一厘地壓實。

這麼重要的任務交在這群老司機手上,我感到很靠譜。

註:本文頭圖以及文中「內存錯誤」科普用到的三張圖修改自遊戲《沒有人知道的大冒險》,這是一款讓人感動的遊戲。它的作者同樣是一位愛做夢,想要改變,並且不輕易動搖的程式設計師。我自願為這個遊戲做個廣告,如果大家有能力的話,請去 Steam 多多支持啊。

轉載文章,請加微信:woshimantoujie

既然是做夢

乾脆做大點