12 月 2 日,火山引擎「新云·共未來」云產品發布會在上海成功召開。火山引擎云原生產品負責人鄧德源帶來了主題為《火山引擎全棧云原生架構實踐》的分享
以下為演講正文:
大家好,我是火山引擎云原生產品負責人鄧德源,今天非常榮幸能夠給大家帶來云原生的技術分享。接下來我將為大家分享我們的云原生架構如何為字節跳動的業務提供安全、穩定、連續的服務,并通過火山引擎云原生實踐和案例解讀,分享我們對云原生未來發展的思考。
字節跳動云原生發展歷程
字節跳動的云原生發展歷程大致經歷了 4 個階段。
第一階段是 2016-2017 年間,開始嘗試實踐 Docker & Kubernetes。
從 2016 年開始,字節跳動啟動了Kubernetes v1.4 的開發測試上線,并不斷完善周邊基礎設施建設,如基于 Consul 實現服務發現等。
第二階段是 2017-2018 年間,公司業務全面實現了微服務化,為后續全面云原生化奠定了基礎。
在這一階段,我們基于微服務化的痛點,啟動了對 Service Mesh 的調研和實現,主要場景是安全業務推廣;同期,我們也不斷加強云原生鏈路觀測能力,實現了監控日志一體化分析平臺,初步解決了大規模服務下的服務問題診斷。
第三階段 2019-2020 年,字節跳動實現了核心業務的云原生化。基于前一階段的微服務化成果,團隊逐步啟動了核心業務的云原生化,并獲得了 3 個標志性里程碑:
• 基于容器化調度平臺,實現了在離線業務的統一管理和調度,將容器平臺作為業務統一入口,并且實現了資源利用率的大范圍提高;
• 完成了業務 Mesh 化的全覆蓋,同時非 Mesh 化業務也能夠通過服務框架的形式共存;
• 函數計算全面上量,支持大規模消費類場景,并涵蓋了新興場景,如云邊一體化。
第四階段是 2021 年,字節跳動所有業務均已經實現了全面云原生化,并且基于云原生基礎設施,成功支持了春晚活動,充分驗證了其穩定性和彈性能力。
今年年初,為了優化存儲的運維效率,同時釋放計算資源,我們開啟了數據庫、緩存等中間件的改造,系統全面走向了整合化。基于平臺化的基礎設施,我們也在深度地向智能化、實時化、分離化等方向全面演進。
截止目前,字節跳動已經建設了完善的云原生基礎設施:擁有 200 多個生產集群,共計 50 萬節點,最大集群節點數上萬,容器數超過 1000萬;有 10 萬多在線微服務,平均每日變更數達 2 萬次,離線任務數超過 1.4 億。
這個時候,我們開始問自己一些問題:字節跳動的理念是獨一無二的嗎?我們的實踐是否是不可復制的?我們豐富的云原生實踐,如何能夠普惠萬千企業?
火山引擎云原生架構設計理念與實踐
根據國家“十四五”規劃,到 2025 年,國內數字經濟占比將達到 GDP 的 10%,企業新增生產級云原生應用在新應用的占比將從 2020 年的10% 增加到 60%。數字經濟與實體經濟的融合已經成為不可逆轉的趨勢。
那么,作為近年來增速最快的企業之一,字節跳動的云原生架構體系是如何全面、有機地跟隨業務的快速發展的?這離不開我們設計基礎架構的核心理念和原則。
基礎設施:平臺化 → 智能化。平臺化從另一個角度看即是服務化,當基礎設施平臺化且有聚集效應時,企業才有足夠的體量往下推演;同時隨著數據和經驗的積累,企業也能進一步衍生出智能化能力,包括智能調度、智能運維等。
系統架構:垂直化 → 整合化。基于業務發展的速度,我們針對某些場景,例如推薦廣告搜索,實現了相對垂直的管控能力;同時,我們的在線和離線能夠整合,批處理和流處理能夠一體化,異構資源能夠做到統一調度。從垂直到整合,這是一個逐步收攏的過程。
基礎組件:規模化 → 實時化。規模化推動的是以量取勝、實時化推動的是以質取勝。規模化階段業務不斷上量,資源成倍增加,而實時化的演進迫使我們去做細粒度的優化,例如我們在軟硬結合、內存計算方向的探索,在降本提效上都有顯著的效果。
研發體系:敏捷化 → 現代化。我們不僅提倡敏捷化快速交付的能力,還不斷實踐現代化應用的構建。所謂現代化,一方面意味著應用構建更深入地走向移動化和低代碼化,另一方面則是在應用的容災和遷移能力上能夠更深層地做到無感知。
業務觸點:中心化 → 分離化。這是一個逐步建設多云、混合云、云端一體化能力的過程,我們所服務的業務遍布各地,這些業務所服務的客戶同樣遍布各地,我們期望基礎架構能夠在計算、存儲、數據方面都具備分布式的能力,支持業務提供更廣泛的服務。
事實證明,云原生為上述理念提供了一條最佳的實踐路徑。云原生強調自動化、高彈性、可擴展,同時提供了一整套圍繞這個思想的工具鏈和規范。
而作為字節跳動旗下的企業級技術服務平臺,火山引擎抽象了字節跳動在硬件、存儲、安全、業務、開發、運維等多個場景下的云原生實踐思想,推出了包含上層解決方案和中層基礎產品服務的云原生全系產品。
火山引擎云原生產品與解決方案
火山引擎云原生產品重點圍繞 5 個方向完善產品矩陣,分別是云原生系統、開發態、交付態、運行態以及安全運維。
其中,「云原生系統」包含最基礎的容器服務和鏡像倉庫兩大核心產品,沉淀了字節跳動數年來建設容器平臺的經驗,除基本應用托管能力外,還提供高穩定、高性能、自運維等能力,旨在為企業提供最堅實的底座。火山引擎的上層產品大多都圍繞這兩款產品構建,例如函數服務、持續交付、應用觀測、湖倉一體的大數據分析服務、機器學習平臺。許多內部業務系統,如抖音電商、商業化開放平臺,也都基于這款容器產品構建其業務系統。
基于應用生命周期拆解,我們新劃分了「開發、交付和運行態」,其核心是解決應用現代化過程中所遇到的問題。首次發布的產品體系可以支撐企業業務架構升級以及打通重點場景的原子產品,其中既包含代碼倉庫、應用平臺這類可以支撐應用快速開發的產品,也包含持續交付、制品倉庫等提升敏捷化和統一交付能力的產品,也有服務網格、應用觀測、應用韌性這類可以從流量、監控、演練等方面保障業務平穩運行的產品。
最后,在「安全與運維」層面,火山引擎重點構建了以云堡壘機和云命令行為主的安全運維通道,以及以 IaC 為核心的自動化運維能力,結合應用全生命周期托管能力,提供安全且自動化的云原生體驗。
解決方案主要包括「業務架構升級」和「重點場景使能」兩方面。其中,「業務架構升級」主要針對業務的多云部署、新一代的微服務架構以及面向下一代的無服務器架構展開。「重點場景使能」則是輸出字節跳動快速發展的核心路徑:當前,大多數企業現在已經進入轉型的深水區,業務和架構復雜性并非單款產品所能解決的;相較于產品能力零散的輸出,所有產品力的構建都圍繞著核心場景完成。
云原生的基礎底座:容器
此次火山引擎推出的云原生容器系統類產品包括容器服務和鏡像倉庫,提供最基礎的容器化平臺,主要有四個特點:
按需彈性:容器服務底層基于彈性計算和彈性容器兩類計算引擎,其中彈性容器主打彈性場景,根據實測數據,它可以支持容器的秒級啟動,30 秒滿足近萬核的擴容需求。
• 系統層采用精簡 Hypervisor 和 Kernel,裁剪掉多余功能,僅保留核心能力,兼容性得到了內部業務的廣泛驗證;
• 管控層針對核心創建鏈路做異步和緩存,無需每次額外申請 ENI 和 EBS 資源;
• 采用快照和按需加載的能力,將鏡像加載速度降低到毫秒內。
性能優化:容器和虛擬機運行時全面基于自研網卡和自研 vSwitch,相比開源方案,火山引擎軟硬一體化的方案在PPS、延遲和帶寬具有近 2到 3 倍的提升,單機容器密度近千。存儲 IO 上采用自研協議棧,深度優化數據拷貝路徑,實現用戶態協議和全鏈路零拷貝,性能相對原生IO 提升了 5 倍。
安全可靠:VKE 支持同一集群同時運行 runC 和 runV 容器,用戶可以按照隔離需求來選擇不同的運行時。Kubernetes 完全由平臺托管,默認采用 CIS 等安全規范,由平臺確保 Kubernetes 的安全和運維,免除用戶管理成本。
隨處可及:在設計之初,我們就意識到了系統可擴展能力的重要性,確定了同源架構的路線。一方面通過同一套基礎底座實現隨處部署,另外通過同一套產品能力提供無縫的體驗。接口上做到 Kubernetes 100% 的兼容,已經使用 Kubernetes 的用戶可以實現無縫遷移。
云原生的中堅力量:服務治理
為保障云原生應用全生命周期的敏捷和穩定,字節跳動圍繞研發效率、運行效率和穩定性三個方面,實現了一系列平臺和服務來保障服務治理能力的有效落地,解決了易用性和快速迭代的問題、性能和成本的問題,并保障了觀測、安全和運行時的穩定。
在本次云產品發布會上,我們主要推出 API 網關、服務網格、應用觀測服務、應用韌性服務和持續交付。下圖介紹了每個產品的原子能力,這里我圍繞幾個實際的場景來介紹它們所服務的一些場景。
敏捷迭代:隨著企業業務、規模的不斷發展擴張,項目復雜度提高,研發進度變慢和交付質量下降不可避免。結合持續交付、應用觀測服務和容器服務,火山引擎可以幫助企業實現可灰度、可觀測、可回滾的能力:通過持續交付完成代碼上線,通過應用觀測實現實時監控,通過容器服務完成快速回滾,所有操作一氣呵成。此外,這些流程都可以通過應用韌性服務來進行實時的演練。
零信任網絡:零信任假設無論在網絡邊界內部還是外部,都不存在任何隱含的信任。換句話說,任何地方都需要顯式認證,并使用最小權限原則來限制對資源的訪問。因為有海外團隊在業務合規經驗上的積累和交流,我們對零信任有非常深度的實踐。最初我們實現了 JWT Token之間任務互訪,現在已逐漸遷移到以云原生技術 SPIFFE 為標準,同時以 API 網關、服務網格和容器服務作為基礎實現的方案。基于這些實踐,火山引擎可以為企業提供專家級安全保障。
全鏈路監控:微服務架構的復雜性為運維工作帶來了很大挑戰。為了實現對復雜微服務的監控,火山引擎在微服務中添加埋點,可采集指標、日志、分布式鏈路等多種數據,實現對業務立體化的監控。
全場景接入:我們在服務治理上的一個亮點是針對不同的場景實現場景化的接入。服務網格在字節跳動的第一個落地場景是安全,通過為每個業務配置安全 Sidecar 的模式,我們實現了對業務風險控制的能力。基于此,我們演化出通用 Sidecar 模式,接入了數據庫 DB Mesh、A/B測試,所有的接入對業務而言都無感知、無侵入。
云原生的極致形態:Serverless
除了容器系統和服務治理兩類產品體系,圍繞「業務架構升級」,火山引擎也推出了一些 Serverless 和多云產品。它們是火山引擎正在經歷且未來演進的方向。
Serverless 的價值是什么?云的本質就是規模化經濟,通過按需付費、彈性伸縮和免運維來釋放企業的生產力,但現在云的形態做得還不夠透徹。我們按「資源」需求付費,而不是「業務」需求付費;我們的彈性還處在準實時階段,而且很多業務因為架構或者周邊生態問題還無法享受到彈性能力;最后在運維上,云僅免去了物理層運維,但復雜度上移到了虛擬化層。如果能在這三個方面做到極致,企業的成本和可用性可以得到長足的優化。
Serverless 不是簡單的工具或框架,而是一種軟件架構思想和方法,涉及面比較廣,但我們認為這種思想下的軟件架構將是云原生走向極致的一種形態。火山引擎目前已經是 Serverless 的深度實踐者,我們走向 Serverless 總共有 4 個大目標:業務 Serverless 化、開發 Serverless化、資源Serverless 化、運維 Serverless 化。
• 業務 Serverless 化:99% 以上業務負載 Serverless 化,包括微服務、函數、定時任務、計算類任務、機器學習及 AI 任務。
• 開發 Serverless 化:Serverless 形態對開發者而言缺乏友好型,這里我們以 CloudIDE、FaaS Native、Remote Debuging 等能力來服務開發者,很大程度上緩解了開發排障效率低的問題。
• 資源 Serverless 化:如前所述,目前全部負載基于容器服務和彈性容器,并開放混合調度能力,對平臺而言資源利用最大化,對我們上層客戶而言成本達到了最優化。
• 運維 Serverless 化:Serverless 帶來的一個顯而易見的好處是用戶免運維,無需管理基礎設施;但從另外一個角度來看,Serverless 規范化架構和彈性能力,更能進一步確保系統高可用性。
在 Serverless 層面,火山引擎目前主要圍繞「應用平臺」和「函數服務」進行能力輸出。其中應用平臺本質是一套基于容器服務的應用托管平臺,支持更多高級的能力比如全鏈路灰度部署、單 AZ、多 AZ 部署策略等;火山引擎函數服務則已經支持大量應用場景,例如小程序開發、評論離線流、游戲技術中臺、紅包雨活動、飛書在線面試等。
多云原生:應用與資源的多云化
上午主會場提到幾個數據,92% 的企業都會使用多云,未來一定是多云的時代。目前企業實踐多云的路徑依然很漫長,而部分已經“采用”多云的企業,內部也儼然形成了一種新的「煙囪式」建設形態。
當我們談多云的時候,很多時候大家都會想到 CMP,就是云管平臺:用一個管理軟件將多個云的資源層納管到一起,再加上一些權限管理、賬號對接等功能。這只是從運維管理基礎云資源的角度來納管,再極端一點,只是將資源顯示在一個控制面板上。云管并不是真正意義上的多云:一方面各個云的接口差異很大,難以適配;另一方面,云服務很多,云管要接入的服務范圍很難框定。
火山引擎秉持著「開放共享的云」的理念,深度實踐了多云基礎設施。我們推出的多云產品的核心是將容器服務集群管理的能力延伸到本地數據中心或云服務商 IaaS 之上,同時支持納管自建集群,實現面向應用的多云容器平臺統一控制平面。
VKE 向外延伸的能力我們統稱為 VKE Anywhere,支持用戶導入現有 Kubernetes 集群——無論是來自 IDC 或公有云資源自建集群,還是通過云托管的集群—— 我們都能夠一并支持。VKE Anywhere 同時支持托管集群,即通過 VKE Anywhere 來創建 Kubernetes 集群,底層可基于不同類型的環境。VKE Anywhere 與 VKE 完全同源同構,對上保持完全一致的 API 結構,上層產品無需改造即可接入 VKE Anywhere,可以根據客戶場景實現產品的靈活封裝。本次發布我們以應用開發交付為主,上層引入包括鏡像倉庫、持續交付、服務網格、應用觀測服務等產品,同時還引入了應用市場支持企業內部應用快速分發。
多云控制面支持多集群聯邦、全局服務發現和負載均衡等全局管控能力,可以根據用戶需求部署在任意數據中心,通過專線或者 VPN 方式互聯。火山引擎內部對多云的實踐效果顯著,我們當前已經創建了 3 個聯邦集群,底層納管了 10+ Kubernetes 集群,共支持 100k+ 節點。
結語
火山引擎的發展離不開客戶的支持。
目前國信證券的金太陽服務證券交易應用、資產運營管理業務、投行/風控/開戶等業務,均運行在火山引擎的容器云平臺上。我們的容器平臺核心能力支撐了國信證券基礎設施的平臺化:統一資源管理方面,我們為其建設了資源審批到上線的全部流程;交易應用基于容器服務全托管,實現了自愈、彈性伸縮、快速回滾等能力;平臺系統對接上,通過一些列擴展點,打通了核心系統的對接。
在 2021 年中國信息通信研究院發布的 DevOps 標準持續交付第十二批評估結果中,國信證券金太陽資訊中臺順利通過《研發運營一體化(DevOps)能力成熟度模型》持續交付 3 級評估,標志著其持續交付能力達到國內領先水平。同時,國信證券也是全國第三家通過持續交付 3 級評估的券商。
未來我們也將繼續努力,打磨更加優秀的產品,將更多的內部實踐輸出到客戶手上,謝謝大家。