[喵咪海外部署]海外文件分发方案演进

在开阔海外市场遇到的第一个问题就是文件分发,因为初期文件肯定是存放到国内服务器上,给到海外访问速度及其缓慢笔者这边试下来欧洲只有20KB/s,一个300MB的文件要下载一天,因为这个问题就有了我们今天的主题海外文件分发方案演进,请紧张的往下看!

附上:

喵了个咪的博客:w-blog.cn

1.文件分发1.0

主要思想 : 使用CDN解决多次下载问题,国内继续使用阿里云,海外使用AWS等CDN进行加速

笔者在进行第一次演进的时候主要使用的方式就是在文件分发领域中常用的CDN技术来进行优化,在之前也有使用阿里云提供的全球CDN加速,但是在海外尝试下来首次下载因为需要回源的原因速度只有之前所谓的20KB/S,回源之后有CDN缓存之后也并不是特别理想也只有几百KB的速度

从理论上来说使用CDN服务器除了回源其余的下载是很快的可能是阿里云海外CDN节点质量并不是很高,就算有缓存之后下载速度也一直提不上来,我们就开始选择新的CDN运营商,通过测试效果最好的是 AWS CloudFront 开启了边缘地区加速之后除了回源的下载速度能够达到20MB/S非常惊人的速度,一般客户使用下来也有10MB/S

PS:这就还要使用到另外一个技术就是DNS动态解析域名托管服务都会有此类服务,当域名在国内访问的时候域名CNAME到阿里云的CDN,在国外访问的时候域名CNAME到AWS的CDN

[喵咪海外部署]海外文件分发方案演进

2.文件分发2.0

主要思想 : 通过转发文件来解决回源慢的问题

虽然文件分发1.0解决了多次下载但是接着我们又遇到了另外一个问题,首次回源的时间太久了,因为在海外CDN节点在全球大部分节点在首次访问的时候都会回流到国内获取文件,第一次还是只有20KB/S的速度根本连第一次都没有办法缓存成功

导致这个问题的主要问题是防火墙屏蔽,离国内远的地方请求国内的资源防火墙会限制速度,这边选择通过新加坡Nginx反向代理文件服务作为回源地址,服务器最大带宽是20MB通过测试首次访问时下载速度会总100KB/S慢慢加经过块30秒后可以达到2MB/S最大速度

这样已经可以提高速度但是速度提高到极限的时间还是比较慢,后期通过调研使用KcpTun(想了解可以查看笔者博客[喵咪开源软件推荐(6)]TCP链路加速技术KcpTun)在需要访问的地方增加一个服务节点作为源站点,在通过KcpTun中转到国内文件服务器上(Kcp底层是UDP协议UDP协议不会被限制速度)通过测试可以直接达到最大速度,也不需要通过新加坡中转直接国内即可

[喵咪海外部署]海外文件分发方案演进

3.文件分发3.0

主要思想 : 类DNS的文件分发网络

虽然文件分发2.0解决了回源的问题,但是也带来了另外一个问题就是流量费用高,CDN本来价格是很便宜的但是通过你本身的服务器中转流量费用一下子会多出很多来了,并且回源还是会依赖网络情况,那么笔者就在想有没有什么更加好更终极的解决方案,一次偶尔在和七牛云存储的同事讨论下得出了文件分发3.0解决方案

所有的前提要基于云文件系统(这里使用的是OSS)中的镜像模式简单来说就是文件服务器中没有文件,这个时候有个请求来访问发现找不到文件会先找到镜像的站点获取一下,如果获取到了就在返回的同时自己也存储一份(其实也就是类似CDN的功能),于CDN不同CDN只能全部到一个文件服务器,那么在CDN之前还有一个文件服务器的分发网络,所有的文件只要被海外访问过一次就会不停的在各个文件服务器上进行传递并且保存在文件服务器本身上,可以理解为CDN回源回到了CDN从CDN中获取了文件

这样一来海外文件相当于存储在了海外,回源到国内也只会存在一次回源永久使用

[喵咪海外部署]海外文件分发方案演进

4 总结

技术是不停演进的,从早期的汇编到C语言到Java到Go语言,不停的迭代带来了新的体验优劣需要自己进行斟酌,如果大家有更多好的海外文件分发的方法欢迎来和喵咪一同沟通,最后多谢大家的支持!

注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!

上一篇:使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(五)——实现注册功能


下一篇:WPF实现QQ群文件列表动画(二)