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