最初在这里问:https://stackoverflow.com/questions/60674502/how-to-keep-many-servers-5000-up-to-date-with-git-and-its-rate-limits
<最初发布:


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

我们想出了提交后的钩子(但是如果少数服务器未收到更新通知,那将会发生什么情况) ?)或git使用cron每分钟获取一次。我们想采用cron的处理方式,因为即使服务器处于脱机状态(关闭或与网络断开连接),它也不可能失败,但最终仍会自行解决。 >
我们每分钟进行一次获取,然后比较以查看是否需要拉取,如果需要,则拉取并运行迁移代码。

我们希望每次都运行分钟,以便服务器尽快彼此同步。

现在我们想知道速率限制如何?我们正在使用bitbucket,并且速率限制为每小时60 000个请求(因此每分钟1000个),这将使我们最多只能容纳1000个服务器,然后才出现问题?
说,如果我们进行公共回购,我们可以进行未经身份验证的呼叫,呼叫的限制取决于IP,而不是每个用户,因此无论拥有多少服务器,我们都不会遇到任何限制。缺点是,我们必须先加密存储库,然后再提取,解密并复制解密的文件。

这是处理此问题的最佳方法吗?看来非常不合常规。处理此问题的标准或建议方法是什么(如果有的话)?


阅读答案后,我们现在认为拥有一组可以进行任何更改的服务器(来自git)。为了提高可读性,我们将其称为“ gitpull服务器”,将5000多个服务器称为“ web服务器”。

计划是使gitpull服务器从git获取(并可能从中提取)。

网络服务器会定期查询gitpull服务器以查看是否存在更新,如果存在更新,网络服务器将通过下载tar / zip(需要更多网络)或通过以下方式拉动更新:使用rsync(在gitpull服务器上需要更多iops)。

我们认为这是一个很好的解决方案,但是我们当中没有一个人在大规模部署方面有任何经验,因此我们不确定是否已经监督过任何事情或是否可以通过其他任何方式做到这一点(可能更好)的方式。

获得有关此方面的反馈,并了解以这种规模处理此类问题的常规或推荐方法,将非常有帮助。

评论

git每分钟从5000个地方拉,哦,我必须讨厌你的星期日。

#1 楼

我认为这里提出的计划没有多大意义。像Ansible这样的工具是免费的,旨在通过良好的集中管理和日志记录来做到这一点。


将代码放入BitBucket。
制作Jenkins服务器(开源/免费/低价)关于资源
/有据可查且易于使用)。
让BitBucket调用Jenkins并附带变更。可以轮询位桶,但是效率较低。
Ansible可以根据查询数据库/文件/ API /所拥有的内容来动态定位所有5000台服务器。
这样,位存储桶几乎没有负载,ansible可以完成所有工作从一个位置开始,Jenkins会记录运行情况,并记录每台主机的信息。

您在这里没有任何API /速率限制,并且可以轻松地定位到更多主机,而无需付出任何努力动态库存来实现您的目标。

这是行业标准d工具。您还可以使用Ansible随时随地更新服务器的修补程序以及所有其他内容,因此它是可重用的解决方案。

评论


感谢您的描述,这对我们很有用,因为我们现在知道我们应该研究的内容。

–patrick_vane
20 Mar 14'5:51

虽然这是一个伟大的理想。由于基础架构问题,它无法以5000的规模工作。我们拥有5000台服务器,在任何时候您都将被淘汰,而3%的服务器在内存,磁盘,控制器或网络方面都有硬件问题。有很多事情会随机出错。在这种规模上,它涉及纠错和库存管理,您可以在服务器重新加入系统时使它们逐渐进入当前状态。那可笑的代码听起来简直是小菜一碟,但这可能会给您带来很多挑战。

–吉里·克劳达(Jiri Klouda)
20 Mar 15 '20 at 19:28

@Jiri Klouda-大部分都同意-如果您有更好的前提条件,可以添加另一个答案(我想)。使用云主机和AKS / GKE / EKS,ECS或其他工具会容易得多,但最初的问题与这些技术水平相去甚远。因此,我试图做出一些听起来可以实现的事情。我敢肯定,对于我不知道的数据中心,还有更好的大规模系统管理解决方案。

–John Humphreys-w00te
20 Mar 15 '20 at 19:54

是的,我喜欢这个答案,它并不能一路攀升到5000。如果Amazon处理基础架构,但您仍然可以轮换证书,它们会重新启动实例,等等。基于原始问题,存在数据库迁移。我认为当服务器可用或加入集群时,需要一些组件来使服务器更新。

–吉里·克劳达(Jiri Klouda)
20 Mar 15 '20在20:13