亞太內容分發大會暨CDN峰會一直致力于推動CDN產業深度融合發展和市場普及,現已成為亞太地區影響力最大的內容分發網絡盛會。十年來,在以阿里云、網宿科技、騰訊云等亞太CDN產業聯盟成員孜孜不輟的努力下,CDN產業已經成為基礎性設施網絡,以堅定的基石之姿,支撐起中國成為世界最大的互聯網市場。
隨著全球數字化、“一帶一路”戰略的推進,亞太內容分大會暨CDN峰會的影響力正在逐漸向全球延伸,同時也將中國智造CDN及產業鏈推廣向全球每一個角落。
在6月10日上午舉辦的【內容出海論壇】上,芒果TV運維研發負責人 葉靜濤帶來了以《芒果TV的Spinnaker多云持續交付實踐》為題的主題演講。
演講開始,葉靜濤分享了一個小故事,即2021年2月22日午餐時間,芒果TV監控系統全面報警,有個公有云中上百臺實例被刪除!得益于一直堅守的多云機制,流量被自動轉發到其他云,故障云也只用了20分鐘完成所有實例的重建,此次故障對用戶的真正影響率不足2%。其中利用了31個伸縮組、123臺實例、8-20分鐘重建、1.93%影響率。“我們堅持多云的故事,否則就是事故。”葉靜濤說。
言歸正傳,葉靜濤的演講總結于三個字:看、想、練。看多云的優勢,想思考和期望,練Spinnaker實踐。
首先從多云的優勢講起包括以下幾點:一是跨云級別的高可用,是配合客戶端重試實現多云容災機制。這一優勢體現在當一個云不可用時,可以通過另外一家云提供服務;二是避免被廠商鎖定,遷移成本幾乎為零,選擇更主動;三是避免資源不足,大型活動可在多家云平臺申請資源;四是更多區域選擇,可選區域為所有云并集。
其次是思考和期望,包括三方面的內容。一是在引入多云前后的思考。引入多云前面臨的問題包括配置漂移,即每次操作引發的增量都會變成下次操作的變量,最終演化為千機千面。其次是發布的穩定性,依賴測試用例的質量和覆蓋率,版本變更又會造成測試用例的不可信。最后是標準與靈活,從管理角度希望做到標準化,從業務角度希望做到自定義;引入多云之后又有新的痛點:一是云分散,相同業務不同云廠商的資源要登陸到多個控制臺去操作。二是部署成本上升,每增加一家云,發布工作量將增加一倍。三是學習成本上升,不同云廠商對云的理解和設計都略有不同,每家云平臺都需要掌握。
葉靜濤表示,有了以上6個痛點之后,期望具備的能力包括以下九個方面:一是對云透明化、二是支持主流公有云、三是不可變基礎設施、四是上手簡單、五是自動流轉、六是對接主流運維工具、七是智能判定灰度結果、八是豐富的發布策略、九是優秀的拓展能力。
奔著這一目標,芒果TV調研過很多工具,最終選擇了基于spinnaker的多云持續交付平臺。隨后引出了新問題:怎么去實踐的?
葉靜濤介紹,Spinnaker首先是多云的機制,多云的機制要體現在兩個方面:一是云的接入,作為平臺怎么把云接進去;二是統一視角,用業務視角看資源,而不是云平臺看資源。
關于云平臺接入這一塊只是歷程,由于是國外的產品,對亞馬遜云、微軟云、谷歌云支持的很好。葉靜濤說:“2018年拿到它的時候國內其他家還沒有,我們聯系了阿里、騰訊,由這兩家上生產,之后又接入了華為云,芒果TV自己也把Istio相關開發出來完善Spinnaker的容器云部分,在合作過程中對阿里、騰訊也有了一些反哺。例如阿里云彈性伸縮組期望值的設定、騰訊云把帶寬限定回歸到LB上,整個過程我們是互相學習,互相進步的。”
而在統一視角這方面,Spinnaker是怎樣通過統一的視角看到每個云上資源的?葉靜濤介紹道,Spinnaker要求資源按照${App}-${Stack}-${Detail}三段進行命名,所有云平臺中具有同樣${app}前綴的資源劃分到一起縱向管理。“這個過程當中看到VOD業務中有阿里云、騰訊云兩組數據,其中阿里云是在做紅黑全量的迭代,紅色代表負載均衡看上去不健康,綠色是給流量,正好是做紅黑,上一個版本機器不會釋放,一旦有問題直接從LB層流量過去,就可以很快回滾。”
再來看不可變基礎設施,葉靜濤認為這不是新的概念,從容器引進時,這個概念已經帶進來了。Spinnaker充分展示了云資源按需使用的魅力,以鏡像為交付物將發布縮減為創建和銷毀兩個動作。而Immutable方式的核心是鏡像,研發的交付物是軟件包,基于軟件版本自動更新鏡像成為新的挑戰。葉靜濤介紹道:“芒果TV分成三種鏡像:公共基礎鏡像、業務基礎鏡像、交付鏡像。首先,公共基礎鏡像是在官方的鏡像基礎上,芒果TV統一對鏡像的要求,比如操作系統版本、監控組建等方面是不允許改的。其次是業務基礎鏡像,根據業務特點和語言環境不同準備不同的語言環境,業務探點不同,可以根據自己的端口號去配置。最后是整個交付包的制造是基于業務基礎鏡像開一臺機器,我們需要拉去最新軟件包的版本打進去,這也是準交付物,因為沒有經過測試,我們有自動流水線發布到預發布環境上去,經過各種安全代碼掃描才是交付鏡像。”
芒果TV在Spinnaker支持的部署策略,包括新增、替換、紅黑、滾動等四點。新增是只增量部署新版本服務,用于灰度發布和金絲雀分析。替換是新版本服務部署完畢后清空所有老服務,用于預發布環境。紅黑是新版本服務部署完畢后老服務保留,但不再接收流量。用于全量發布。 滾動是新版本與老服務按照N+1原則滾動發布,用于容器云。
有了以上的鏡像,芒果TV的三條流水線也逐漸形成。這三條流水線包括預發布流水線、灰度發布流水線和全量發布流水線。以上流水線除灰度發布需人工確認版本外皆自動觸發和執行。
那么金絲雀分析是怎樣能智能的判斷一個產品迭代之后新的版本是否適用?葉靜濤介紹:“左邊是生產的負載均衡和生產的集群,右邊是預發布負載均衡和預發布集群,我們分別基于這倆集群新創建基線限集群和金絲雀集群兩個彈性,直接接入生產分擔相同的流量,此時通過監控系統去采集指標,包括CPU、內存、網絡、業務日志等各種指標,然后做金絲雀分析。這是其中一個指標采集下來的結果,它會產生金絲雀分析報告并進行評分。我們可以無限的擴指標,同時可以給它一個權重,我的總分是100分,不同業務關注的指標不同,它的權重就不同。總分超過一個閾值我們認為是安全的,低于一個閾值發布是需要暫停的,中間分數段需要人工根據金絲雀報告進行判斷。”
金絲雀分析帶來的收益是什么?一是完全基于生產環境做的,它是真實可靠的。二是與業務和應用的版本都是解耦,不依賴測試用例,分析維度可自由擴展。三是Spinnaker的權重評分機制可以做到自動化。四是隱性收獲,分析維度的豐富可以反向推動監控體系的完善。從而,Spinnaker在芒果TV里貫穿CICD、研發測試運維,包括在核心的位置。
再回頭看六個痛點是否有解,答案肯定是有。葉靜濤講解道:“通過統一的視角、統一的UI,云資源分散便得到了解決;部署成本上升,只要能做成自動化,就能解決多個云并行的問題;學習成本的上升,因為Spinnaker是統一的操作平臺,對現有的運營工具是兼容的,不需要學新的東西,做Spinnaker這個人肯定要去學集成進來,但是用Spinnaker的人不需要學;配置漂移也得到了解決,基于鏡像發布的體系,沒有進去改的機會,我只有創建和銷毀;發布的穩定性方面,穩定性就是對版本質量把控,首先是三條流水線,先預發布,流水線上已經是緩慢發布的過程,中間有金絲雀基于真實流量的判定,因此我認為它是沒有問題的;最后是靈活與標準,統一鏡像的一部分,同時開放給對方一部分,三條流水線可以基于自己業務不同的訴求去編輯。”
演講最后葉靜濤表示,從 2018 年到今天,芒果TV的spinnaker道路充滿了實驗、學習、實踐與轉變,發版任務增加了十倍(現在每周發版次數200+,流水線執行次數600+),但運維人員并沒有增加,并且實現了部分研發自治。后續將繼續豐富金絲雀分析和混沌工程用例,最終達到“誰構建,誰運維”。