此文转载自:Composer 中文网
原文地址:Packagist/Composer 中国全量镜像重装上阵
配置镜像的方法:http://pkg.phpcomposer.com/

其实,Packagist/Composer 中国全量镜像一个月前就已经脱胎换骨、重装上阵了,经过这一个月来的洗礼(内测 + 开放测试),目前每日数据流量接近 10G,日均 IP 2500+。截至目前,各服务器运行平稳,感谢 又拍云 提供的 CDN 支持,和 UCloud提供的云服务器。

下面说一说这个镜像的细节吧。

composer install 背后到底是怎么运作的?

我们用一张图来说明一下:

Composer 就是我们安装在自己系统上的 composer 工具。所有 package 元数据和 zip 文件的下载、安装工作都是它帮我们完成的。

从图上我们可以看到,不管是 Packagist.org 还是 Github.com 出现故障或者被墙,我们都无法正常安装 package,即便能安装的时候,也是龟速。

说到这里,我们看到如果要做镜像的话,单是为 Packagist.org 做镜像显然是不够的,因为它存放的是所有 package 的元数据,真正安装包还在 Github.com 上面呢。所以“全量镜像”就必须将 Packagist.org 和 Github.com 全部镜像才可以。具体到我们的实现来说,就是将 Packagist.org 上的元数据和 Github.com 上面的 zip 包镜像到国内。

Toran Proxy 时代

去年底我们的中国全量镜像上线时用的是 Toran Proxy 搭建的。这个是一个很不错的搭建镜像的工具,而且也是能够同时镜像 Packagist.com 和 Github.com ,并且还是 Composer 作者亲自开发的,兼容、稳定都不会有问题,所以我们就在第一时间用 Toran Proxy 在国内搭建了一个镜像。但是问题很快就显露了出来,下面挨个说一说:

1、“墙”

国内的开发者之所以抱怨 composer install 慢,就是因为国内到国外(Packagist 主站和 Github 的服务器都在国外)的带宽低,不稳定,而且时不时还被“墙”。由于我们意在帮助国内开发者解决痛点,因此必然要将 Toran Proxy 搭建在国内才能起到加速作用,当然,低带宽和墙都是绕不过去的坑。接下来我们就找解决方案吧,只有两种方案:一是将 Toran Proxy 搭建在国外,比如可以放在香港(香港是中国不可分割的一部分!);二是在国外搭建一个 VPN ,让 Toran Proxy 走 VPN 通道。

对于第一种方案,虽然能够顺畅访问 Packagist 和 Github 了,但是大陆到国外访问速度仍然受限,镜像的意义是为了加速 package 的安装的,速度慢也就失去了这个存在的意义。况且,一但流量大了,单机无法承受负载、带宽也非常昂贵(在香港购买百兆带宽不是好办法!)。

第二种方案倒是可行,但是,Toran Proxy 不支持 CDN 分流的,势必存在单机负载重,吃带宽的问题。

2、版权问题

上面两种方案貌似第二种还能凑合,但是有一个最大的问题 -- “版权”,Toran Proxy 是 Composer 作者开发出来希望企业能够付费购买,然后将收到的钱用于 Composer 和 Packagist 的继续维护上,我们继续使用 Toran Proxy 搭建镜像的话其实是违反了版权协议,再用下去显然不合适。另外,如果想要 Toran Proxy 支持 CDN 加速的话,势必要对其进行改造,这个更不道义了,Toran Proxy 并非真正的开源产品,对其改造更不合适。

那就只能自己开发一个了!!!

从零开始,自己造一个 Proxy

这就是我们的重点了!我们从零开始重写了一个镜像程序,将 Packagist.org 和 Github.com 完美的镜像到国内,并且通过 又拍云 的 CDN 加速,composer install的速度提升了至少十几倍。

下面咱就用数据说话,有图有真相!

实验:以 4M 宽带(没办法,家里装不了百兆宽带,10M 也不行,哎!)、普通家用电脑、Laravel 5.1.4 来测试 composer install

  1. 解压 laravel 5.1.4 安装包任意目录
  2. 打开 win7 自带的 powershell 并 cd 进入 laravel 目录
  3. 执行如下命令(确保已经安装了 composer !):
C:\laravel> composer clearcache C:\laravel> Measure-Command {composer install -vvv} 

在无缓存的状态下全新安装依赖包总共用时: 52秒;多次统计情况下,平均不超过 60秒。

还有一个哥们给出了更快的速度 -- 10秒(估计是应该是10M或百兆宽带吧,好羡慕):

镜像的实现原理

用图说话:

全量镜像和你同在“中国局域网”内,而且配合 CDN 加速,速度当然杠杠滴!

最后,致谢!

Packagist/Composer 中国全量镜像重装上阵
标签: