如何使用 git(及其速率限制)使许多服务器(5000+)保持最新状态?

How to keep many servers (5000+) up-to-date with git (and its rate limits)?

我们正在制作一个 php 服务,它将 运行 在许多服务器上,想想 5000+。我们在 git (bitbucket) 上托管我们的代码。我们想知道保持服务器最新的最佳方法是什么。

我们想出了 post-commit 钩子(但是如果一些服务器没有收到更新通知会发生什么?)或者 git 使用 cron 每分钟获取一次。我们想采用 cron 做事的方式,因为它不可能失败,即使服务器离线(关闭或与网络断开连接),它最终仍会自行解决。

我们每分钟进行一次提取,然后比较是否需要拉取,如果需要则拉取并 运行s 迁移代码。

我们希望每分钟 运行 这样服务器将尽快相互同步。

现在我们想知道,速率限制怎么样?我们使用的是 bitbucket,并且 rate limits 是每小时 60 000 个请求(因此每分钟 1000 个),这会限制我们最多 1000 个服务器,然后我们才会遇到问题吗?

但它也说,如果我们创建一个 public 存储库,我们可以进行未经身份验证的调用,其限制取决于 IP 而不是每个用户,因此我们不会 运行 进入无论我们将拥有多少台服务器,都有任何限制。缺点是,我们必须先加密 repo,然后拉取、解密并复制解密后的文件。

这是处理这个问题的最佳方式吗?这似乎非常不寻常。处理此问题的标准或推荐方法是什么(如果有的话)?

虽然将其作为一个工具使用并不少见,但 git 并不是一个部署工具。充其量它只能勉强满足简单部署工作流的需求。它 当然 不是 mass-deployment/syncing 工具,像 bitbucket 这样的托管服务提供商也不打算为这种用途提供流量。

即使您能找到一种方法来完成这项工作,作为 bitbucket 的用户,我希望他们能够根除任何试图消耗如此大量资源的人。 (顺便说一下,这可能与速率限制有关。)

您应该获取每个更新一次(或者最多每个数据中心一次,如果您的服务器是以这种方式组织的),在接收更新的服务器上执行构建任务,然后通过分发生成的工件你自己的网络。这是一个成熟的模式,可以使用任意数量的工具(jenkins、teamcity 等)