天天看點

位元組跳動現象級 App 十年成長史,移動端基礎建設與組織演進之路

作者:InfoQ

采訪嘉賓 | 孫念、楊萍

采訪 | Tina、闫園園

編輯 | 闫園園

2012 年,位元組跳動成立,到今年,正好是它的第十個年頭。雖然在年齡上,這家公司還非常年輕,但從影響力上來看,它早已成長為移動網際網路時代的新興勢力。

現在外界給它貼上了很多标簽,其中令人印象深刻的無外乎:龐大、低調。的确,位元組跳動鮮有發聲,這也使得它與一衆網際網路巨頭相比,多了幾分神秘的色彩。不過,如果要探尋位元組成功的原因,創始人張一鳴的一句話或許能成為答案:

位元組跳動的核心競争力,直接來說是我們的産品,産品背後是我們的技術系統,技術系統背後是我們的團隊和文化。

如今,再過多去渲染位元組的産品稍顯多餘,畢竟對于開發者群體來說,目光也更多的聚焦在後半句——持續、豐富的 App 研發的背後究竟有着怎樣的技術支撐。在本期訪談中,InfoQ 有幸采訪到了位元組 AppInfra 團隊。他們是移動端基礎技術的全球化研發團隊,支援的産品包括但不限于抖音、今日頭條、西瓜視訊、飛書等,在性能優化、前沿技術探索等方向上都有深入的研究。

在與他們的交談過程中,我們沿着團隊的成長軌迹探尋到了位元組跳動移動端基礎設施的建構之路,以及支撐如此冗雜的工作背後的團隊精神和文化,現整理此文,希望能對讀者有所啟迪。

現象級 App 爆紅帶來團隊成長

2018 年,抖音日活破 2 億,一躍成為中國頭部 App 之一。這一年,媒體将之報道為“位元組跳動成為巨頭,與 BAT 們正面交鋒的一年”,自那時候起,位元組業務開始觸及多個領域,擴大旗下 App 矩陣,其中,多款 App 獲得了成功。在外界看來,這是位元組的高光時刻,但人們看不到的是,彼時位元組的内部也需要開始做出轉變來應對業務的高速發展。

以本文的主角 AppInfra 團隊舉例,其前身可追溯到位元組跳動的基礎技術部門。2017 年之前,基礎技術部門大約隻有十幾個人規模,其他都是純用戶端安卓、iOS;2019 年之後,整個位元組包括抖音的業務都起來了,需要支援的業務越來越多,“于是我們吸納了不少領域内的專家,包含 Flutter 社群的關鍵專家,一方面幫助團隊支撐起平台職能;另一方面也開始投入做一些技術研究”,楊萍談到。在此過程中,基礎技術部門逐漸孵化出現在的 AppInfra 團隊。

業務多,場景也随之多樣化,對于技術團隊來說,堆人頭、拼時間勢必不是長久之計。這種情況下,整個公司開始更加注重技術複用。對于 AppInfra 來說,他們的主要職責,正是将場景中的通用技術能力抽象出來,加以建設,沉澱出通用工具再落地到業務中去。AppInfra 的應用基建過程覆寫了整個開發周期中的各個環節,涉及到應用開發的整個環境,包括需求管理、代碼稽核、測試、打包部署、性能優化等。另外,團隊還需要判斷和引入新技術,比如由于業務擴張需要更好的跨平台技術方案,AppInfra 團隊就促進了 Flutter 在位元組跳動新業務上的落地。

發展至今,整個 AppInfra 團隊的規模已經逐漸擴大,并且進一步細化為了四個子團隊——AppHealth 團隊、Research Center 團隊、端智能團隊以及 DevOps 團隊。AppInfra 團隊也有了自己的使命:提升移動端效能、性能品質、産品核心名額和智能化水準,并關注新技術研究與落地。

那麼為什麼要分化出這四個方向呢?對此,另一位受訪嘉賓孫念總結為團隊的定位是為支援業務而生。他表示,與其說團隊的架構是自頂而上規劃而出,倒不如說是随着業務的需求慢慢生長出自己的形狀來的貼切。“拿 AppHealth 團隊來說,當應用達到一定量級,性能、穩定性等名額會直接影響使用者産品體驗。随着業務規模持續增長,這部分問題一旦開始凸顯,團隊也會加大這些方面的投入。”由此也可見,組織架構的演變其實是和技術、業務息息相關的。當業務改進時,新技術就會通過架構的分支與原有技術連接配接在一起,共同工作,更高效率的解決業務需求。

如果把組織架構的成長分為支援業務而生、賦能業務中去、引領業務發展三個階段的話,目前看來,AppInfra 團隊已經同時邁入了第二階段與第三階段。但也有很多人好奇在位元組跳動裡,這樣一支通用技術建設團隊是如何與業務團隊進行有效協作的,對于這個問題,楊萍是這樣回答 InfoQ 的:

第一,明确職責是前提。在位元組内部,雙方團隊的職責是比較明确的:業務團隊主要是以需求疊代和業務傳遞為目标,他們的側重點在于保障需求側的傳遞;而 Infra 團隊主要是以技術方向為目标,側重點在于技術的實作情況以及解決技術難點。

第二,保持緊密的協作關系。在業務團隊提出需求後,背後的技術或者中台團隊會迅速調整去做支撐,同時技術團隊還充當業務團隊的智囊團角色,以應對業務團隊可能會面臨的各種突發技術狀況。另一方面,業務團隊在長期需求疊代過程中也會有比較多的業務視角經驗,他們會将這種經驗傳導到技術團隊中,進而沉澱出典型的解決方案或者技術上的經驗,賦能給更多業務。“過去兩三年,我們主要是解決業務的痛點,後面的思路是走在業務前面,提前布局好技術方案。”

性能優化已成移動端重要議題

從 2007 年興起,移動端已經經曆了十幾年的發展。目前來看,移動端的技術棧,可以用百家争鳴來形容:

  • 原生 App 技術棧:安卓平台的 Java 技術棧,iOS 平台的 Object-C 技術棧或 Swift 技術棧。
  • 混合 App 技術棧:典型代表有 PhoneGap、Cordova、Ionic 等架構。
  • 跨平台 App 技術棧:典型代表有 React Native、Xamarin、Flutter 等。

對于位元組來說,移動端的主要技術棧也無外乎如此,“我認為,近幾年來看移動端開發的架構或者架構演進過程并沒有發生質的變化,技術棧的出現也屬于漸進式變化,包括底層程式設計語言以及 UI 層面。”楊萍介紹道。同時她也談到一個新的趨勢,相較現如今比較成熟的技術棧來說,大家開始更關注 App 體驗和性能的優化。對于擁有旗下多款 App 的位元組來說,這一趨勢顯然更需要提起重視。也是以,其中一部分重擔落到了 AppInfra 子團隊 AppHealth 團隊身上,團隊需要提升全産品線的性能、穩定性和工程效率。

作為 AppHealth 團隊的負責人,孫念畢業後的第一份工作是在高通集團,“當時主要是做安卓底層和晶片比較緊密的系統軟體的優化”。後來随着手機廠商的快速發展,他轉而加入手機廠商做安卓系統的相關優化。如今,再總結這兩段工作經曆,孫念感觸頗深,他認為自己的工作層面從偏底層轉而到應用層面,明顯對自己的技術視野和深度上有相當大的幫助。

2019 年,孫念加入位元組跳動,他回憶當時擺在自己面前的第一個任務就是組建團隊。最開始,團隊成員中擁有做監控能力的開發者比較多,“是以,當時的我們主要是做性能監控,一方面是加強線上的歸因能力,另一方面是加強線下深入分析的相關工具建設。”

他進一步介紹,對于線上和線下來說,其實想要監控的名額和發現的問題其實是一緻的,但更希望能把問題線上下就處理掉,以避免線上造成更大範圍的損失。是以,線上層面,團隊着重制訂更好、更合理的名額,同時,建立整套問題的報警、響應、解決流程,來及時發現、解決問題。

線下層面,則從性能角度建立了較為精細的防劣化機制。所謂劣化,是指在業務疊代和架構優化過程中,遇到了很多不符合架構設計的代碼,而導緻架構出現劣化。“比如,我們會去定制 Android 手機 ROM,通過固定 ROM 裡面的參數控制硬體的波動,來減小資料測量的誤差,來達到更加精準防劣化,”通過建立精細化防劣化機制及時發現問題,并進行攔截和消費,來保持項目整體架構持續正向演進。

在解決性能監控問題的同時,AppHealth 團隊也開始在全球各地吸納更多單點技術領域和方向的人才,開啟更多通用技術能力的探索。其中,“編譯器成為我們重要發力點之一”,孫念介紹,團隊在連結器上也做了一些特化工作。

對于工具鍊的探索主要有兩個原因:第一,工具鍊的改造能直接縮小包體積或者提升應用性能,但對于開發者來說隻需要替換工具鍊,而沒有其他感覺;第二,移動端工具鍊的潛力挖掘的還不夠充分,可做的事情比較多。

目前,AppInfra 團隊在包體積方面也已經得到了初步效果。孫念舉例,團隊通過定制自己的連結器替換蘋果預設連結器,可以做到消除全局重複代碼,進而将 iOS 二進制檔案優化百分之十幾左右。“這塊目前業内還是做的比較少的,之後我們也會将實踐做更詳細的分享。”

自動化測試技術探索

如果說性能優化是目前大廠們做産品勢在必行的大事之一,那麼與此相對,四個子團隊中的 Research Center 團隊的工作似乎與業務相去甚遠,畢竟從介紹來看,Research Center 主要負責前沿技術創新,以及與一些學術機構的合作。然而在實際中情況卻恰恰相反,對于位元組來說,Research Center 團隊的存在不僅不是“可有可無”,甚至已經成為 AppInfra 團隊更好地去服務業務發展的重要一棋。

“我們的理念并不是做一個單純的學術研究部門,我們做的是技術研究,終歸還是要講究去落地的。位元組提供了非常多的有挑戰的技術場景,而真正解決實際的技術難題,是網際網路企業裡的研究性部門的使命和初衷。”楊萍談道。

與孫念的經曆相似,Research Center 團隊的負責人楊萍同樣有着豐富工作經驗。研究所學生畢業後,她選擇供職于英特爾,工作内容主要涉及與手機攝像頭相關的軟體,且以應用層為主。2018 年,楊萍加入位元組,最初在 AILab 位元組跳動人工智能實驗室工作負責 QA 技術團隊的搭建。2020 年,楊萍所在的團隊開始轉型技術方向探索,更名為 Quality Lab,Quality Lab 的主要職責是探索一些前沿技術以進一步提升測試能力。“這個過程基本上延續到今年年初,我們的研究方向以品質測試技術、效率和自動化為主。”

同時她也坦言,在這個過程中,團隊面臨了不少挑戰,也做了很多變化去應對:第一,組織架構角度,除了算法工程師以外,加入更多用戶端、服務端的工程師來做産品化支撐;第二,拓展與高校、機構等深度的交流和學術合作。

“未來,組織定位也會發生一些變化,變化主要在于 DevOps 或者極緻的性能與體驗的優化。”随着組織定位的進一步清晰,在公司戰略調整下, AppInfra 正式成立了 Research Center 團隊。“Research Center 會持續跟進加深一些學術合作,繼續前沿技術的探索;另外,我們也會繼續在自動化測試上的投資;最後,我們還嘗試将主攻方向從端延伸到整個代碼,去做針對程式方面的探索。”

那麼對于 Research Center 來說,為什麼會選擇從自動化測試入手開展現有工作呢?楊萍介紹,這主要在于測試技術在開發過程中屬于比較關鍵的節點,能夠在研發、QA 甚至其他決策方等多個方面為項目帶來明顯的優化效果。

越是在項目、業務衆多的情況下,開發者團隊越能體會到代碼審查的必要性,可以說不做代碼審查基本相當于背着定時炸彈前進,時刻有爆炸的危險。而在代碼審查中,測試是關鍵的一環。一般來講,單元測試成本最少,代價也最小,“但對于開發者來說,需要面對快節奏的疊代任務,多半情況下可能并沒有多餘的精力去維護好單測。”是以,自動化測試的重新定義及探索也顯得尤為迫切。

“2018 年時,位元組并沒有所謂的測試平台的概念”,楊萍回顧了位元組整個自動化測試平台建設,“那時候主要是執行一些 UI 自動化測試任務,并且早期服務端測試還是空白的,主要依靠用戶端測試同學去兼顧。”随着業務規模的擴大,位元組設定了專門的服務端 QA 的角色,來填補相應技術層面的空白。接口測試則利用對應的平台去提供編寫、執行,以及測試報告的生成等功能。

同時,性能穩定逐漸被重視,位元組也随之設定了單獨的性能測試平台來提供相應支撐。另外,底層測試技術也一直在探索的過程中。發展到今天,位元組的整體自動化測試平台發,既具有了從用戶端到服務端廣度,又具有從功能到性能的深度,能夠從更加全面的次元為項目及業務做支撐。

當然,建設自動化測試平台中,Research Center 團隊也在做觀察及調研,他們發現市面上針對用戶端測試的自動化測試工具有很多,比較典型的有 Facebook 研發的 Sapienz 以及 Android 自帶的随機測試工具 Monkey 等,但其中對 iOS 系統的軟體測試工具基本上沒有。“2019 年我們調研了市面上能搜到的相關工具,但是位元組的業務類型多,不止有頭條、抖音,還有飛書等一些其它類型的應用。市面的測試工具,不足以支撐我們所有的業務。整體評估過後,我們決定自己探索這部分問題。”楊萍介紹。

是以,2019 年,位元組在自動測試方面加大投入,研發了智能化測試服務 Fastbot。楊萍進一步談道,Fastbot 最核心的技術本質上是如何在海量的資料中更好、更快的周遊完整個測試地圖,“當我們抽象出來這個問題之後,就可以在低層去做多端或者 OS 層面的相容。”這也意味着 Fastbot 不僅可以支援安卓,還能支援 iOS,甚至做到了支援跨端架構。

當然,對于新技術的探索,點滴成功的背後無疑是多次的失敗,Research Center 團隊也并不例外,“自動化的工具,過程中會有非常多的技術探索,也會面臨很多失敗,但這些失敗其實并不足以改變我們的初衷,我們希望用更多的新技術去解決業務中的實際測試問題。”

團隊建設,人才是根本性問題

本次訪談中,InfoQ 照例與兩位團隊的負責人聊到了他們眼中團隊亟需解決的問題。令人印象深刻的是,除了談及技術以及業務上的規劃,本次兩位負責人還不約而同談到了他們對于“人”的問題的了解。

對 AppInfra 團隊來說,目前還需要進一步建設好人才梯隊。“最開始,我們隻有聚焦有性能監控技術的人才上,後來逐漸補齊了一些做深入分析,以及通用優化能力的人員。還包括安卓系統,甚至在 Linux 核心上有經驗的人才,他們可以給我們提供更具有廣度和深度的技術視野,同時我們也增加了一些在單點的技術上積累非常深厚的程式員,比如安卓 Hook。2020 年左右,我們也開始去找一些合适的編譯器領域的人才,并逐漸建立起來了這樣一支隊伍。”

孫念認為團隊需要支撐全球化的業務,那麼需要更多不同技術領域的、很出色的工程師,“我們還會持續再補充一些優秀同學進來。”同時他也談到,雖然位元組在海外的知名度已大有提高,但與 Google、Facebook 等國際巨頭的影響力差距仍然存在,這是需要承認,并不斷努力提高的一點。

而對于 Research Center 團隊來說,楊萍談到,他們目前最需要的則是正視目前潛在的人才結構化的風險。展開來講,作為前沿技術探索領域的先行者,一方面,團隊需要引進更多優秀的青年學者,去做更多技術探索,但也應該注意到,研究型人才的加入可能會削弱團隊本身的工程和業務視角。是以,另一方面,她直言接下來團隊引入更多來自業務領域的技術專家角色,使團隊更好地傳承以技術研究落地為主的使命和願景。

寫在最後

網際網路大廠們締造了不少 App 神話,位元組跳動裡的類似頭條、抖音這種超大型項目也是其中之一。不同類型的企業,其産品差異很大,都需要根據各自的業務情況決定自己的實作和演進方案。

在位元組跳動裡打造 App,一開始技術方案和架構選擇并不是靠就精心設計出來的,而是在實踐的過程中随業務的發展和業務類型的改變不斷調整出來的。随着公司的發展,位元組跳動逐漸強調靠資料說話,一些架構上面的選擇,随後也有不少是由資料來支撐的。

結合這幾年移動端技術發展趨勢,雖然基礎架構不會有特别大的調整,性能和體驗上卻在不斷地優化。跟其他大廠一樣,位元組跳動的架構優化也經曆了元件化、插件化的典型過程,這些優化的實施都是跟業務狀态緊密相關的。比如為了更好的觸達使用者,像頭條的極速版就會使用比較多的插件化,對初始的包體積更小。

總結來說,架構演進是跟業務強相關的,但作為移動端基礎技術架構團隊,保持對未來技術的關注也是必要的。

這其中包括應用架構和程式設計語言。AppInfra 團隊有關注一些開發架構,比如谷歌推出的 Jetpack Compose ,以及蘋果推出的 SwiftUI 響應式程式設計架構。

同時,一些程式設計語言已成為趨勢,比如安卓裡的 Kotlin,一方面在開發者中的占比越來越高,另一方面在做編譯器優化中其産物、性能開銷都是需要關注的點。另外是 Swift,比 Kotlin 更新的開發語言,孫念解釋道,“我們需要關注開發者對它的關注程度,業務對它是否有計劃。如果業務有比較明确的采用 Swift 的計劃,我們也要為團隊建立配套的基礎設施,要及時跟上,以适應現在的開發趨勢。”甚至是安卓系統裡的 Rust,AppInfra 團隊也需要考慮移動端的開發裡 Rust 會不會成為一個可選項。

嘉賓介紹:

孫念,位元組跳動基礎架構 AppInfra 部門 AppHealth 團隊負責人,專注于 App 性能、穩定性方向,帶領團隊通過對作業系統資源利用、虛拟機、編譯器工具鍊,高性能基礎庫等方向的深度優化和建設各個核心名額全鍊路的監控體系和分析調試工具,協助位元組各業務提升産品品質和體驗。

楊萍,位元組跳動基礎架構 AppInfra 部門 Research Center 團隊負責人,負責端架構基礎研究與智能化能力建設,帶領團隊孵化并落地多個行業領先的端品質産品(Fastbot,精準測試),也對目前 AI 技術在大前端研發體系的應用有較多了解。

内容推薦

本文選自《中國卓越技術團隊訪談錄》(2022 年第三季),本期精選了阿裡達摩院資料庫、得物、華潤雲、民生保險、衆安保險、位元組跳動 AppInfra 等技術團隊在技術落地、團隊建設方面的實踐經驗及心得體會。

《中國卓越技術團隊訪談錄》是 InfoQ 打造的重磅内容産品,以各個國内優秀企業的 IT 技術團隊為線索策劃系列采訪,希望向外界傳遞傑出技術團隊的做事方法 / 技術實踐,讓開發者了解他們的知識積累、技術演進、産品錘煉與團隊文化等,并從中獲得有價值的見解。

訪談錄現開放長期報名通道,如果你身處傳統企業經曆了數字化轉型變革,或者正在網際網路公司進行創新技術的研發,并希望 InfoQ 可以關注和采訪你所在的技術團隊,可以添加微信:caifangfang_wechat,請注明來意及公司名稱。

繼續閱讀