首先向各位使用 Packagist/Composer 中国全量镜像的小伙伴们致歉,镜像从 2 月 20 日起暂停了更新(镜像仍然是可用的,只是不继续缓存新增的 package 了),今天(3月6日)正式恢复了!
这半个月内咱们的 Packagist 中国镜像在发生了什么变化?下面一一道来:
一、更换镜像服务器
Packagist 中国镜像从一上线就是基于 又拍云 赞助的 CDN 和 UCloud 赞助的云服务器搭建的。在此感谢两家公司的无私赞助!
从 2013 年起我们就和 又拍云 合作了,最开始他们赞助的是我们的 BootCDN 服务,Packagist 中国镜像是他们赞助的我们的第二个公共免费项目,非常感谢 又拍云 一如既往的无限量赞助!
从 15 年起我们开始使用 UCloud 赞助的云服务器,Packagist 中国镜像与 packagist.org 和 github.com 的文件同步所使用的就是 UCloud 位于香港机房的服务器,从上线起一直稳定的运行,一直到今年 2 月赞助结束。
结束赞助其实是我们提出的,原因是:我们希望让同步服务更灵活、更快速。因此我们决定自己购买国外的服务器(主要选定 Linode 和 DigitalOcean),服务器购买资金我们希望小伙伴们一起赞助。
同步服务器的配置和部署规划:
- 同步服务器按功能分为主、备两台服务器,分别从 Linode 和 DigitalOcean 购买。
- 备份服务器只在主服务器故障时才创建、部署并上线服务。因此这台服务器的费用并非一次性支付,而是需要时才按使用时间付款。
- 根据我们这两年对镜像运转情况的监测,选用 Linode 或 DigitalOcean 的 双核 服务器即可满足需求,其中 Linode 双核服务器是 4G 内存,DigitalOcean 的双核服务器是 2G 内存,两家都是提供 3TB 的传输流量。
费用:
Linode 和 DigitalOcean 的双核服务器的租金都是每月 20 美金,也就是一年 240 美金,大约 1654 元人民币。
赞助类别及回馈
所有赞助都限定资金赞助,不接受服务器赞助!
- 企业赞助:至少赞助一年的服务器费用。您的企业 logo 将会出现在我们网站首页的赞助商列表中。
- 个人赞助:赞助费用在 50 元以上,我们会将您的姓名或头像、个人网址展示到个人赞助者列表中。
- 大额赞助请发邮件联系我们协商回馈方式:packagist@bootcss.com
赞助通道:
二、为 Packagist 中国镜像做全面体检
新年新气象嘛,既然要迁移同步服务器,所以我们决定对镜像做一个全面体检,即对以前同步的文件做一次全面比对,主要是从 Github 同步过来的安装包(zip 文件)和从 packagist.org 同步过来的元数据(json)文件。
对于这两类文件我们采用不一样的策略:对于安装包我们是将存放在 又拍云 上的文件和 Github 上的原始文件做比对;对于元数据文件我们重新下载了一份并处理之后在 又拍云 上新建了一个仓库来存储。安装包大概不到 150 万个,元数据文件大概在 13 万左右。
那就开始干吧!对于安装包文件的检查我们重新 coding 实现了业务逻辑,对于元数据文件的检查是在以前的同步程序上修改的。然后我们在 Linode 和 DiginalOcean 上个各创建了一个服务器实例来对安装包和元数据文件分别做同步。
元数据文件不多,最耗时间的其实是安装包(zip)文件的检查。
再次抱歉停更了这么长时间!
三、降低同步间隔到一分钟
两台服务器在分别对安装包和元数据文件检查的同时,我们对支撑镜像运行的代码进行了重新梳理,优化了同步流程和中间数据的备份机制,并将每一次同步时所需要下载、上传的数据量降到最低,从而将同步时间压缩到最短。
今后你在 https://pkg.xyz 首页看到的同步时间基本上每分钟都会有一次同步了。但是,这其中还有两种例外情况:
- 对于本次同步时未检测到变化的,我们选择不更新镜像的同步时间。
- 本次同步时检测到大量更新,例如新增加了一个 package 或者同时更新的 package 很多,这时需要同步的数据量就会变得很大,本次同步时间会变长。一般情况下每分钟需要同步的 package 不超过 10 个。
当然,还有第三种 “非人力所能控制” 的情况,例如:Github 或 packagist.org 遭遇大量攻击关机了、又拍云出故障了,或者蓝翔技校的挖掘机学员又毕业考试挖光缆什么的,我们都无能为力。
但是,只要 又拍云 是坚挺的,Packagist 中国镜像就一定能用!
四、其他
上面这三点是最主要的变化,其实还有很多细节的变化,我们会继续写文章一一道来。