近日,2018 DevOps China 沙龍在深圳騰訊大廈舉辦。本次沙龍邀請了多位嘉賓,分享了關於DevOps的實踐與心得。會上,騰訊高級工程師、工蜂系統架構負責人羅奇帶來「揭祕騰訊代碼管理核心:工蜂 Git 系統架構」的經驗分享,爲你們闡述了騰訊工蜂的起源、發展以及將來規劃。數據庫
騰訊工蜂是騰訊通過10年的積累和摸索打造的企業代碼管理協做解決方案。具有代碼檢視、分支管理、會話式開發、集成定製、審查和監控等企業級研發管理系統特性,秉承了前沿的研發思想和先進的研發理念,助力企業貫穿研發流程,讓開發和研發管理更加敏捷高效。後端
從2012年開始,Git逐漸成熟。由於Git的去中心化、快速拉取分支和便捷使用等特性,被衆多開發者所青睞,Git的使用在國內逐漸流行起來。此時騰訊也正着手準備搭建Git代碼託管系統,計劃將原來的SVN逐步切換到Git上。緩存
咱們採用自研的方式,是由於它既可以知足整個騰訊的日益增加的代碼託管需求,又可以很好地適應公司企業管理、安全和內部開源文化。在架構方面,面對騰訊這樣的體量,咱們須要分佈式集羣的能力和高可用的解決方案,也須要強化後臺管理、監控、運維能力。再者,自研有很好的可控性,能夠作不少企業定製化的功能。安全
在系統架構的選擇上,爲應對騰訊上百T的代碼庫總量,和不斷產生的平臺方接入需求,好比自動構建、自動代碼掃描等,咱們選擇了微服務。微服務結合容器部署方案,具有快速水平擴展、可插拔和增量發佈等特性,這些特性可以很好的知足高可用高併發場景。服務器
路由是全部服務的核心,全部對代碼倉庫操做的請求都要經過路由進行尋址,而且經過切面的方式,最終實現對業務調用的透明和較低的侵入。網絡
圖中右邊的代碼庫Server採用的是兩地三中心的容災解決方案。架構
水平擴展能力,因爲服務都採用容器部署,再加上無狀態的底層服務,水平擴展將更加方便。即便忽然有大量業務接入時,系統也能隨時經過調整實例數量的方式進行輕鬆擴展,作到快速響應。 服務間的獨立性,單鏈路出現異常時,其它鏈路依然保持正常工做。例如數據庫所在的網絡受到影響,web服務出現短暫異常,但因爲HTTP代理有緩存路由數據,因此用戶最基本的Pull/Push等客戶端操做依然可以正常運行,開發人員的基本代碼操做不會受到任何影響。 提供熔斷、有損服務,防止瞬時負載太高引起的雪崩效應。 服務的高可用,咱們經過運用兩地三中心和主寫雙活的方式,而且採用跨機房,按期增量備份等措施,提供高標準的可用性和容災備份能力。併發
隨着工蜂系統用戶量的增加,系統在運行中也逐漸涌現出新的問題,例如出現了異地項目訪問慢、大庫項目逐漸增多和大庫Merge操做超時等問題。爲了可以儘快解決這些眼前的問題,咱們決定對工蜂系統進行一次新版本的進化。運維
下面是新版本的架構流程圖,黃色部分是系統增長的新特性。咱們引入IDC選擇器來解決異地部署的問題,引入LFS用來解決大庫問題,從而分別實現異地項目快速訪問和大庫操做快速響應。
下面是LFS部署的架構流程圖。咱們部署了LFS代理和專門的LFS服務器。當用戶有LFS操做時,Git智能協議會將代碼、圖片、視頻等文件的文本指針,經過HTTP代理推送到代碼倉庫,再將文件資源推送到LFS代理,LFS代理會先查找路由,進行權限認證,最終把文件資源推送到LFS服務器。此外,爲了可以讓用戶在後臺進行統一的控制,咱們還在HTTP代理中添加了後臺配置,對單個文件、單次提交進行攔截,攔截後會通知用戶使用LFS進行轉換。
假設IDC1是深圳,IDC2是北京。咱們只需在深圳的一套完整系統中增長IDC協調器,而後在北京部署最基本的HTTP代理、路由、IDC選擇器和用於讀寫的新的Server集羣,就能夠解決上述問題。當北京的同事在使用客戶端操做時,訪問請求會由IDC選擇器分配到對應的地方,從而實現就近訪問。協同開發方面,因爲北京和深圳的Web和數據庫採用同一套系統,因此數據之間是相互可見的,同事之間能夠經過Fork公共項目來進行協同開發。
大庫方案 在上一個版本中,咱們已經經過將存儲數據分片和微服務,讓總體存儲容量能夠自由地水平擴展,最終實現總體存儲容量無上限。如今經過LFS,單個庫也能實現理論上容量無限制。如今不只可以輕鬆應對遊戲部門總體項目遷移的需求,還能作到後臺統一配置和管理攔截大文件的規則。
異地協同開發能力 經過IDC選擇器,如今工蜂系統能作到就近訪問和協同開發,在保證數據統一和系統易維護的基礎之上,爲分公司同事提供了較好的使用體驗。
計算和存儲分離 MySQL的分片支持,讓數據容量和API調用也能實現分片操做,從而提供海量數據的支持。
提供Open API和OAuth功能,更好地跟第三方應用集成
工蜂系統做爲代碼託管系統,是DevOps研發工具鏈中重要的一個環節。目前工蜂系統已經經過Web Hooks、API和OAuth實現了和其它系統的對接,共同打通需求、代碼託管和構建等整個環節。從此,咱們將更多地專一於企業的需求,讓工蜂系統開放更多的能力和更加緊密地集成DevOps上的服務,最終造成研發工具鏈的閉環。