git - 为什么使用高延迟网络时 git 很慢
问题描述
背景资料:
- 我们公司在中国和美国办公室之间有一条商业100Mb的链路作为内网,延迟为150ms,stdev 0.2ms。0% 损失。
- git服务器位于美国,开发者位于中国和美国。
- 当美国的开发者克隆时,repo 是 100MB/s 以上,所以 git 服务器的性能应该不是问题。
国内的开发者使用同样的命令只能在链路繁忙时达到0.5~2MB/s,周末或下班后达到3~6MB/s。
偶然发现,如果克隆使用 https 而不是 ssh,速度会是 11MB/s。并且如果在美国的任何服务器或工作站上设置HTTP代理,并将以下内容添加到CN开发人员的.ssh/config中,ssh克隆的速度也将稳定在11MB/s。
Host *
User git
ProxyCommand nc -x proxy.intranet.com 8080 -Xconnect %h %p
Squid的配置很简单,
acl GOOD dstdomain git.intranet.com
http_access allow GOOD
http_access deny all
http_port 8080
dns_nameservers 10.10.10.10
我还尝试在美国的测试 Git 服务器上启用 Linux BBR 但没有任何改变,我在中国设置了一个 squid 服务器并让 git clone 通过这个 squid 服务器仍然没有任何改进。无论是 IDC 还是普通笔记本电脑,它都必须是位于美国 Intranet 中的 squid 服务器。
我对原因很困惑,想知道是否有办法正确解决这个问题,而不是使用鱿鱼作为解决方法。
*由于我的声誉低,我无法直接添加屏幕截图,请查看此处的图像 粗略拓扑
解决方案
推荐阅读
- c++ - vector push_back() 给出编译器错误 C2280
- c# - 面向客户的 API 的依赖注入
- javascript - 在 content.js(Chrome 扩展程序)中发生操作时如何检查 popup.html 页面?
- android - Android BLE 数据接收问题
- unix - 替换文件分隔部分中的字符
- python - 在没有空格的字符串中查找子字符串
- fortran - 具有不同行格式的 FORTRAN 解析文件
- angular - 在锚标记点击上构建动态 URL - Angular 5
- powershell - Powershell,如果不存在则映射网络驱动器
- sql - 使用 LIKE SQLITE 的 WHERE 语句后的多列