什么是CDN?如何在FVTT上使用CDN?
0x01 CDN 是什么
通俗地说,CDN 就是扮演着护航者和加速者的角色,更快、准、狠、的触发信息和触达每一个用户,带来更为极致的使用体验。
再通俗点说 CDN 就像网络中的快递员小哥,把你的电影、网购、订单的数据“包裹”等等,从一个服务器快递到你面前。
另外,CDN 这个快递小哥很聪明,他承包了类似京东的前置仓一样的快递点。在发送快递时,小哥可以从离用户最近的前置仓取货与配送(缓存),同时,小哥还擅长优化快递配送的路径(调度),还会对包裹进行更合理的打包(协议优化)。
0x02 CDN有什么优点
首先也是最重要的它实现了跨运营商、跨地域的全网覆盖,超越了ISP的地域局限、出口受限等因素造成的网站不可用,并且可以实现加速全球的目的。
其次、它节约了网站的整体资本投入,CDN作为一种质优价廉的流量,可以大大降低网络的带宽支出成本,让你可以把更宝贵的金钱,投入其他的地方。
最后CDN厂商一般会提供一站式服务。如果有需求,还会有配套的云存储、大数据、视频云等内容,并且提供7X24小时运维支持,保证随时可用。
0x03 CDN最终目是什么
CDN的最终目的是为了改善互联网的服务质量。通俗一点说其实就是提高访问速度。如果现在只有一台服务器在北京,用户也在北京访问它的速度就很快。但是如果今天有个用户在海南呢?他也得通过网络去北京获取数据,那时延和带宽就会受到影响。那如何解决这个问题呢?其实思路也很简单,就在海南也放一台服务器嘛(专业的说法叫做冗余)。
但是实现起来其实有点困难,首先如何确认用户所在的地区分配合适的服务器?服务器上的被修改的时候如何同步到其他的服务器上等等。。。这样会导致成本的急剧上升,如果专业一点,就会变成“集群”。按照目前的架构,一般就是所谓的“三地五中心”。
那如何在成本最低的情况下解决这个问题你?这就是今天我们说的CDN了。
0x04 CDN的实现原理
这就要从我们如何访问一个网站说起。当我们使用域名访问某一个网站时,实际上就是将请求包通过网络传输给某台服务器。首先计算机会解析出域名对应的IP地址(DNS解析),然后通过网络将请求发送到这台对应的服务器上。此处DNS解析会有两种情况,第一种是解析到真实的IP地址(A记录),第二种是解析到一个“别名”(CNAME记录)。当解析到别名的时候,系统会继续解析这个别名,直到最终获取到一个IP地址。CDN就在此处接入,来改善互联网服务的质量。
CDN网络首先部署了很多基于地市级别的缓存集群(Cache),以保证每个地区的用户都可以有属于自己的边缘节点。然后CDN网络还提供了一台特殊的DNS服务器这台服务器有着一个普通DNS无法实现的功能,就是根据用户请求解析时的IP,分配对应的边缘节点进行服务。
这时候我们只需要把我们的域名,指向这个由CDN提供商提供的“别名”即可实现我们的目的。假如我们有一个网站,叫做 “www.baidu.com” ,他对应了一个别名“cdn.dnsv1.com”。普通DNS服务器请求解析时发现该域名对应的也是一个DNS服务器,那么会将域名解析工作转交给该DNS服务器,该DNS服务器就是CDN专用DNS服务器。CDN专用DNS服务器对“cdn.dnsv1.com”进行解析,然后依据服务器上记录的所有CDN服务器地址信息,选出一个离用户最近的一个CDN服务器地址,并返回给用户,用户即可访问离自己最近的一台CDN服务器了。
0x05 FVTT接入CDN的几个要点
首先CDN实现是依赖DNS解析服务的,所以你需要购买一个域名,这个域名大约在几十块钱左右。买好了域名就完成了第一步。
其次,要想在中国大陆使用域名访问网站,你需要进行ICP备案。ICP备案需要寻找你服务器的接入商(比如阿里云、腾讯云)。当然你也可以选择使用你家宽带进行(此处的接入商就是电信、联通。但一般的民用宽带是不允许备案的。需要使用商业宽带)。个人ICP备案一般需要20个工作日,你的ISP接入商会协助你进行备案,在审批通过后会获得一个ICP备案编号。拥有了这个编号,你就可以使用域名来解析自己的IP地址了(同时CDN可以从此时开始使用,但流程尚未结束)
当你网站开设以后,你还需要再30日内进行公安备案。这个备案需要你网站建立完毕以后才可以进行,大约持续时间为3-5日,但是这个备案需要自行处理。按照【申请-审核-整改-通过】的四个步骤进行,不算太难。审批完成以后你会获得一个公安备案号。这时候你的备案就完成了。
接下来你需要前往云服务器商购买一个CDN流量包,一般流量费用在0.1元-0.2元/g,一般买10元/100GB的年度流量包会比较划算。买完以后你需要把你的域名填写到CDN面板内,获得一个专属于CDN的域名地址。(一般是 你的域名.cdn.dnsv1.com 之类。)
然后你需要前往域名的DNS服务商处设置CNAME记录。将你的域名解析到CDN专属的域名上,然后等待CND部署生效(一般为10分钟左右)。
在等待的过程中,还需要补充一下CDN的配置,首先设置静态资源(png、jpg、gif、mp3、wav等)缓存周期为30日、静态配置文件(json、css、js)缓存周期为1日、以及其他内容缓存周期改为0日(即不缓存)。并且你还需要打开cdn的Websocket功能(腾讯云已经默认打开,阿里云需要手动开启),以及修改TCP连接超时到60秒。最后你需要修改FVTT中的 options.json 文件,这个文件你可以在foundrydata目录下找到他。你需要修改如下几行内容:
“port”: 80,
“hostname”: “【你的域名】”,
“proxyPort”: 80,
0x06 目前几家常见CDN与全站加速的坑
- 腾讯云CDN:拥有所有加速中最便宜的资费,但由于默认Websocket连接只保持10秒,无法接收到fvtt下一个心跳包,所以会每15秒断线重连。【解决方案:动静分离,难度:地狱】
- 腾讯云全站加速:拥有所有加速中最贵的资费,且强制按需付费。
- 阿里云CDN:收费一般,但原生不支持Websocket。【解决方案:动静分离,难度:地狱】
- 阿里云全站加速:收费一般,但由于fvtt的max-age=0,所以无法正常缓存。【解决方案:杠客服修改,成功率80% | 反向代理重写请求头,难度 高】