1996年,“云計(jì)算”概念問(wèn)世。2006年,亞馬遜正式推出AWS,隨后越來(lái)越多的企業(yè)開(kāi)始逐步接受“云計(jì)算”,并將應(yīng)用逐步遷移到云端,享受這一新型計(jì)算方式帶來(lái)的技術(shù)紅利。
在云原生概念、技術(shù)發(fā)展和普及之前,對(duì)于“云計(jì)算”的普遍理解是將舊的本地部署應(yīng)用程序直接遷移到云端。但正如Splunk首席技術(shù)咨詢Andi Mann所說(shuō):“你應(yīng)該以新的方式開(kāi)展新事物,或者將新的云原生應(yīng)用程序放入新的云基礎(chǔ)架構(gòu)中,或者通過(guò)拆分現(xiàn)有的單塊應(yīng)用來(lái)從頭開(kāi)始使用云原生原則重構(gòu)它們。”
云原生根本目的就是利用云上的便利,以及各種容器技術(shù),更高效穩(wěn)定地開(kāi)發(fā)應(yīng)用。如果應(yīng)用本身沒(méi)有基于“新”的云服務(wù)進(jìn)行重構(gòu),而是繼續(xù)采用“老”的架構(gòu),那么即使業(yè)務(wù)運(yùn)行沒(méi)有問(wèn)題,應(yīng)用也不能充分利用“新”的云運(yùn)行環(huán)境的能力。
技術(shù)人員只有對(duì)這些架構(gòu)以及圍繞這些架構(gòu)建立的技術(shù)棧、工具鏈、交付體系進(jìn)行升級(jí),依托于云技術(shù)棧將其重新部署、部分重構(gòu)甚至全部重寫,才能將應(yīng)用變成“云原生的”。
6月16日,騰訊宣布,內(nèi)部海量自研業(yè)務(wù)已實(shí)現(xiàn)全面上云,打造了國(guó)內(nèi)最大的云原生實(shí)踐。據(jù)統(tǒng)計(jì),近三年來(lái),騰訊的自研業(yè)務(wù)上云規(guī)模已經(jīng)突破5000萬(wàn)核,累計(jì)節(jié)省成本超過(guò)30億元。
在這個(gè)過(guò)程中,騰訊的技術(shù)、運(yùn)維、開(kāi)發(fā)人員,都圍繞著云原生開(kāi)始新一輪技術(shù)迭代,重新適應(yīng)云原生的環(huán)境。對(duì)技術(shù)人員本身而言,這也是他們學(xué)習(xí)成長(zhǎng)、蛻變的三年。
那些虐我的需求,后來(lái)都成為TKE的領(lǐng)先點(diǎn)
騰訊云容器團(tuán)隊(duì)專家工程師于廣游
“這些人是不是在故意搞我?”“他們根本就是不想云原生改造吧!”2019年的夏天,在被各個(gè)業(yè)務(wù)“亂七八糟”的需求狂轟亂炸后,于廣游深夜下班回家路上有時(shí)會(huì)萌發(fā)出這樣的想法。
彼時(shí)的于廣游,還是一位純粹的技術(shù)原教旨主義者,每當(dāng)談及“神圣”的容器調(diào)度技術(shù)K8s(Kubernetes),他的眼神里常會(huì)閃過(guò)教徒般的光芒。然而,這種對(duì)于K8s技術(shù)的無(wú)比熱愛(ài)和堅(jiān)信,在給于廣游帶來(lái)飛速成長(zhǎng)的同時(shí),也一度曾讓他輾轉(zhuǎn)難眠、陷入迷茫。
于廣游2015年通過(guò)校招進(jìn)入騰訊,起初做計(jì)算相關(guān)產(chǎn)品,負(fù)責(zé)騰訊云底層虛擬化相關(guān)工作。2016年,在社區(qū)大火的容器編排器K8s漸漸流傳至業(yè)界,他所在的團(tuán)隊(duì)內(nèi)部隨即也啟動(dòng)了容器項(xiàng)目。
沒(méi)有任何遲疑,他徑直跳進(jìn)了容器技術(shù)的“海洋”。國(guó)內(nèi)外社區(qū)論壇、各路技術(shù)大牛博客、前沿技術(shù)交流會(huì)等等,都成為他獲取云原生、容器、K8s相關(guān)知識(shí)的入口。在厚重的資料里“大快朵頤”后,于廣游建立了自己的K8s哲學(xué),一度牢不可破。
作為國(guó)內(nèi)最早一批接觸K8s的開(kāi)發(fā)者,他隨著團(tuán)隊(duì)容器項(xiàng)目共同成長(zhǎng),打造了國(guó)內(nèi)最早的基于K8s的容器平臺(tái)——騰訊云容器服務(wù)(Tencent Kubernetes Engine,TKE)。
2017年TKE開(kāi)始對(duì)外提供服務(wù),但一個(gè)尷尬的“夾生”場(chǎng)景也擺在于廣游團(tuán)隊(duì)面前:一方面要給客戶提供先進(jìn)的云原生產(chǎn)品,但自己的研發(fā)環(huán)境卻依然是傳統(tǒng)物理機(jī)、非DevOps的研發(fā)模式;另一方面,客戶問(wèn)及騰訊自己的業(yè)務(wù)有沒(méi)有使用TKE時(shí),團(tuán)隊(duì)總是沒(méi)有足夠的信心回應(yīng)。
于是,當(dāng)于廣游在2018年第一次聽(tīng)到公司要自研上云時(shí),他直呼“爽!我自己也可以用云技術(shù)了”,“公司終于可以不被吐槽‘技術(shù)沙漠’了”。但是,騰訊很多業(yè)務(wù)最初只是停留在使用云上虛擬機(jī)的“上云”,又讓于廣游心急如焚,如此一來(lái),既不能完全享受到云的核心好處,也會(huì)造成技術(shù)割裂。
好在騰訊技術(shù)和業(yè)務(wù)領(lǐng)導(dǎo)團(tuán)隊(duì)也深諳其中道理,經(jīng)過(guò)一次又一次充分且扎實(shí)的溝通討論,騰訊關(guān)于自研上云的計(jì)劃終于在2019年初達(dá)成統(tǒng)一:不僅要上虛擬機(jī),還要推進(jìn)云原生。
在后來(lái)的騰訊運(yùn)營(yíng)管理大會(huì)上,于廣游所在團(tuán)隊(duì)向騰訊各BG匯報(bào)了基于TKE的云原生上云方案,建議各BG將自研的PaaS平臺(tái)切到基于K8s的TKE上。
于廣游在興奮之余尚沒(méi)有意識(shí)到的是,他即將進(jìn)入一種“冰火兩重天”的境地,一方面數(shù)百個(gè)業(yè)務(wù)浩浩蕩蕩地進(jìn)行云原生改造,另一方面“亂七八糟”的需求接連挑戰(zhàn)他的K8s認(rèn)知,壓得他幾乎崩潰:“是不是故意在搞我?”
比如,微信自研的調(diào)度平臺(tái)叫YARD,它和TKE一個(gè)顯著區(qū)別就是每個(gè)容器對(duì)應(yīng)的IP是固定的,從而可以充分保證服務(wù)穩(wěn)定。那么切換到TKE上,能不能繼續(xù)做到這一點(diǎn)?這讓于廣游一個(gè)頭兩個(gè)大:“固定IP是不云原生的,這違背了K8s中Pod應(yīng)當(dāng)是Cattle而非Pet的基本原則?!?/p>
所謂“Pod應(yīng)當(dāng)是Cattle而非Pet”,是指業(yè)務(wù)在出現(xiàn)問(wèn)題時(shí),容器應(yīng)該像牲口一樣可以被隨時(shí)拋棄(刪除重建),而不是像物理機(jī)、虛擬機(jī)那樣被當(dāng)作寵物精心呵護(hù)(更改配置)。當(dāng)然,在跟業(yè)務(wù)團(tuán)隊(duì)開(kāi)過(guò)幾十場(chǎng)會(huì)以后,理性的他自然知道業(yè)務(wù)側(cè)并非有意為難。在物理機(jī)時(shí)代,IP本身就是設(shè)備的固有屬性之一,部分業(yè)務(wù)系統(tǒng)依賴固定IP也是自然而然的。
于廣游們當(dāng)時(shí)“捏著鼻子”把這些固定IP、服務(wù)原地變更等“不云原生的”特性都做完了。此外,TKE團(tuán)隊(duì)還和游戲團(tuán)隊(duì)一起,做了適合Windows的容器;和微信團(tuán)隊(duì)做了多地三園區(qū)的高可用容器調(diào)度架構(gòu)等等,解決了一系列繁雜的問(wèn)題。
度過(guò)“痛苦”的2019年之后,回頭再看,“原來(lái)之前虐我的那些東西,竟然都變成我們TKE最領(lǐng)先的技術(shù)點(diǎn)?!庇趶V游說(shuō),他對(duì)云原生、對(duì)“業(yè)務(wù)定制化”需求有了全新的認(rèn)識(shí),一方面,所謂定制化需求其實(shí)都是業(yè)務(wù)切切實(shí)實(shí)存在的需求,不滿足這些需求業(yè)務(wù)就無(wú)法便捷地遷移上來(lái);另一方面,定制化需求很多時(shí)候是首次被提出的需求,其背后也具備普適性。
尤其是當(dāng)酷狗音樂(lè)、微眾銀行等外部客戶,也提出固定IP等需求的時(shí)候,更讓于廣游如夢(mèng)初醒。內(nèi)部海量業(yè)務(wù)的“定制化”需求,實(shí)際上成為TKE產(chǎn)品創(chuàng)新的原動(dòng)力,由此也實(shí)現(xiàn)了內(nèi)部自研業(yè)務(wù)上云反哺騰訊云的功能。
當(dāng)然,在結(jié)合業(yè)務(wù)需求進(jìn)行功能創(chuàng)新的過(guò)程中,于廣游團(tuán)隊(duì)始終堅(jiān)持不破壞K8s的核心本質(zhì),例如可以擴(kuò)展K8s支持原地變更,但不能違背“不可變基礎(chǔ)設(shè)施”原則?!熬腿缤首?,可以有三條腿、四條腿,也可以有靠背、有扶手,外形千變?nèi)f化,但它的核心本質(zhì)是凳子,是用來(lái)坐的?!?/p>
于廣游牢不可破的技術(shù)哲學(xué)觀在海量實(shí)踐中獲得刷新:“原本我認(rèn)為技術(shù)應(yīng)該義無(wú)反顧地向前瞻的方向邁進(jìn)。但事實(shí)上我們發(fā)現(xiàn),任何一個(gè)技術(shù)被創(chuàng)造出來(lái),首先會(huì)在最適合它的細(xì)分場(chǎng)景落地,并不斷發(fā)展,相對(duì)成熟之后開(kāi)始同時(shí)朝著普適化,也就是兼容舊架構(gòu)、支持更多場(chǎng)景的方向去持續(xù)演進(jìn)?!?/p>
于廣游拿云計(jì)算演進(jìn)技術(shù)舉例,比如云計(jì)算已然提出虛擬機(jī),可是行業(yè)也紛紛產(chǎn)出裸金屬,看起來(lái)像是在開(kāi)技術(shù)演進(jìn)的倒車。“其實(shí)不是,任何技術(shù)都不是徑直往前走的,而是同一個(gè)象限中的每項(xiàng)技術(shù)既要向前推進(jìn)又要往后兼容。云原生技術(shù)也是如此,這才能煥發(fā)出更強(qiáng)的生命力?!?/p>
正如于廣游自己的豁然開(kāi)朗一樣,騰訊的自研上云進(jìn)程也揚(yáng)帆遠(yuǎn)航。2020年,騰訊各大業(yè)務(wù)基本都上到TKE,2021年后開(kāi)始進(jìn)一步解決業(yè)務(wù)使用質(zhì)量的問(wèn)題,為了幫助大家把云原生用得更好,騰訊云團(tuán)隊(duì)、運(yùn)營(yíng)管理團(tuán)隊(duì)以及TKE團(tuán)隊(duì)推出了云原生成熟度評(píng)估平臺(tái)。
云原生上云促使云支撐環(huán)境跟公司的開(kāi)發(fā)環(huán)境完全打通,整個(gè)開(kāi)發(fā)流程都發(fā)生了變化,一切面向手工的工作,變成面向API的工作,從手工時(shí)代進(jìn)入了自動(dòng)化時(shí)代。之前研發(fā)需要自己去購(gòu)買和部署物理機(jī)、虛擬機(jī),擴(kuò)縮容需要再買機(jī)器、再部署,現(xiàn)在已全部自動(dòng)化、DevOps化了。
經(jīng)此一役,如醍醐灌頂,于廣游從一個(gè)純粹的技術(shù)原教旨主義者轉(zhuǎn)變?yōu)橐粋€(gè)更求真務(wù)實(shí)的人,對(duì)云技術(shù)演進(jìn)的思考開(kāi)始慢慢加深——任何一個(gè)云產(chǎn)品不單要給用戶提供直接的使用價(jià)值,它更核心的演進(jìn)方向是如何降低企業(yè)的上手門檻與遷移成本、如何讓更多的企業(yè)在更多的場(chǎng)景用起來(lái),也即從一個(gè)聽(tīng)起來(lái)很高大上的技術(shù)變成我們每個(gè)人都用得起來(lái)的、實(shí)實(shí)在在的身邊的技術(shù)。
自研上云,“治愈”技術(shù)焦慮
騰訊課堂研發(fā)中心負(fù)責(zé)人王昂
“拋開(kāi)QQ的光環(huán),我們還有什么?”
多年以前,每參加一次外部的前沿技術(shù)分享,年輕的QQ后臺(tái)開(kāi)發(fā)工程師王昂,就在心里拷問(wèn)自己一次。
那是他2013年畢業(yè)后進(jìn)入騰訊的頭幾年,QQ上線十余年,月活超過(guò)8億,如日中天。
而在業(yè)務(wù)這一龐然大物之下,王昂日日夜夜面對(duì)的技術(shù)架構(gòu)體系,正在被外部先進(jìn)的技術(shù)理念拉開(kāi)距離。假以時(shí)日,這套技術(shù)架構(gòu)必然會(huì)和前沿技術(shù)脫軌。而他本人包括他所在的團(tuán)隊(duì),也將被淹沒(méi)在技術(shù)浪潮之中。
現(xiàn)實(shí)對(duì)他的失落報(bào)以冷漠。這套QQ的技術(shù)架構(gòu)穩(wěn)定地屹立在他面前,而且表現(xiàn)優(yōu)異,它依然可以撐起高企的并發(fā)流量,依然可以撐起日益復(fù)雜的業(yè)務(wù)需求,毫無(wú)萎靡的跡象。
只是,外面明明還有更好的技術(shù)架構(gòu)理念,有更好的開(kāi)源組件,有更飽滿的精神世界。
懷揣“可望不可及”的焦慮感,王昂迎來(lái)2018年。騰訊在這一年進(jìn)行“930變革”后開(kāi)始摸索自研業(yè)務(wù)上云,CSIG(云與智慧產(chǎn)業(yè)事業(yè)群)成立后,他所在的團(tuán)隊(duì)也被劃入其中,開(kāi)始做教育相關(guān)的產(chǎn)品,其中就包括知名的綜合性在線學(xué)習(xí)平臺(tái)騰訊課堂。
老團(tuán)隊(duì),新業(yè)務(wù)。“這套技術(shù)架構(gòu)體系怎么搭建?”團(tuán)隊(duì)每個(gè)人心中都泛起了漣漪,“省點(diǎn)兒力氣,繼續(xù)沿用QQ成熟穩(wěn)定的老技術(shù)棧?還是向落后的自己告別,靠向騰訊云的新技術(shù)棧?”
選擇難而正確的路需要勇氣,王昂坦言。從實(shí)用主義角度來(lái)看,老技術(shù)棧依然能用,而且足夠穩(wěn)定,不會(huì)對(duì)業(yè)務(wù)造成影響。如果向新技術(shù)棧靠攏,學(xué)習(xí)成本、工作量將會(huì)大幅增加,不僅會(huì)犧牲日常產(chǎn)出,甚至?xí)驗(yàn)榻M件不夠成熟而被業(yè)務(wù)挑戰(zhàn)。
沒(méi)有人愿意選擇止步不前,猶豫、糾結(jié)沒(méi)有持續(xù)太久。不過(guò)業(yè)務(wù)的挑戰(zhàn)也如約而至。在切云上新技術(shù)棧過(guò)程里,有一次騰訊課堂的很多用戶評(píng)論出現(xiàn)亂碼展示,在被業(yè)務(wù)挑戰(zhàn)后,王昂團(tuán)隊(duì)馬不停蹄地連日定位,最終發(fā)現(xiàn)是云上跟云下的數(shù)據(jù)庫(kù)某一個(gè)配置沒(méi)有對(duì)齊。
不過(guò),王昂他們沒(méi)有成為驚弓之鳥(niǎo)。于是我們看到這樣一番景象:為了不因業(yè)務(wù)挑戰(zhàn)而中斷技術(shù)棧的“移髓換骨”,王昂他們小心翼翼地?fù)杆械募?xì)節(jié),用更長(zhǎng)的時(shí)間做灰度測(cè)試,在一個(gè)容器、一個(gè)Pod網(wǎng)絡(luò)不穩(wěn)定的情況下,去反復(fù)做前端的重試和容災(zāi),在前期使用云數(shù)據(jù)庫(kù)組件的時(shí)候,為防萬(wàn)一他們會(huì)多加一些緩存的Redis的Catch……
當(dāng)然在上云的過(guò)程中,王昂和團(tuán)隊(duì)不是孤軍奮戰(zhàn)。就上云組件的細(xì)節(jié),他們和騰訊云的產(chǎn)品部門進(jìn)行了大量磨合,一年下來(lái)共同解決了近400個(gè)問(wèn)題,雙方就容器、運(yùn)維、音視頻等組件進(jìn)行了持續(xù)交流,既完善了騰訊云的技術(shù)棧,也保障了騰訊課堂的上云過(guò)程。
于是,一年多后的2019年,從最初核心的直播、點(diǎn)播體系,到機(jī)器、網(wǎng)絡(luò)等底層IaaS,以及跟業(yè)務(wù)邏輯相關(guān)的MySQL、Redis、MQ等組件,騰訊課堂已是徹底的騰訊云技術(shù)棧。
緊接著,王昂團(tuán)隊(duì),又借助騰訊云的TKE平臺(tái),將技術(shù)架構(gòu)進(jìn)一步優(yōu)化,實(shí)現(xiàn)容器化編排能力,擁有了云上自動(dòng)擴(kuò)縮容的能力,而這也為后來(lái)的故事埋下伏筆。
云上豐富的行業(yè)標(biāo)桿組件能夠帶來(lái)很多益處。“舉一個(gè)最簡(jiǎn)單的例子,老技術(shù)棧用CKV,Value只支持一種數(shù)據(jù)結(jié)構(gòu),完成業(yè)務(wù)邏輯必須要寫一堆業(yè)務(wù)邏輯代碼,然后把代碼序列化后再填到CKV的數(shù)據(jù)結(jié)構(gòu)里去。但是如果用現(xiàn)在的KV系統(tǒng)Redis,它的數(shù)據(jù)結(jié)構(gòu)非常豐富,只需要寫很少的代碼就能實(shí)現(xiàn)相同的業(yè)務(wù)需求?!蓖醢赫f(shuō),這樣能夠有更多的時(shí)間聚焦在業(yè)務(wù)架構(gòu)上,可以高效滿足更多的業(yè)務(wù)需求。
2020年初,新冠肺炎疫情開(kāi)始對(duì)經(jīng)濟(jì)社會(huì)造成持續(xù)影響。而騰訊課堂流量也隨著疫情反復(fù)大幅度波動(dòng),高峰期訪問(wèn)量可以達(dá)到平時(shí)的100倍。
如果是之前的架構(gòu),一定是需要兩三天提前申請(qǐng)資源后手動(dòng)擴(kuò)容運(yùn)維,而在容器化部署與彈性擴(kuò)縮容的支撐下,騰訊課堂可以自動(dòng)流暢擴(kuò)容,釋放大批人力的同時(shí),憑借穩(wěn)定流暢的表現(xiàn)也得到了業(yè)務(wù)部門的認(rèn)可。
回憶2018年,“拋開(kāi)騰訊的技術(shù)煙囪、重復(fù)造輪子不談,僅僅從一個(gè)開(kāi)發(fā)工程師個(gè)人成長(zhǎng)而言,如果不去主動(dòng)靠齊行業(yè)最領(lǐng)先的技術(shù)棧,不跟著云或者不跟著開(kāi)源走,而是在騰訊內(nèi)部‘閉門造車’,在老的技術(shù)棧上修修補(bǔ)補(bǔ),那個(gè)人的價(jià)值將僅僅只是一名合格的騰訊開(kāi)發(fā)工程師?!蓖醢赫f(shuō)。
推動(dòng)自研上云的過(guò)程中,王昂和團(tuán)隊(duì)成員接觸了大量?jī)?yōu)秀的開(kāi)源組件,技術(shù)視野變得更加開(kāi)闊,并且能夠?qū)⑶把丶夹g(shù)應(yīng)用在業(yè)務(wù)當(dāng)中,“技術(shù)焦慮”的低氣壓從團(tuán)隊(duì)中慢慢散去,他們將推動(dòng)上云的技術(shù)經(jīng)驗(yàn)在騰訊內(nèi)網(wǎng)分享,在行業(yè)技術(shù)大會(huì)上輸出,獲得了內(nèi)外同行們的廣泛認(rèn)可。
2021年,王昂晉升騰訊課堂研發(fā)負(fù)責(zé)人。在工作9年后晉升到這個(gè)位置,速度堪稱飛快。除了扎實(shí)的開(kāi)發(fā)能力、對(duì)技術(shù)本身的熱愛(ài),推動(dòng)自研上云的經(jīng)驗(yàn)也是他受到技術(shù)與業(yè)務(wù)部門兩方面認(rèn)可的重要原因。
說(shuō)給(云原生)開(kāi)發(fā)者的話
引用騰訊一名開(kāi)發(fā)者的話作為收尾:
“云原生技術(shù),是否會(huì)革了開(kāi)發(fā)者的命?一個(gè)技術(shù)出來(lái)的時(shí)候,命是一定會(huì)被革的,區(qū)別就是你革命,還是別人革你的命,沒(méi)的選擇。我們沒(méi)有辦法做到來(lái)控制技術(shù)的發(fā)展,那我們先來(lái)革命好了,因?yàn)樵缤頃?huì)發(fā)生的。”