我正在研究設置git服務器的分佈式部署。我意識到這是默認情況下git所做的事情,但在這種情況下,所有服務器都將作爲單一的事實來源,並提供集中支持提供的所有幫助。git push如何處理積壓
目前我們的代碼庫和使用服務器的開發人員數量小(幾百個),但一旦部署我期待與他們的自動化生成至少一個數千用戶採用沿。當發生這種情況時,我預計將推動中央支持的git服務器數量增加多倍,這將導致增加推送到其他集中支持的git服務器。
爲了限制由所有這些服務器引起的推送風暴的可能性,我打算採用標準的集線器輻條架構,其中一個或兩個服務器充當主服務器,接收來自輻射服務器的推送並將這些變化推回到其他輻條。當我開始考慮從全球範圍講位於服務器上的樞紐備份多個推的影響
我的問題就出現了。我試圖在我的實驗室中模擬這種情況,並且從我所看到的推送過程只是等待其前面的過程完成。在小型部署中,這很好。但是,當您將構建自動化投入到工作中時,提交/推送活動可以呈指數級增長。如果我決定創建一個post-receive鉤子來處理這些按客戶端推送的推送,我可以預見這些進程可以在等待中心接收更改的客戶端服務器上備份的情況。
我的問題是:
我的顧慮是否有效?這些過程是否會將這些作品掛在外面,直到它們被中心收到爲止?客戶將不知道這種狀態,因爲推送過程將被分離出原始接收。但是,他們會發現其他遠程服務器上的更改會延遲。
如果這些進程會失敗,難道他們失敗是對的sshd的等待時間或根本的git本身具有指定等待區間的方法?
除了監視系統進程或包裝的推出指令跟蹤其完成時間,有沒有一種方法來檢測這種操作積壓,或爲此事掛得到在主服務器上的條件?
你任何人都可以點我對處理這個問題的一些主題或文章?
最糟糕的情況是,使用定時間隔的推送可以用於每個存儲庫,而不是基於掛鉤的推送,但我希望儘可能保持自由流暢,因此基於掛鉤的推送將是首選。
我從你提到的sshd中假設你正在通過ssh推送? – Cascabel 2012-02-16 20:26:41
是ssh用於推/拉/克隆操作 – 2012-02-17 21:11:25
我覺得我已經回答了您的主要問題;特別是我已經解釋過,推動不等待前一個完成,這使得你的大部分問題都無關緊要。如果你試圖支持比你的網絡可以處理更多的推動,你只會遇到問題,這不是一個真正的Git問題。如果需要,我會在答案中加入一點點來解決推送和讀取操作的大小。但是網絡容量規劃並不是真正關注這個網站的主題 - 如果您對此有疑問,請嘗試[serverfault.com](http://serverfault.com)。 – Cascabel 2012-02-17 21:32:35