如果說虛擬機作為一項革命性技術,在過去的十來年深刻地影響了IT界。那么如今以Docker為代表的容器技術,憑借其輕量、快速等優勢,推動著互聯網產業的革新與發展。而七牛云工程效率團隊致力于打造高效穩定的CI/CD生態系統,并在完成了基于容器化CI/CD平臺的開發和落地過程中,不斷探索測試環境容器化的方向。在此基礎上,也觀察到了產品架構、服務特性、服務間依賴的復雜度給平臺帶來的諸多挑戰。
7月6日,在ArchSummit2018深圳站|全球架構師峰會上,七牛云工程效率部技術專家宮靜分享了主題為《基于容器和大數據平臺的持續交付平臺》的演講。本次演講的主要內容是基于容器和大數據平臺去構建的持續交付系統,是七牛云工程效率部在持續交付、容器化方面去做的技術實踐。從以下兩個方向展開:一個是容器化方向,一個是持續交付的平臺。主要結合在七牛云的實踐來介紹持續集成、持續部署在容器化方向的探索和思考,以及未來的方向。
七牛云工程效率部技術專家宮靜
以場景為驅動,解決實際痛點
七牛云創立至今已有七年時間,作為國內領先的以視覺智能和數據智能為核心的企業級云計算服務商,同時也是國內最有特色的智能視頻云服務商,每年營收增速超300%,累計為 70 多萬家企業提供服務,覆蓋了國內80%網民。隨著市場的快速變化,七牛云的業務需求也需擁有快速迭代、快速發布的能力。因此,在多平臺交互、多代碼版本存在、多服務組件互相依賴的情況下,要保證高質量的交付及產出效率,最關鍵的環節就是如何保證快速驗證滿足客戶的場景,并且精準的達到可上線的狀態,亦或是證明你的功能能夠上線,這些都是在測試及生產環節需要著重考慮的問題。
在開發環境下多樣化的編譯、運行環境使得復雜度導致調試自測難度增加,復雜的測試環境在有限的測試資源下如何提升驗證效率、如何追蹤并分析代碼狀態、產品質量,服務拆分后帶來的架構復雜度、增加產品整體部署和運維的難度等問題下,對于產品運維人員來說,則需要考慮產品整體部署運維的難度。根據以上場景痛點,七牛云在解決這些問題時有著自己的方向以及思路。
據宮靜介紹“第一是要保證完善的工具鏈,不管是開發人員、測試人員以及運維人員都需要工具鏈的支持;第二點是容器化方向,我們的資源能夠大幅提升它的有效利用率;第三點是可以做到環境的隔離,保證代碼在一致的環境下編譯運行,可移植性是增強的;第四點是質量效率上保證有持續演進的CICD系統,可以保證工程效率部做快速的迭代以及有效的驗證;第五點是全流程去保證從研發到交付的內容是符合我們效率上、質量上的要求以及質量效率體系的建立。”
基于此,七牛云持續交付系統SPOCK平臺應運而生。
SPOCK:基于容器與大數據平臺的CICD平臺
據宮靜介紹,SPOCK平臺的定位是基于容器和大數據平臺的持續交付系統。在容器化的實施方面,SPOCK平臺的優勢主要包括以下六點:
1、對容器化測試環境進行一鍵式管理;
2、服務部署模塊化,可以自由編排,當面對復雜產品結構時,自由編排則會保證創建產品環境的靈活性;
3、模塊化工作流,用戶可通過配置來按照需要對工作流路徑進行擴展;
4、持續集成持續發布,與研發流程中所涉及到的各個發布系統集成起來,實現代碼持續集成持續交付;
5、基于大數據平臺Pandora的日志分析服務
6、全流程的質量效率追蹤
宮靜表示“研發團隊的角色不同,都可以去使用SPOCK平臺進行代碼的持續集成。開發人員可能使用流程是當開發完成一部分功能的開發,可以去手動地觸發的工作流,這個工作流是在SPOCK平臺中管理的,它可以做到基于容器化的統一構建,SPOCK平臺可以把構建鏡像自動部署到容器云環境中,提供給開發同學進行調試和自測。”
SPOCK平臺擁有兩個特性,容器環境的管理以及容器環境之上做到持續交付的實現。SPOCK平臺中以產品抽象成產品模版進行管理,基于模版去部署產品實例。這些部署和模版是通過K8SCTL模塊去實施,從而在容器集群中去生效,底層則是基于七牛容器云服務平臺KirkCluster。而Pandora服務是七牛大數據平臺,基于大數據平臺對整個持續交付流程和測試環境集群做數據的統一收集和分析,最終可以在Pandora大數據平臺上進行數據分析。
SPOCK實施:基于大數據平臺Pandora的日志分析服務
對于將服務容器化,當要面臨幾十個服務、上百個服務時,要面對的不僅是服務量級上的變化,不同環境、不同場景它的配置以及運行環境可能是不一樣的,而所需資源也不一樣。要怎么將這些差異在平臺中去有效地管理和維護,這就是SPOCK在容器化方向做的一些探索。
而對于如多個產品需要部署在同一個基礎服務模塊上或者部署的服務間有相互依賴,應對不同環境,七牛云是如何去實施的呢?宮靜表示“一個實際案例是要去部署一個帶數據庫服務的架構時,首先要去定義這個產品結構,將產品中的服務做一個抽象、隔離、拆分。抽象出前端的服務、后端服務、數據庫服務,把這些前端服務、后端服務、數據庫服務都模塊化,作為服務模塊去管理。編排的時候把服務按照邏輯編排到服務組,服務組內部都是平行的,同一服務組沒有先后的啟動順序。但是當我要整體的去部署這個產品的時候,我可能先去部署數據庫服務組,然后再去部署我的后端服務組,最后再去部署前端服務組,當所有服務組都部署完成之后,整個產品就可以對外提供一個可訪問域名,然后作為一個整體去運行起來。”
在實踐中,一些服務判斷現有方案下不適合做容器化,怎樣去提供可以一鍵部署的測試環境?SPOCK的解決方案把物理級部署和容器部署做一個打通,在SPOCK去進行一鍵部署時,物理機部署和容器服務部署同時支持,服務之間可能有物理級部署和服務部署兩部分,然后它們之間可以互相依賴。SPOCK平臺需要把已有的物理級部署方式在平臺上實現、對接。然后需要去梳理服務依賴關系,通過統一的配置管理和統一的規劃來進行部署實施。
宮靜表示“我們實施中遇到的日志方面的實際問題,如當容器服務重啟伸縮時,它的日志到底是如何管理收集,我們現在的實施是基于大數據平臺—Pandora做一個統一的日志收集和分析的服務,也就是說我在這個容器集群上面的所有測試環境,都基于大數據平臺的數據源收集的組件去進行數據收集,數據收集后我們把它統一放在數據平臺上做日志管理,通過這個日志管理有一些新的創新點,當日志統一收集起來之后,它可以做更高效的分析,可以定制化的搜索,業務報警等。”
七牛云的愿景是縮短產品到想法的距離,而對于未來將會考慮的方向,宮靜表示,“希望把測試服務化對研發團隊進行開放。現在做到的是測試環境,作為一個一鍵部署的服務去提供開放,之后希望把所有的這些持續交付的流程環節都把它模塊化、服務化,作為測試服務提供出去。這樣所有開發人員都是可以通過服務化的方式,去使用七牛云的測試體系、質量體系。”