您好,登錄后才能下訂單哦!
?
互聯網敏捷研發,離不開高效的代碼管理系統。作為研發流程的基礎環節,代碼管理具備串聯需求管理、持續集成、持續交付等上下游研發鏈路的作用,也承載著企業追求代碼質量、鼓勵代碼復用等工程師文化的建設。騰訊擁有近3萬研發人員,產品線漫長、業務種類繁多,不同的團隊規模、技術棧和研發模式都對研發協作提出了不同的需求,也導致了代碼庫規模和研發流程參差不齊。同時編譯系統、發布系統等需要檢出所有代碼,自動化程度越高,對代碼庫的訪問壓力就越大。提供安全穩定的代碼服務,管理不同規模的代碼倉庫,支持各種類型的研發流程,是代碼管理面臨的三大挑戰。基于行業狀況及自身發展需要,騰訊選擇了以Git為基礎,在內部孵化了自研的Git系統——工蜂。
?
首先要解決服務端代碼庫存儲擴容問題,因為單存儲節點無法滿足TB級增長的存儲量,可考慮的有自定義數據分片和通用分布式文件存儲兩種方案。分布式存儲的優點是對應用層屏蔽了底層存儲結構,架構相對簡單,但對IO密集型的代碼管理應用來說,過于依賴分布式文件系統的IO性能,可移植性也不強。相反自定義數據分片可以自由控制分片策略,靈活均衡資源負載,另外在每個分片的底層存儲上,也可以結合分布式存儲,進一步擴展數據備份。工蜂選擇了數據分片的方案,以倉庫路徑作為路由規則,并在應用層實現跨分片操作。數十萬倉庫分布在不同集群,可以實現集群動態擴容和集群間無縫遷移。
?
解決了存儲擴容問題后,訪問量增加逐步暴露了單機的性能瓶頸,代碼庫的讀取和寫入都集中在一臺主機上,會導致計算和內存資源吃緊。通過分析來源,大量的讀請求來自編譯和發布系統,針對這種讀多寫少的場景,工蜂實現了代碼庫級一主多從的讀寫分離模式,寫請求分發給主機,讀請求會根據當前負載情況均衡分流給從機。主從間的數據同步采用Git原生操作,最大程度保證操作的原子性和數據一致性。同時從機作為實時熱備數據,配合異地冷備,建立了完整的代碼庫數據容災體系,以保證數據安全性。圖1是完整的代碼庫后端存儲架構。
?
圖1 數據分片和讀寫分離
?
如何管理超大庫一直是代碼管理工具的難題,Git的設計初衷是管理文本類的代碼文件,但工程中免不了會有依賴庫和資源文件等,特別是騰訊游戲類業務,包含大量的圖片、音視頻文件,使得這個問題在騰訊更為凸顯。工蜂引入了開源的擴展方案Git?LFS,專門管理大型二進制文件。如圖2所示,通過把這些文件存儲在Git倉庫之外,在Git倉庫中只保留文件的文本指針,這種方式可以極大減小Git倉庫本身的體積,加快克隆倉庫的速度。目前工蜂管理的單個大型游戲倉庫超過2.5T,單庫上限問題得以解決。
?
圖2 大文件存儲
?
整體架構上,工蜂采用了業界流行的微服務架構。圖3中,協議代理服務為HTTP、SSH、LFS三類協議提供獨立的訪問鏈路,數據服務封裝了數據庫訪問,路由服務為每個請求尋址后端代碼庫的數據節點,業務服務根據平臺提供的功能拆分,例如代碼瀏覽、代碼統計、代碼評審、代碼搜索等都是獨立的微服務。此外,統一的注冊中心和配置中心提供服務發現、服務路由、異常熔斷和服務配置等全局功能。所有微服務都設計為無狀態模式,可以方便的水平擴展。借助容器化部署的能力,能隨時調整實例數量以應對高并發場景。
?
圖3 微服務架構
?
代碼工具如果不與上下游研發流程打通,對提升研發效能的作用就非常有限。工蜂的優勢之一在于豐富的開放能力,支持第三方系統集成接入。Webhook推送機制,便于第三方訂閱代碼庫提交事件,廣泛用于提交代碼后自動觸發持續集成系統編譯構建。Commit?Check攔截機制,用于代碼合入前自動流水線發起代碼規范、缺陷檢測、單元測試等代碼檢查,通過設置質量紅線,嚴控合入代碼的質量。工蜂還提供了豐富的符合restful標準的API,完善了私人令牌和OAuth授權機制,給第三方提供了安全有效的標準化接入方式,擴展了工蜂的應用場景。
?
在騰訊內部,工蜂已在六大事業群全面普及,服務了包括微信、QQ在內的數千條業務線,代碼庫數量近二十萬,日訪問量達千萬級別,API日均調用數百萬次,有效提升了公司的整體研發效能。在公司內部開源協同的戰略目標下,工蜂也在潛移默化的改變公司的協作方式,目前工蜂的項目中已有半數以上實現了對內完全開源,用Issue討論也正成為跨團隊協作的有效溝通方式。
?
今年9月底,“騰訊工蜂——基于Git的研發工程平臺”項目在中國計算機學會的評選中脫穎而出,榮獲2019年“CCF科學技術獎”。據悉,“CCF科學技術獎”授予對象為在計算機科學、技術或工程領域具有重要發現、發明、原始創新,在相關領域有一定國際影響的優秀成果。本次獲獎是對工蜂的極大肯定,未來工蜂將致力于代碼復用程度、研發一體化體驗、研發過程數據度量等多方面探索,在代碼管理領域持續深耕,為公司及行業提供更大的價值。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。