通过 HTTPS 或 SSH 克隆时的带宽差异

ano*_*nol 2 github

我凭经验注意到通过 HTTPS (~500 KB/s) 和 SSH (>10 MB/s) 克隆 Github 存储库之间的显着带宽差异。

在发布周期中,我经常执行几个git clones,默认情况下配置为使用 HTTPS(如 ,git clone https://...),因为它不需要身份验证并且对用户来说更简单。

但是,存储库包含大约 100 MB(由于多个版本、一些二进制文件等),因此由于带宽限制,此命令需要几分钟时间。如果我将git clone命令更改为 use git://...,它将以 10 MB/s 以上的速度下载,因此只需不到 10 秒。

理想情况下,存储库应该更小,但无论如何,我想通知用户这种差异,请他们参考官方文档,但帮助页面我应该使用哪个远程 URL?根本没有提到它,这个问题也没有。该速率限制规则不提任何带宽(和我在它们下面的方式,所以它不可能是问题)。

所以我想知道:这种行为对每个人来说都是已知的并且可以重现吗?我能看到一些特定的带宽限制git clone吗(可能是在短时间内完成了几个s之后)?我想有一个官方来源来推荐用户。

Edw*_*son 5

我能看到一些特定的带宽限制吗(可能是在短时间内完成了几次 git 克隆之后)?

是的,虽然 GitHub Support 是正确的,因为它不是带宽限制。您会看到CPU 节流。GitHub 不受网络限制,但它在克隆存储库上受 CPU 限制,因为计算要交付给您的包文件并对其进行压缩以交付是昂贵的。

正如 Patrick Reynolds在他的 Git Merge 2016 演讲中所讨论的那样,GitHub 限制了特定用户从特定 IP 到特定存储库的并发 Git 操作数量,以避免您对文件服务器进行 DoS。这可以通过你正在做的事情看出,这是避免“雷鸣般的羊群问题”。

正如帕特里克指出的那样,“唯一达到这个限制的是脚本......”而经常达到这些限制的是“克隆以进行持续集成”。简而言之,GitHub 分析了先前用于克隆该存储库的 CPU 时间,并假设未来的克隆将花费类似的时间。当您同时克隆其中几个时,GitHub 会计算这些克隆总数的预期 CPU 时间。如果您超过给定的配额,其中一些克隆将被延迟。

这可确保您的多个克隆不会影响系统上的其他用户。

那么,为什么您会看到这些影响 HTTPS 而不是 SSH?因为经过身份验证的用户比未经身份验证的用户具有更高的配额。我怀疑如果您要使用 HTTPS 进行身份验证,您会看到两种协议之间的响应时间相似。