站在風(fēng)暴中心:如何給飛奔中的騰訊更換引擎
騰訊自研上云之路
明敏 魚羊 發(fā)自 凹非寺
量子位 | 公眾號 QbitAI
2016年的一次改變,轉(zhuǎn)動(dòng)了科技大廠向前奔馳的方向盤。
其時(shí),一種興起于谷歌、名為“Kubernetes”的集群管理技術(shù)開始在全球范圍內(nèi)“野蠻生長”——
這種被簡稱為K8S的技術(shù),此后幾乎被外界視作云原生技術(shù)的代名詞。
身處國內(nèi)的技術(shù)弄潮兒們,自然也嗅到了這股技術(shù)熱浪的氣息。一個(gè)新的容器項(xiàng)目就此在騰訊云內(nèi)部悄然啟動(dòng)。
只是,打從事情一開始,爭執(zhí)和分歧其實(shí)已經(jīng)在技術(shù)團(tuán)隊(duì)內(nèi)部爆發(fā)……
項(xiàng)目主力于廣游,便身處風(fēng)暴眼中。
作為國內(nèi)最早接觸到K8S的一批人,于廣游和他的同事們很快敏銳地察覺到:這種新的云計(jì)算調(diào)度系統(tǒng),一定是個(gè)“大事情”,代表著未來技術(shù)發(fā)展的方向。
但就是這么個(gè)“大事情”,攤子剛剛鋪開,“往何處去”就成了大問題。
底層復(fù)雜的技術(shù)應(yīng)該被包裝成一個(gè)簡化的服務(wù),把K8S幾十個(gè)復(fù)雜的API都“藏”起來,做成一個(gè)只暴露一個(gè)接口的、封裝好的“黑盒子”,還是有別的選擇,成為團(tuán)隊(duì)技術(shù)人員的爭議點(diǎn)。
出于對K8S更深入的理解,于廣游這樣的“技術(shù)原教旨派”認(rèn)為,“K8S不應(yīng)該是一種面向終端用戶的產(chǎn)品啊。這個(gè)產(chǎn)品的更多是企業(yè)平臺用戶。與其把精力花在對K8S概念的包裝上,還不如做好開放、完整的K8S生態(tài)?!?/p>
盡管這樣的觀點(diǎn)在今天看來具有前瞻性,但在當(dāng)時(shí),要打破多年以來團(tuán)隊(duì)已然驗(yàn)證過的成熟“經(jīng)驗(yàn)”,去走一條看上去更復(fù)雜的路線,多少讓人感覺有些風(fēng)險(xiǎn)不可控。
怎么辦?
現(xiàn)在看來有些幸運(yùn)的是,盡管團(tuán)隊(duì)中有不少更為資深的技術(shù)人員,但在K8S這股剛吹入國內(nèi)的新風(fēng)面前,大家都算是從零開始,對新觀點(diǎn)的接受度也更高。
在于廣游等人的堅(jiān)持和反復(fù)游說之下,越來越多人意識到,面對K8S這樣火花越燃越旺的技術(shù),做正確的事或許比穩(wěn)妥更重要。
這個(gè)新容器項(xiàng)目的發(fā)展思路,也逐漸明確下來:
一個(gè)完全開放原生K8S API的騰訊云“引擎”。
而這,后來也成為了更大規(guī)模技術(shù)變革的契機(jī)。
路線最終按照于廣游的設(shè)想推進(jìn),但正確與否,在當(dāng)時(shí)恐怕并沒有人能100%確定。甚至連驗(yàn)證本身進(jìn)行得都沒有那么順利。
轉(zhuǎn)機(jī)在2018年出現(xiàn)。
2018年9月30日,騰訊進(jìn)行成立后第三次重大組織架構(gòu)調(diào)整。也就是在這次內(nèi)部變革之中,“自研上云”成為了騰訊技術(shù)發(fā)展的一大方向。
所謂自研上云,就是把騰訊內(nèi)部各自跑在不同數(shù)據(jù)中心的業(yè)務(wù)全部搬到騰訊云上。
包括于廣游團(tuán)隊(duì)所提供的騰訊版K8S在內(nèi),騰訊云打造一系列云上開發(fā)環(huán)境和功能組件,開始成為所有騰訊工程師能夠共同使用的“武器”。
對于開發(fā)者們而言,這也就意味著,無需再重復(fù)造輪子,開發(fā)流程也從手工時(shí)代進(jìn)入到自動(dòng)化時(shí)代:不需要自己去部署物理機(jī)、虛擬機(jī),擴(kuò)縮容也不需要再折騰機(jī)器的事,全部變成面向API的自動(dòng)化工作。
對于騰訊云團(tuán)隊(duì)而言,這樣的變化用一個(gè)詞來形容,就是“很爽”。
困境
但上云這件事,觸動(dòng)的顯然不僅僅只有騰訊云。
具體業(yè)務(wù)開發(fā)者,事情或許就沒有那么“爽”了。
光子歡樂游戲工作室技術(shù)總監(jiān)馬同星的團(tuán)隊(duì),就在上云之初倍感壓力。
彼時(shí),歡樂游戲工作室內(nèi)部打算對原有架構(gòu)進(jìn)行重構(gòu),以實(shí)現(xiàn)服務(wù)的彈性化和可拓展。
恰逢服務(wù)網(wǎng)格istio 1.1版本發(fā)布,兩套技術(shù)方案就這樣擺到了這個(gè)團(tuán)隊(duì)面前:
其一,是在原有架構(gòu)的基礎(chǔ)之上去增加功能,來實(shí)現(xiàn)自動(dòng)化的流量治理和服務(wù)發(fā)現(xiàn)。
其二,就是完全切換到云原生方案上,對原有架構(gòu)進(jìn)行云原生改造。
一開始,對于徹底重構(gòu)團(tuán)隊(duì)里不少同學(xué)憂心忡忡。原因很簡單,對于開發(fā)人員來說,項(xiàng)目運(yùn)營多年,原有的架構(gòu)是經(jīng)過檢驗(yàn)成熟穩(wěn)定的,開發(fā)者對其掌握的程度也比較高。
而云原生,并不是簡簡單單把舊的本地部署遷移到云端即可,相反,這個(gè)方案意味著一切都要遵循云上的技術(shù)標(biāo)準(zhǔn)從頭來過。
其中的業(yè)務(wù)風(fēng)險(xiǎn),不言自明。
這樣的技術(shù)疑慮,也非止一例。
同樣的情況,也令騰訊課堂研發(fā)中心負(fù)責(zé)人王昂和他的同事們心頭一緊。
王昂的團(tuán)隊(duì)脫胎于QQ,而QQ本身上線十多年、月活超過8億,早已具備成熟穩(wěn)定的技術(shù)架構(gòu)。
因此在2019年,面對騰訊課堂新的業(yè)務(wù)需求時(shí),是否自研上云就成為了技術(shù)團(tuán)隊(duì)需要艱難抉擇的問題。
從實(shí)用主義的角度來說,QQ那套老的技術(shù)棧依然能用,而且足夠穩(wěn)定,能保證新業(yè)務(wù)順利推進(jìn)。
相反,走自研上云的路線,不僅意味著開發(fā)人員需要學(xué)習(xí)新的技術(shù)棧、初期工作量大大提升,各種云上組件也尚未經(jīng)過充分的驗(yàn)證,很有可能給業(yè)務(wù)質(zhì)量帶來未知的影響。
只是在這樣的“不爽”之中,這些團(tuán)隊(duì)最終仍然選擇了攀登那條看上去更為艱難的路線。
原因也非常相似:
誠然,在高速狂奔的騰訊內(nèi)部,去做更換技術(shù)引擎這樣的事,組織上必然要承擔(dān)風(fēng)險(xiǎn)和挑戰(zhàn)。但是長遠(yuǎn)而言,無論是對技術(shù)人員個(gè)人的發(fā)展,還是對于團(tuán)隊(duì)業(yè)務(wù)的突破,都有非常大的價(jià)值。
王昂坦言:
“作為開發(fā)者,如果只把眼光聚焦在內(nèi)部自研的組件上,不僅有重復(fù)造輪子的問題,而且會越來越跟行業(yè)領(lǐng)先技術(shù)拉開差距。上云與否,短期來看或許沒有區(qū)別,但長期則會帶來研發(fā)效率的巨大差距。”
不過,與小說里那些英雄主義的橋段不同,克服抵觸的心境下定決心,還只是翻過了困境的序章。
上云的過程,正如開發(fā)人員們起初所預(yù)料的那般,遠(yuǎn)不能一帆風(fēng)順……
破局
如果說最初決定上云,是基于對行業(yè)技術(shù)趨勢的洞察。
那么,在經(jīng)歷過種種困境后仍不放棄,則因?yàn)槭巧显茙淼那袑?shí)好處,已經(jīng)開始在日常運(yùn)營中顯現(xiàn)。
歡樂游戲雖從2019年開始云原生重構(gòu)和平滑遷移,到2020年底仍有不少老舊模塊跑在云下。2021年春節(jié)前夕,歡樂游戲工作室與手機(jī)QQ聯(lián)動(dòng)做了一個(gè)活動(dòng),在春節(jié)零點(diǎn)時(shí)刻向用戶推送游戲的tips。
隨著大量用戶瞬間涌入游戲,讓活動(dòng)團(tuán)隊(duì)始料不及的事情發(fā)生了——
用戶排隊(duì)。
出現(xiàn)這樣的故障,運(yùn)營、非研發(fā)團(tuán)隊(duì)的同事其實(shí)很不理解。
“不是說系統(tǒng)能支持100、200萬人數(shù)在線嗎?怎么涌入50萬就不行了?”
馬同星用一個(gè)直白的例子作了解釋。
比如騰訊的辦公樓能夠支持5000人辦公,但是每天早晨電梯口還是會排很長的隊(duì)。為什么會這樣呢?
因?yàn)?000人指的是容量,但電梯能運(yùn)載多少人上樓指的是登入并發(fā)負(fù)載。
容量很大,并不能代表短時(shí)間內(nèi)處理能力可以很強(qiáng)。
回到業(yè)務(wù)本身來看。
假設(shè)某個(gè)業(yè)務(wù)每秒的部署能力是處理5萬請求,結(jié)果1秒鐘涌來了50001個(gè)用戶。
這意味著,1秒之后還有一個(gè)請求沒處理,可是到了下一秒又來了50001個(gè)用戶……以此類推,用戶的請求就會積累。
這種積累可能會導(dǎo)致有幾十萬用戶在排隊(duì),最終結(jié)果就是大量用戶的請求都會超時(shí)或者被系統(tǒng)丟棄。
因?yàn)榈扰诺剿臅r(shí)候可能已經(jīng)過去了5秒、10秒,這在專業(yè)上被稱為過載。
而出現(xiàn)這一問題更加深層的原因,是當(dāng)時(shí)還有部分業(yè)務(wù)沒有上云,沒有動(dòng)態(tài)彈性計(jì)算的能力。
要知道,用戶從登錄到進(jìn)入游戲這個(gè)流程,只要有一個(gè)卡點(diǎn)不能動(dòng)態(tài)伸縮,就會導(dǎo)致排隊(duì)。
怎么解決這一問題?
云原生重構(gòu),是馬同星向運(yùn)營團(tuán)隊(duì)給出的答案。
“我和運(yùn)營的小伙伴說,我們現(xiàn)在正在做一個(gè)大的技術(shù)重構(gòu)。”
“它的核心能力之一就是,如果一條路上只有1個(gè)人走,它能夠讓路變得很窄、節(jié)省資源;如果突然來了5萬人,它又可以把路變得很寬,讓這些人快速通過?!?/p>
在淺顯通俗的解釋下,運(yùn)營團(tuán)隊(duì)也很快理解了馬同星他們在做的事情,并切實(shí)感受到了云原生能為實(shí)際業(yè)務(wù)帶來哪些好處。
這個(gè)過程中,內(nèi)部團(tuán)隊(duì)之間的信任也悄然建立。
后續(xù),當(dāng)版本中有部分業(yè)務(wù)需要技術(shù)團(tuán)隊(duì)來做重構(gòu)時(shí),運(yùn)營團(tuán)隊(duì)能夠給予更多的理解,同時(shí)也很開心業(yè)務(wù)能夠上云。
而這樣的故事還只是上云過程中的一隅。
透過它也顯示出了上云時(shí)面臨的許多棘手問題。
比如涉及到的業(yè)務(wù)往往是大體量、高營收的,無法不管業(yè)務(wù)死活去“一刀切”做遷移。
再比如需要運(yùn)營、策劃團(tuán)隊(duì)也要懂研發(fā)團(tuán)隊(duì)在做什么事,建立團(tuán)隊(duì)之間的技術(shù)信任。
簡而言之,無論是馬同星還是王昂團(tuán)隊(duì)的經(jīng)歷,都說明了同一件事:上云不是一蹴而就。
回顧騰訊上云幾年來的經(jīng)歷,大致可以歸結(jié)出3方面經(jīng)驗(yàn)。
第一、研發(fā)團(tuán)隊(duì)通過試點(diǎn)項(xiàng)目做技術(shù)驗(yàn)證,建立團(tuán)隊(duì)信心;
第二、將不同業(yè)務(wù)逐步遷移上云,云上云下兩步走,保證在出現(xiàn)故障時(shí)能夠回滾;
第三、騰訊云團(tuán)隊(duì)與業(yè)務(wù)團(tuán)隊(duì)之間耐心磨合。
首先來看技術(shù)團(tuán)隊(duì)如何建立信心。
比如馬同星所在的歡樂游戲團(tuán)隊(duì)。
在最初決定遷移上云時(shí),他們就開始自己去搭設(shè)服務(wù)網(wǎng)格做技術(shù)驗(yàn)證,成功之后再把技術(shù)慢慢鋪開。
為此,馬同星團(tuán)隊(duì)用一個(gè)用戶體量較小的業(yè)務(wù)作為“試驗(yàn)田”。
驗(yàn)證期間,技術(shù)團(tuán)隊(duì)一邊趟平了大大小小的坑,另一方面還加深了對云原生的認(rèn)識和掌控,最初對上云的恐懼和顧慮也隨之消散不少。
其次,如何平滑上云是重中之重。
馬同星表示,我們期望的上云并不只是把業(yè)務(wù)直接搬到自研云里,而是從架構(gòu)層面的改變。
他們采用的遷移策略是先從相對不重要的服務(wù)入手,等出現(xiàn)的故障逐漸減少時(shí),再遷移核心服務(wù)。
同時(shí),為了保證“用戶無感知”,在新業(yè)務(wù)上云后,相應(yīng)的云下環(huán)境不會立刻裁撤,流量保留了自動(dòng)切回的能力,由此平穩(wěn)度過了波動(dòng)期。
最后,團(tuán)隊(duì)之間磨合也十分重要。
除了如上歡樂游戲研發(fā)團(tuán)隊(duì)和運(yùn)營團(tuán)隊(duì)之間信任建立的故事。
在騰訊課堂這邊,王昂也提到上云過程中一直和容器化、運(yùn)維等團(tuán)隊(duì)在密切溝通。
這主要是因?yàn)樵萍夹g(shù)方案更為領(lǐng)先,技術(shù)棧還沒有十分穩(wěn)定,所以不可避免需要更為耐心的磨合。
“基本上云的組件,我們提了三四百個(gè)issue和反饋?!?/p>
這樣大量的反饋溝通,是王昂此前從未經(jīng)歷過的。
在投入大量人力、物力上云的另一面,成果也已開始顯現(xiàn)。
截至目前,QQ產(chǎn)品、騰訊課堂已經(jīng)實(shí)現(xiàn)100%遷移上云。
今年,他們計(jì)劃將其余老業(yè)務(wù)也全部重構(gòu)上云,存量業(yè)務(wù)進(jìn)行遷移。
成長
今年,是“騰訊跑在騰訊云上”的第4個(gè)年頭。
業(yè)務(wù)發(fā)展愈加成熟,親歷上云的工程師、開發(fā)者們心態(tài)上也發(fā)生了不少變化。
比如于廣游,在親眼見證自己團(tuán)隊(duì)的產(chǎn)品成為騰訊重大技術(shù)變革的基底之后,開心的同時(shí),也慢慢“從技術(shù)原教旨主義者變成了一個(gè)更加務(wù)實(shí)的人”。
在自研上云前期,他對遇到的一些需求非常不能理解。比如要求自研上云需要原地重啟、需要指定POD去更新、需要做固定IP。
作為國內(nèi)最早一批接觸K8S的人,于廣游覺得這些要求都很“不云原生”。
畢竟K8S的理念是讓部署容器化的應(yīng)用簡單、高效,結(jié)果騰訊自研上云卻提出了一堆“亂七八糟”的需求。
但隨著自研上云的腳步往前邁進(jìn)1-2年后,于廣游慢慢發(fā)現(xiàn)在接觸外部客戶時(shí),他們也在提類似的需求。
由此他開始意識到,一些兼容特性的出現(xiàn)是有必要的。在此,他用VPC舉了個(gè)例子。
“比如VPC,它其實(shí)是為了讓云模擬IDC的網(wǎng)絡(luò)環(huán)境,是為了兼容企業(yè)上云之前傳統(tǒng)的網(wǎng)絡(luò)管理模式,所以VPC的出現(xiàn)本身就是為了降低企業(yè)遷移成本?!?/p>
而這正是云產(chǎn)品更為核心的演進(jìn)方向。
在直接使用價(jià)值之上,進(jìn)一步去降低企業(yè)遷移成本,才會吸引更多企業(yè)來上云。把云原生從一個(gè)小眾的前沿領(lǐng)域,逐漸變成一個(gè)覆蓋大眾需求的領(lǐng)域。
基于這樣的思考,于廣游表示自己之后看待技術(shù)問題開始從更加宏觀的角度出發(fā),并在自研上云中發(fā)現(xiàn)有更多創(chuàng)新可做。
馬同星團(tuán)隊(duì)有位專業(yè)能力強(qiáng)悍的資深工程師,甚至是因?yàn)樽匝猩显七@件事,才選擇繼續(xù)留在騰訊。
在負(fù)責(zé)工作室上云的開發(fā)和架構(gòu)設(shè)計(jì)之前,他一度覺得工作少了很多新鮮感。
但云原生架構(gòu)這一技術(shù),重新吸引了他的目光。
因?yàn)檫@將會改變騰訊原本的開發(fā)模式,各個(gè)團(tuán)隊(duì)不再自己重復(fù)“造輪子”,這個(gè)開發(fā)后臺也會更加開放。
全新的技術(shù)架構(gòu),打破了團(tuán)隊(duì)同學(xué)們的職業(yè)發(fā)展瓶頸。
而透過自研上云這件事,更讓大家感受到開源社區(qū)的意義所在。
現(xiàn)在,他希望隨著云原生的大潮,他和團(tuán)隊(duì)能夠?qū)夹g(shù)不斷迭代,為開源社區(qū)做出更多貢獻(xiàn)。
騰訊課堂研發(fā)中心的負(fù)責(zé)人王昂,則表示在上云過程中,“團(tuán)隊(duì)的技術(shù)焦慮得以緩解”。
作為從QQ團(tuán)隊(duì)一路走來的開發(fā)人員,他此前深刻意識到,騰訊內(nèi)部老技術(shù)棧穩(wěn)定、成熟的另一面,往往是與外界技術(shù)潮流的脫節(jié)。
這套技術(shù)棧會不會過時(shí)?研發(fā)人員僅在成熟技術(shù)上添磚加瓦,個(gè)人能力會不會掉隊(duì)?
這些問題在過去一段時(shí)間里,令王昂感到十分焦慮。
直到自研上云的變革到來,各個(gè)業(yè)務(wù)部門原本各自封閉的的“煙囪模式”被打破,他和團(tuán)隊(duì)成員才紛紛感到技術(shù)視野大大拓寬,在面對外部挑戰(zhàn)之時(shí),也更具技術(shù)自信。
盡管在自研上云最初,王昂對是否使用新技術(shù)棧,仍抱有過猶疑。但從結(jié)果來看,這一決定是正確的。
現(xiàn)在,王昂和同事們還有了新的“興趣愛好”:在騰訊內(nèi)網(wǎng)連載上云的技術(shù)經(jīng)驗(yàn)。據(jù)說追更的人還不少。
One More Thing
2021年五一前后,在核心業(yè)務(wù)基本上云后,歡樂斗地主項(xiàng)目組把團(tuán)建去處定在了江西武功山。
當(dāng)所有人徒步爬到山頂后,大家發(fā)現(xiàn)云是真的在腳下的。
后臺同學(xué)們紛紛激動(dòng)地發(fā)朋友圈:我們這才是真·上云的團(tuán)隊(duì)!
而這種情緒的自然流露,或許正是團(tuán)隊(duì)自身對于自研上云這件事,最發(fā)自內(nèi)心的認(rèn)同。
— 完 —