使用七牛和 AWS 部署全球CDN

我的游戏里面有一些资源是需要热更新的,这些资源需要在 APP 安装后再从网络上下载,为了加快下载速度,必然要部署 CDN 节点进行加速。
由于我的游戏是国内和国外市场共用一个APP,并没有进行分渠道。所以,无可保证国内和国外的访问和下载速度,需要在国内和国外都要部署 CDN 节点。AWS CloudFront 是国外比较好的 CND 服务,在世界各地都有节点,而且可以按需付费,是一个很好的选择。但是,AWS 在中国境内和国外的服务是分开的,连公司都是分开的。并且,中国的 AWS 服务需要你有公司法人资格才能够申请使用,这对独立开发者来说要求比较高。
那么如何部署全球 CDN 呢?我的做法是国内七牛云存储+国外 AWS CloudFront 配合使用。要部署资源时,需要同时在七牛和 AWS 上都部署,AWS 负责国外区域,七牛负责国内区域。
游戏启动时,会发起一个 check_cdn 的 RESTFull HTTP 请求,我在服务器上通过对这个请求进行解析,可以获得请求的客户端 IP 地址,然后使用GeoIP服务可以知道这个 IP 地址的区域,根据区域我就可以回给客户端相应区域的 CDN 下载地址。这样就可以做到国内和国外使用不同的 CDN 服务商,保证了下载速度。
这里需要说明的一点是,这个 check_cdn 的请求是国内和国外都要访问的,所以,一定要保证它本身的访问速度。就我的游戏而言,check_cdn 我是托管在 AWS 上的,国外的访问速度很快,国内的访问速度也还可以,并没有被屏蔽掉。但是,一定要保证 check_cdn 足够的简单,不要处理大量数据和逻辑,因为一旦用户量比较大,这个接口的并发压力还是很大的。
对于同时部署两个服务商所带来的不便,完全可以自己写一个辅助脚本来一键部署。就我的游戏来看,这种方案表现的很不错。
PS:目前七牛也支持国外 CDN 的节点,我没有试过。感兴趣的可以试试看效果如何。纯个人感觉,AWS 在国外的服务和节点应该要比七牛多,所以我依然使用 AWS 作为国外的主要服务。