12月2日消息,今日火山引擎云產(chǎn)品發(fā)布會上,字節(jié)跳動副總裁、火山引擎業(yè)務(wù)負(fù)責(zé)人楊震原發(fā)表演講,總結(jié)了其對于字節(jié)跳動建設(shè)IT基礎(chǔ)的思考和洞察。
他談到,過去9年,字節(jié)跳動持續(xù)建設(shè)IT基礎(chǔ)能力。如今,已經(jīng)實現(xiàn)每天新增1500個AB實驗和2萬次線上變更,3周完成設(shè)計和上線新App,曾在27天內(nèi)備戰(zhàn)完成春晚紅包項目。
今天火山引擎云產(chǎn)品發(fā)布會的主題是“新云,共未來”,不管是新朋友還是老朋友,大家都知道我們要發(fā)布云產(chǎn)品。火山引擎是字節(jié)跳動技術(shù)能力的輸出。火山引擎的云產(chǎn)品,也是基于字節(jié)跳動的理念和實踐來建設(shè)的。今天我要跟大家分享的,就是字節(jié)跳動在發(fā)展的歷程中是怎么建設(shè)云的。
IT基礎(chǔ)建設(shè)的目標(biāo):敏捷
要講這個話題就要回到很多年前。當(dāng)時我們公司還很小,主要有一個核心產(chǎn)品今日頭條。
按照公司一直以來的做事風(fēng)格,我們在討論IT基礎(chǔ)建設(shè)時,首先就在討論,我們的目標(biāo)是什么。直到現(xiàn)在我還記得很清楚,我們定下來的核心目標(biāo)就是敏捷,就是要快。
當(dāng)時,今日頭條是一個全新的移動互聯(lián)網(wǎng)產(chǎn)品,我們有著去建設(shè)全球最大內(nèi)容分發(fā)平臺的愿景。我們每天都會有很多想法、很多討論,包括內(nèi)容體裁、創(chuàng)作工具、產(chǎn)品交互、推薦算法等等,每天都在變。如果這些想法能更快實驗、更快發(fā)布,就會給公司帶來很強的競爭力。如果有想法但不能快速上線,就會給公司發(fā)展造成很大的風(fēng)險。
我們實現(xiàn)了敏捷的目標(biāo),產(chǎn)品增長很快,大家覺得建設(shè)敏捷的IT基礎(chǔ)效果很好。這個理念一直延續(xù)到現(xiàn)在。
但是,只關(guān)注敏捷是不行的,因為還有很多問題。我們需要考慮到穩(wěn)定性、綜合成本,不能說做得非常快,但成本很高;
還要考慮到運維的復(fù)雜度等等。實現(xiàn)敏捷目標(biāo)的同時,不能讓穩(wěn)定性等問題成為短板。
在介紹我們怎么做云之前,首先分享一些案例。
外界有些人說字節(jié)跳動好像是一家App工廠,雖然并不準(zhǔn)確,但我們做產(chǎn)品確實是非常快的。有些新的產(chǎn)品從開始有想法,我們決定要做,只用三周時間就能發(fā)布上線,這個基礎(chǔ)就是圍繞著敏捷目標(biāo)建設(shè)的云。
再分享一個案例。去年距離除夕只有27天的時候,我們的產(chǎn)品技術(shù)團隊收到了參加央視春晚紅包互動的通知。這個活動很復(fù)雜,有很多環(huán)節(jié)。
大家也知道,春晚是一個突發(fā)用戶量非常大的事情,只有27天的時間,要做方案的設(shè)計、資源的準(zhǔn)備、產(chǎn)品開發(fā)上線,最后我們順利完成了這個工作。而在以前,這類活動一般都會有3個月的準(zhǔn)備時間,而且都是互聯(lián)網(wǎng)大廠在有很多資源準(zhǔn)備的情況下完成的。
再列一些數(shù)據(jù)。第一個是數(shù)據(jù)中心的天級部署。這是什么概念?當(dāng)我們交付了一個新的數(shù)據(jù)中心,我們的物理服務(wù)器上架聯(lián)網(wǎng)之后,部署業(yè)務(wù)以及切流,只要一兩天就可以完成。這也是因為我們自建數(shù)據(jù)中心,以及在全球范圍內(nèi)用了很多云的供應(yīng)商,不斷遷移,鍛煉出了這一套能力。
第二個數(shù)據(jù),我們每天線上變更是兩萬次。云的能力,讓業(yè)務(wù)有非常靈活調(diào)整的空間。
第三個數(shù)據(jù)是我們每天新增大約1500個A/B測試,說明我們有很多想法的時候可以快速驗證,就會產(chǎn)生進(jìn)化。我再舉個例子,假設(shè)有兩家公司,他們的方向一致,戰(zhàn)略水平也差不多,如果一家公司每個星期能做10個A/B測試,驗證10個想法,另一家公司每個星期只驗證1個想法,可以想象經(jīng)過半年之后,兩家公司會拉開多大的差距。
所以說當(dāng)方向、戰(zhàn)略差不多的情況下,敏捷就是決定競爭力的關(guān)鍵因素。
如何做到敏捷開發(fā)?
首先是對業(yè)務(wù)有宏觀設(shè)計,對整體架構(gòu)做合理分層。因為不可能所有地方都敏捷,一些更偏應(yīng)用、更頻繁改動的部分需要敏捷,一些基礎(chǔ)的模塊需要更穩(wěn)定、更高性能。
我們要對業(yè)務(wù)有宏觀的設(shè)計,這樣可以把不同子系統(tǒng)放到對應(yīng)的位置上去。如果胡子眉毛一把抓,什么地方都想快,這是錯誤的,而且也是很難實現(xiàn)的。
有了宏觀的設(shè)計,接下來說具體的實現(xiàn)方法:第一是微服務(wù)化,拆更小的服務(wù)單元,從開發(fā)上就可以有利于快速地變更,這些服務(wù)單元能夠在很多業(yè)務(wù)系統(tǒng)中靈活組合,以及多人并行開發(fā)。
微服務(wù)是提高開發(fā)效率非常重要的一點。
第二個是容器化,這個概念我相信在座各位都比較了解。容器對于運維體系來講有點像集裝箱對于貨運,可以解決環(huán)境部署的問題、隔離的問題、資源分配的問題。容器本身的開銷可控,未來還有進(jìn)一步提高靈活性的空間,以及重組的空間。
是不是有這些技術(shù)之后就很美好了?我想說的是,從實踐來看,問題才剛剛開始。
比如說運維、質(zhì)量和發(fā)布體系的問題。有了大量的微服務(wù),一旦有一個服務(wù)出問題,會導(dǎo)致故障的影響面不可控,排查很麻煩。做過運維的同學(xué)會了解,有可能會產(chǎn)生服務(wù)雪崩。
另外,當(dāng)我們想擴容的時候,怎么樣在一條服務(wù)鏈路的依賴體系下比較自動地擴容,還有灰度發(fā)布問題,還有很多其他的問題。如果這些問題處理不好,你會發(fā)現(xiàn)你的發(fā)布是變快了,但維護(hù)代價也在成倍增加,漸漸的就敏捷不起來了。
所以我們做了大量投入,建設(shè)完善的DevOps體系,包括持續(xù)集成的流程、平臺、線下測試環(huán)境、灰度發(fā)布、全面的監(jiān)控系統(tǒng)、容災(zāi)系統(tǒng)、故障半徑分析與治理、自動縮擴容等。
直到今天我們還一直在做,就是讓開發(fā)人員更關(guān)注業(yè)務(wù)本身,其他麻煩事兒讓平臺解決。
第二個是存儲的易用性問題。微服務(wù)化之后,存儲成為限制敏捷開發(fā)的一個關(guān)鍵因素。
存儲是一個技術(shù)很復(fù)雜的領(lǐng)域,專業(yè)性很強,目前還沒有一種可以應(yīng)用于各個領(lǐng)域的存儲技術(shù),我們需要建立一套產(chǎn)品矩陣來滿足需求。
通過存儲計算分離、架構(gòu)改進(jìn)、容器化部署、自動運維工具等等,來達(dá)成更優(yōu)的存儲方案。
第三是性能優(yōu)化。前面做了這么多敏捷、自動幫助開發(fā)者降低成本的事情,都是有代價的,性能損失就是其中之一。如果不去改進(jìn),從系統(tǒng)延遲和綜合成本兩方面,都會遇到挑戰(zhàn)。
我們做了大量的性能優(yōu)化工作。
經(jīng)過多年的技術(shù)實踐,我們的在線微服務(wù)數(shù)量超過10萬,這是指微服務(wù)的類型,確實是很大的一個數(shù)字,我自己都覺得可能有點太大了;
我們?nèi)萜鲗嵗渴鸬囊?guī)模大概是1000萬的量級,應(yīng)該是國內(nèi)容器規(guī)模最大的企業(yè)之一,目前我還沒聽到過其他企業(yè)公布過更大的數(shù)字。我們在微服務(wù)和容器的使用上是非常極致的。
云原生理念的實踐
我剛才講的字節(jié)跳動建設(shè)云的實踐,和云原生概念是非常契合的。
云原生這個概念,也火了很多年了。它的本質(zhì)是什么?我自己感覺,云原生就是軟件研發(fā)體系向前發(fā)展的一個過程。
大家想下,計算機剛剛被發(fā)明的時候,人們寫機器代碼太麻煩了,程序員都怕麻煩,于是有了高級編程語言,編譯器;
人們自己定義各種數(shù)據(jù)存儲格式,讀寫存儲非常麻煩,還容易出錯,于是有了數(shù)據(jù)庫;人們已經(jīng)寫了軟件,想用的時候,還得買機器,租機房,部署網(wǎng)絡(luò),太麻煩了,于是有了云計算。
那么,現(xiàn)在還有哪些事情太麻煩?還有很多,我上面提到了一些問題,其實現(xiàn)在也還有很大的進(jìn)步空間。
所以,我覺得云原生,就是考慮云上的軟件開發(fā)、維護(hù)全流程,去改進(jìn)各個子系統(tǒng),目標(biāo)就是讓開發(fā)人員更聚焦在業(yè)務(wù)本身,讓云平臺去解決其他的“麻煩事兒”。
基于敏捷開發(fā)的理念,字節(jié)跳動不斷改進(jìn)系統(tǒng),就是希望讓開發(fā)人員更聚焦在業(yè)務(wù)。這讓我更加相信云原生這個理念,因為這個理念是有實踐基礎(chǔ)的。
高密度計算、數(shù)倉與底層硬件探索
接下來再分享下我們在云實踐過程中的三點經(jīng)驗。
第一點是高密度計算。業(yè)務(wù)系統(tǒng)有很多類型,有些系統(tǒng)用非常敏捷的方式是好的。另外有些系統(tǒng)比如推薦、搜索、廣告、視頻理解,這些系統(tǒng)的計算密度很高,服務(wù)粒度要稍微大一點。
當(dāng)我們在這些系統(tǒng)上做敏捷的時候,可能要選擇用插件化的方式去加速它的開發(fā)和迭代,這是一類高密度計算的問題。
第二點,數(shù)倉的問題。字節(jié)跳動的核心技術(shù)理念是數(shù)據(jù)驅(qū)動和敏捷開發(fā),我們需要全面的數(shù)據(jù)平臺。我在2014年初剛?cè)肼毜臅r候,發(fā)現(xiàn)公司已經(jīng)有一個小時級可以看到結(jié)果的A/B測試平臺,之后我們也一直都在踐行數(shù)據(jù)驅(qū)動理念,讓新的產(chǎn)品發(fā)布、新的功能可以很方便地做A/B測試。所以我們在敏捷開發(fā)的同時,需要保證數(shù)據(jù)平臺有很高的數(shù)據(jù)準(zhǔn)確性、一致性、穩(wěn)定性。
這里列一些規(guī)模和效率的數(shù)據(jù)。現(xiàn)在我們數(shù)據(jù)倉庫本身,不算視頻和機器學(xué)習(xí)的數(shù)據(jù),總量已經(jīng)到了9500PB的規(guī)模,每天新增40PB左右,指標(biāo)數(shù)超過27000個。
在這樣的一個體量之下,我們依然能夠很快地去做新產(chǎn)品的數(shù)據(jù)支持。
一個全新的產(chǎn)品線,大概需要兩周時間就可以完成所有核心數(shù)據(jù)的分析,包括數(shù)據(jù)報表建設(shè)等工作。
第三點,底層硬件的技術(shù)探索,這肯定是基礎(chǔ)的事情,我們也有很多的投入,比如自研服務(wù)器、DPU、AI芯片、數(shù)據(jù)中心技術(shù)等等。這里不展開介紹,未來可以和大家做更多展示。
以上就是我對字節(jié)跳動建設(shè)IT基礎(chǔ)的一些思考。這些技術(shù)、這些實踐全部都會在火山引擎云產(chǎn)品中開放給我們的客戶,希望能夠幫助更多的企業(yè),這樣也會產(chǎn)生更大的社會價值和商業(yè)價值。