我正在研究设置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