2018中國雲原生使用者大會:網易雲爆料完整微服務的研發過程
近日,由才雲科技、K8sMeetup 中國社群、Kubeflow 中國社群聯合主辦的 2018 中國雲原生使用者大會在杭州白馬湖建國飯店舉辦,來自各個行業領域的雲原生技術專家、雲原生技術落地企業代表、以及雲原生技術愛好者們齊聚一堂,為國內市場帶來了全球最新技術動態與趨勢分析,推進企業搭建雲原生框架構造雲原生應用,推進雲原生與企業 IT 的融合。
網易雲副總經理陳諤在主論壇分享了網易對於“完整微服務技術棧的定義和實踐探索”,網易作為一家打造多款網際網路爆款的公司,使用者暴漲的階段,技術架構也面臨著嚴峻的挑戰。網易從2010年開始對微服務的探索,目前已廣泛採用了微服務技術棧,並在這個過程中形成了一整套微服務架構的解決方案,陳諤在本次大會中獨家揭祕了網易在這個過程中歷經多個階段的探索與實踐。
(網易雲副總經理 陳諤)
從2006年建站至今,即將退休的網易部落格是可以說是網易服務化的先行者。2010年網易部落格已經不再是一個簡單的部落格,還涵蓋了社交、相簿、音樂等多個方面的功能,隨著業務的日漸複雜,版本更新迭代遭遇很大瓶頸。陳諤回憶道:“那個時候我們很自然地想到了引入服務化的架構,首先做工程的拆分,再進一步圍繞程式碼和執行環境拆分成獨立地程序。後來隨著服務的增多,我們也做了服務的統一註冊、發現等功能,那時候我們稱之為服務的整合。”
但服務化架構並不完全算是一劑良藥,也帶來了很多問題。比如,服務獨立部署容易造成雪崩效應,傳統的異常處理和錯誤處理模型會造成大量請求堆積、故障恢復慢等。據陳諤介紹,針對這些問題,網易做了一系列的應對策略,比如引入Bulkheading做隔離,引入執行緒池來避免服務雪崩,這也是目前很多開源框架的做法;引入熔斷機制讓不能被服務的老請求快速失敗,快速恢復故障等。
到這個階段還是沒有解決所有的問題,2010年雲端計算還未普及,由於公司內部的伺服器機型很難統一,資源的分配非常困難;另外,同時隨著服務的拆分,測試、開發環境的數量大增,環境的管理、部署更新都變得非常困難。據陳諤介紹:“當時的部落格被拆到七八個服務之後就沒辦法再拆下去了,但我們知道隨著網際網路業務變得越來越複雜,這是必須要面對的問題,所以我們就開始回爐做基礎設施的建設,首先就是基礎設施的雲化。”基礎設施的回爐重造,最終將整個網易使用的伺服器機型統一到了只有5款,由於QoS和隔離機制的引入,資源利用率提升了300%,也使得運維效率大幅度提升。
一直以來,網易都是一家注重使用開源、開放標準的公司,陳諤說:“所以我們發現SpringCloud、Dubbo這些開源框架後,果斷進行了採納,將服務治理邏輯抽離,以無侵入方式實現,支援Spring Cloud、Dubbo等開源技術棧。”針對前面提到的開發測試環境眾多難以管理的問題,陳諤介紹說,網易雲基於Jenkins銜接雲端計算環境,支援通過Agent部署軟體包,做了整套的CI/CD服務,同時還抽象出了產品、環境等多級概念,匹配實際的研發情境。
這個階段依然還有新的問題出現,陳諤一一分享了網易的應對策略:比如傳統的監控只能告訴你哪個地方負載高,哪個地方有執行緒堆積,排障複雜度高,網易引入了全鏈路跟蹤服務,結合日誌服務能快速發現故障點上下文,近期還加入了對OpenTracing標準的支援;比如CD服務模版管理混亂,出現上千個無法重用的模版,容器技術的出現能夠很好地解決這個問題,所以網易在2015年就開始全面推進和擁抱容器的標準;此外,還會遇到伺服器生命週期管理複雜的問題,比如電商業務在大促之後,伺服器下線或轉移流程冗長,初期網易零散實現了Auto Scaling的功能,後續Kubernetes出現之後,全面擁抱了Kubernetes的叢集編排和管理標準。
陳諤總結說:“至此,我們就形成了一個比較完整的微服務技術棧,由於這個技術棧的無侵入性,對集團外部的客戶也有很大的價值,網易雲將其進行了包裝和產品化,並取名為輕舟。取自李白的‘兩岸猿聲啼不住,輕舟已過萬重山’,也希望輕舟微服務能夠幫助更多的企業解決IT長期演進過程中遇到的問題。”