引言
其实不少开源镜像站给出了他们的开源代码,例如清华大学镜像管理器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还是安全不少,性能却跟不上,也是恨头疼的一件事