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