游戏下载慢导致用户流失,大文件加速优化了解一下

百家 作者:又拍云 2018-08-28 14:54:29

作为一个非资深的游戏迷,我很愿意对各类游戏进行试玩,体验其中的乐趣。但是有一个问题让我感到非常困扰,那就是游戏安装包的下载。现在无论是 PC 还是手游,网络游戏还是单机游戏,游戏安装包几个 G 已是非常常见,有些 PC 端的游戏甚至几十个 G。下载期间还常常碰到资源不好、下载速度慢的情况,有时候没等游戏安装包下载完成,我对游戏的兴趣都已经失去了。可见游戏文件的下载体验对玩家来说有多重要!

那作为游戏厂商,提升游戏安装包的下载速度太重要了,选用 CDN 来为用户提供更好的服务,是一个很好的选择。其实游戏安装包这类文件的下载我们可以归为大文件下载,除了日常的游戏安装包,还有体积较大的软件、视频文件等。

在提升大文件分发速度时,大多数 CDN 都面临以下几个问题:

  1. 单个文件需要 GB 级别的缓存,对单机磁盘容量是考验;

  2. 一致性哈希缓存策略下,热门文件下载容易拖垮某一命中机器;

  3. 下载未完成中途断开需重新回源缓存;

  4. 如果 Range 请求支持不友好,会造成回源带宽浪费过多;

  5. 视频文件点播需要服务端支持拖拉,视频过大可能存在性能问题;

  6. 部分客户本地 DNS 混乱,导致域名解析覆盖不准,对下载速度影响大。


三大招优化大文件加速性能

为了解决上述一系列可能存在的问题,又拍云在 CDN 层面实施了“文件分段缓存”的缓存技术应用。

△ CDN 服务架构

又拍云 CDN 分片功能是基于 Nginx 的 slice 模块进行改造的, 通过使用该功能,CDN 源站接收到的不再是完整文件的下载请求和与客户端一致的 Range。

又拍云 CDN 系统通过大文件分段缓存和分段缓存预加载,实现了完整分段缓存技术。

大文件分段缓存:每个大文件按相同的大小切割成 N 个分片,每个分片在 CDN 内部是一个独立的缓存单元,同一个文件的不同分片都拥有唯一的 URL 标记,在节点内部这些分片会根据 URL 哈希进行负载均衡,最终每个分片请求以 HTTP Range 形式回客户源或又拍云存储;
分段缓存预加载:文件下载的时候多个分片会并发进行加载,以便避免因为回源或上游服务器慢导致的客户端下载卡顿问题。

DNS 纠正调度
DNS 纠正调度也是对大文件业务优化的解决方案。一般来说 DNS 系统在客户 DNS 设置正确的情况下,会返回合适的节点。但是由于客户端配置混乱,用户去访问不一定是最合适的节点。客户端解析到错误的 CDN 节点,服务端会自动纠正触发 302 跳转,使客户端连接到最快的 CDN 节点去下载文件。

例如一位天津的用户,不小心解析到了江苏移动,又拍云自动纠正触发 302 跳转天津电信,保证最佳的传输效率。

江苏常州 移动(112.21.160.135)-> 天津市 电信(123.150.200.130)。

△ 节点跳转

CDN 文件预热

当源站增加新的资源文件时,可将这些新文件提前缓存至 CDN 节点,最终用户第一次访问这些资源文件时, CDN 节点不再需要回源站请求文件资源;一方面可减少用户突发访问时的回源量,另一方面可以加快资源文件的首次访问速度。


大文件分段缓存的优势

大文件分段缓存是又拍云 CDN 网络优化大文件下载体验的一大利器,我们来分析下大文件分段缓存有哪些优势呢?

  1. 按需回源,可以有效降低源站带宽压力,避免不必要的带宽浪费;

  2. 由于不需要去下载整个文件,并且配合分段缓存预加载功能,可以有效提高了大文件下载的速度。

  3. 按块缓存,可以提高文件在 CDN 节点的缓存命中率。

  4. 由于文件按块缓存,分块文件可以散落在 CDN 节点集群的不同机器上,可以有效缓解热点文件导致的机器负载问题。

  5. 开启分段缓存后,视频拖拉也更加实时高效,对点播业务效果提升明显。

  6. 结合动态 timeout 控制技术,还能有效降低全网文件下载卡顿率。

又拍云分段缓存能节省大文件的回源带宽,除此之外,又拍云 CDN 其他特性也能够明显的减少回源带宽:

  1. 分段缓存技术对 Range 请求很友好,按需加载,同时也有助于提升文件整体的缓存命中率;

  2. 区域回源特性让多个 CDN 中心节点能集中回源,降低重复回源次数;

  3. 镜像迁移功能,确保热点文件平滑迁移到云存储,避免 CDN 缓存过期后再次回源;


请求中断时,保持完整缓存

当大文件完整缓存未完成时,同一 CDN 节点上第一个用户访问和第二个用户访问,如何使之快速命中分片资源?

又拍云 CDN 分段缓存技术实际上将一个大文件从头到尾分成 N 个相同大小的小文件进行回源,并且这些分片文件都是独立且大小对齐的缓存单元,一个大文件在下载过程中,已经下载完成的分片立刻就能被 CDN 缓存起来了,即便这个大文件在客户端层面下载到一半中断了请求,第二个用户访问的时候也能直接命中到那些已经缓存住的分片,从而不需要重新加载回源。


大文件下载实测

测试视频大小:1.95G
测试视频类型:MP4
测试技术架构:又拍云 CDN(分段缓存 64KB + 4 并发) + 又拍云存储
测试环境网络情况如下:

完整下载测试

1. 第一个用户完整下载(未缓存):1.64MB/s

2. 第二个用户完整下载(已缓存):3.98MB/s

3. 第一个用户在未缓存情况下下载到 50%,第二个用户立马从头完整下载:可以看到前面 50% 的下载速率保持在已缓存情况下比较快的水平,达到 4MB/s 左右,后 50% 的下载速率因为没有缓存的原因退化到 2MB/s 左右,符合未缓存情况下的速率指标。整体速率:3.01 MB/s。

写了这么多,我才发现原来游戏下载速度慢不一定是资源和网速的问题,也有可能是游戏厂商没有选用一个有着优秀的大文件下载加速功能的 CDN。为了不再让像我一样的游戏用户流失,赶紧来了解下又拍云 CDN 吧。


快 来 找 又 小 拍




推 荐 阅 读


关于技术

不是 HTTPS 拖慢网站速度,而是优化做的不够优秀

看完 Andoird 9.0 Pie 的隐藏特性,我买了张 SSL 证书

进军在线教育,先解决这三大技术痛点

关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接