本文旨在分享中国网络环境下,开发运维的镜像加速最佳实践。
为什么使用镜像加速服务
由于大部分软件仓库/代码源位于境外服务器,从国内直连可能不稳定或访问缓慢。
因此,一些第三方在国内搭建了镜像站,把境外的软件仓库/代码源同步到国内服务器,进行二次分发。
这些镜像站,大多数是出于公益目的,免费开放给公众使用,为国内开发和运维工作者提供便利。
如何确保镜像服务安全可靠
既然镜像站提供的是二次分发,那么就必然面临一个拷问:我怎么确保我使用的镜像服务和官方提供的内容是一致的呢?
这里从几个角度讨论:
同步时效
镜像站的内容并不是实时和官方同步的,它需要定期检查更新。这个检查周期一般是几个小时至几天同步一次,偶尔也有可能遇到同步失败的情况。
通常,你可以在各个镜像站的首页,看到各个仓库/源的同步状态和最后更新时间。
当镜像服务和官方不同步时,你可能无法下载到最新的数据。
数据损坏或恶意篡改
万一镜像站同步到的数据是损坏的、错误的,或者人为恶意篡改了数据,分发恶意代码、软件怎么办呢?
大多数情况下,包管理工具都有哈希或者签名校验机制,错误损坏的数据会被客户端的管理工具发现并拒绝。
而刻意分发的恶意代码则相对较难防范,因此请尽量选择背景可靠的镜像站。
中间人攻击
中间人攻击主要针对 HTTP 协议。目前绝大多数镜像站都支持 HTTP / HTTPS 两种协议访问。
在公网环境下,应当尽量使用 HTTPS 协议保障传输的安全性。而在公有云使用内网镜像服务时,则建议使用 HTTP 访问以减少 SSL 加解密的开销,并提升缓存效率。
国内主流的镜像站
阿里巴巴开源镜像站 / 淘宝NPM镜像
https://developer.aliyun.com/mirror/
https://npm.taobao.org(已合并至阿里巴巴开源镜像站)
由阿里巴巴提供的开源镜像站,包含主流的开源软件,虽然数量不多,但是稳定性一流。除此之外还包含 Node 生态的 npm / electron / PhantomJS / node-sass 等镜像,这是大多数镜像站没有的。
阿里云 Docker Hub 镜像加速服务
除了以上开源镜像,阿里云还提供了 Docker Hub 的镜像加速服务,按照阿里云文档,该服务需要登录阿里云账号,在镜像服务控制台获取每个用户专属的加速地址。点击此处 登录后即可获取,该服务完全免费,请放心使用。
阿里云之所以设定需要每个用户获取专属的加速地址,应该是为了统计每个用户的使用量,防止通过 Docker Hub 镜像加速服务对阿里云进行攻击,毕竟 Docker 镜像的体积都不小,对服务器和带宽造成的负担也不低。
因此,尽量不要使用网上泄漏的个人加速地址,谁知道会不会用的人多了就被阿里云 ban (拉黑) 了呢。
不过这里有一件有意思的事情,曾经中科大 USTCLUG 也提供过 Docker Hub 镜像加速服务,但是后来因为服务器不堪重负,取消了这一服务。而后中科大的 docker.mirrors.ustc.edu.cn
就被重定向到了 ustc-edu-cn.mirror.aliyuncs.com
,看起来应该是和阿里云达成了某种合作。因此,懒得登录账号申请专属地址的朋友,可以考虑使用 https://ustc-edu-cn.mirror.aliyuncs.com/
这一地址。
网易开源镜像站
网易提供的开源镜像站,包含主流的开源软件,中规中矩。
网易 Docker Hub 镜像加速服务
https://hub-mirror.c.163.com
清华TUNA / 北外
https://mirrors.tuna.tsinghua.edu.cn/
https://mirrors.bfsu.edu.cn/
由清华大学 TUNA 协会维护的开源镜像站,北外提供分流。提供的内容还是很丰富的,同步也非常及时。
中科大 USTCLUG
由中国科技大学 Linux 用户协会维护的开源镜像站,提供主流开源软件的分发,提供的内容比阿里云和网易的更丰富,但是同步频率和稳定性略差一些。
Gitee 极速下载 (GitHub 主流仓库镜像)
由商业公司 OSChina 提供的 GitHub 镜像站,与其它镜像站不同,这里并不提供 Linux 发行版或者主流软件等镜像。这里只提供 GitHub 上部分项目的镜像。截止 2020 年末,这里已经有 2 万多个主流项目的镜像。
其它
除了上面这些开放的镜像站,还有一些仅提供内网服务的镜像站,如腾讯云、华为云、Azure中国等,都有自己的镜像加速服务,只面向自己的公有云环境提供服务,可以根据自己的实际需要选用。
未完待续
其实本来写这篇文章是想评测一下各大镜像站的优缺点,以及在 CI 等场景下的使用技巧。然而这篇文章从年初拖到年末,挖了一年的坑也没填。因此把之前写的一部分先发了,剩下的内容后面再看情况不定期更新。