引言
其实不少开源镜像站给出了他们的开源代码,例如清华大学镜像管理器 tunasync、中科大镜像 Docker。
当时思考了很久,没有使用他们的代码,主要是认为,没什么必要,做一个简单的源没必要那么复杂,于是自己仿照着写了个 Demo
实现
Github-SZUmirrors
暂时来说,我们使用的仓库只有少部分几个,同步方式较为单一,pypi 为 bandersnatch 同步,其余系统软件源为 rsync 同步,这里借用了 ustcmirror-images 的 rsync 镜像,其实就是一句 rsync 指令和一些配置了
守护进程采用 service 实现,能够开机启动,也能查看状态
流程如下
service(守护进程)->python(分配进程)->docker(工作单元)
这里还需要加上一些前端,一些数据库之类的同步信息,不过作为 demo 已经足够了,剩下的需要的交给各位自己完善了
TODO:增加 Docker 反代
注意
- bandersnatch 同步 python 源时可以做一些设置,减小同步的大小(Python 全部库同步下来要 15T),下文范例为只同步 100G 以下包
[plugins] enabled = size_project_metadata [size_project_metadata] max_package_size = 100G
- 要进行 nginx 调优,以提高负载量
Nginx 调优可以参考此文档
具体可以进行百度,唯一难以解决的问题时 https 中 tls 握手造成的高负载和高延迟(响应速度慢)情况。
下图为对比
效率上有将近十倍的区别,延迟也显著提升,不过好在公布在外网的时候 https 握手可以由转发机实现,并且可以一次握手传输多个包(链接复用?) - pypi 可以给单独的域名指向 pypi/web/simple 方便访问,但是同时也要注意 python 只支持 https 形式访问
虽然其他软件源 http 也行,但是 https 还是安全不少,性能却跟不上,也是恨头疼的一件事