2017 年 12 月 23 日,来自又拍云运维总监邵海杨在又拍云 Open Talk 第 39 期活动上作了题为《游戏更新下载优化经验谈》,以下是演讲是实录:

本次分享我首先讲一下又拍云的三块业务体系:

  • 第一块是云分发,即 CDN,本次分享会从定制云分发讲起,对它进行技术上的剖析,并且会提到云分发的几种类型;
  • 第二块是云处理,云处理是指电商或小程序等使用的图片裁减、缩放、转码的处理以及包括音视频的转编码等功能;
  • 第三块是云存储,又拍云早期的业务是图片管家。在云存储这块,又拍云有 10 个 PB存储。

本次分享也主要讲解的也是又拍云 CDN。

一、游戏加速方案的目标

游戏加速其实对于游戏厂商来说,CDN 重要性是不言而喻的,在早期的时候,无论是页游还是端游,第一个重点保障的就是用户体验,然后是考虑如何应对业务突发,服务保障,而后才是运营成本。

image.png

游戏加速解决方案

这几年随着移动网络越来越发达,网速突飞猛进,手机大战白热化,移动端普及率节节攀升,网内在线用户大量地提升,但是移动互联网对 HTTP2 又是强制要求。因为 HTTP/2、HTTPDNS 技术改善了传统的 HTTP 的诸多缺陷,尤其是多路复用,以及大家关心的劫持等,在 HTTP/2 上有了很大改善。

又拍云的边缘节点在国内覆盖了除了三个大运营商:电信、联通、移动外,也包括像鹏博士,华数、教育网等运营商。我们还在全国部署了四个中转节点,四个中转节点两两之间,以及到数据中心都是用光纤互通的,而且还做了双线环网保护。

CDN 加速服务降低了对客户源站的要求,只要保证客户源站可以是单线,能够从我们的中转节点回源就可以了。在国内,无论是电信、联通还是移动,单线 IDC 机房的成本较低。客户在使用 CDN 后,更加节省流量、成本。比如“什么值得买”,使用了又拍云 CDN 后,源站只需要300 Mb 带宽就可以轻松应对来自全国访问的需求。

二、CDN 可以加速的地方

从技术角度讲,有几个地方可以进行加速:

1. DNS 加速:国内存在多地运营商以及灰色产业的干扰,数据传输往往需要更加精准有效的解析;通过 HTTPDNS / HTTPS 可以有效缓解困境;

2.协议优化:HTTP2 的多路复用和 OCSP,HSTS 的功能可以加速应用;

3.智能调度:基于 DNS 的分层调度策略及边缘到中转节点的链接性能探测,能够动态的选举出更优加速路径;

4.链路优化:CDN 网络就是在访问与边缘、中转到客户源之间,经过层层筛选,有目的性地去布点,再由专业运维人员监;控整个链路。保证数据传输快、稳定;

5.大文件优化:某些游戏包体较大,需要进行大文件切片优化,降低包体大小和更加适应公网传输的链路优化;

6.图片优化:基于 webp 技术的图片优化可以减少多 86% 的体积,新技术红利垂手可得;

7.回源收敛:比如又拍云 4 个中转站,只要有一个中转站回源至客户源站,保存内容,其他中转站上就会运行 mirror 程序自动进行镜像,去存有数据的中转站获取数据;

8.实时监控:基于大数据的日志分析,可以5分钟就直观可视化的监控到全国的 CDN 质量和命中率,快速定位性能问题,一目了然;

三、又拍云 CDN 关键技术介绍

又拍云 CDN 拥有诸多关键技术,比如一站式的自主 SSL 服务,或者自主研发的 UPDNS 系统等等,接下来我将为大家介绍这部分技术。

(一)一站式自助SSL服务

在又拍云控制后台可以申请免费或者付费的 OV、DV、EV SSL  证书,同时支持 SSL 证书自动续费。

image.png

HTTP/2

又拍云是业内第一家已经全面启用 HTTP/2 的 CDN 厂商。支持 OCSP 的 HTTP/2,SSL 传输的效率就很高了,配置也非常简单。HTTP/2 是 Google SPDY 的加强版,现在已经成为一个国际标准,并且被所有浏览器认可。HTTP/2 具备了多路复用、HPACK 等功能。相比 HTTP 1.1,HTTP/2 的效率要高出很多。

OCSP Stapling

OCSP 相当于在 CDN 上进行短暂的证书保留。比如说可以规定一个固定时间通过 HTTPS连接,由 CDN 进行认证,不必再向权威机构认证。除此外,又拍云还完全支持 HSTS 的,保证传输安全。

下图是 OCSP 的对比图。在启用了 OCSP 后,后续链接验证过程中基本上非常平滑。

image.png

(二)自主研发 DNS 系统

又拍云在使用自主研发的 DNS 系统之前,使用的是 DNSpod ,它作为中国很大的 DNS 提供商,自身体量也臃肿了,API不够灵活且响应太慢,而通过自研 DNS 可以直接筛选出 500 条记录。目前又拍云的 3 个BGP节点,4 组机器都提供 DNS 分层调度策略,HTTP DNS 以及 Web 管理后台。通过这套 DNS 系统,用户可以更加清晰地看到数据来源。

image.png

下图是 DNS 纠正的例子,常州移动解析到了天津电信。又拍云可以把它重定向到天津电信,再回到原地址,再完成一个 302 跳转。

image.png

(三)大文件分段缓存

大文件分段缓存是一个基于 range 请求的技术改造,前端业务逻辑会将请求转成 range 请求发回源站。大文件分段缓存主要针对视频类或者游戏类这类客户的 上GB 级别大文件点播或者热点下载。一般情况下,大文件回源容易拖慢机器。如果没有完全下载成功,文件需要重新下载,通过大文件切片分段缓存,让大文件不再需要整体下载,提高了缓存命中率,避免了带宽浪费,而且大文件从分段缓存查找速度会快很多,拖拉也非常方便。

image.png

在技术研发上,又拍云充分考量了切分细度,MD5 分片和如何缓存定位。重点解决了单文件切分 100 块 或 200 块后,能够快速知道这 200 块分别属于哪个文件,缺少哪一块分片。 又拍云目前支持的分段缓存为 64KB,同样也接受定制缓存大小。现在有部分客户已经切到 1 MB。然后通过CDN预热接口,可以对大文件进行预热,再配合 DNS 纠正效果更佳。

下图是大文件视频拖拉的性能对比。红色的是没有切片,大文件在切片后下载变得稳定。对于一个文件系统来说太小或太大都不好,现在的磁盘容量都是数 TB ,如果其中某一个扇区坏掉的话,大文件很容易卡,如果把它切成若干个小文件,使用与保存会比较方便。当然碎片太多的话,会使文件系统对小文件的兼容受到影响。又拍云选择在边缘节点启用了 SSD 和 SATA两个介质,减少碎片带来的影响。

image.png

这两种介质使用了内核的 Bcache 模块,它可以把 SSD 和 SATA 结合成一个Bcache 设备,把整个 SSD 当成该磁盘的二级缓存,用于储存热门文件或者分块文件,系统会把热门的数据块自动放到 SSD 中,提升了整个边缘 CDN 的性能。分段缓存对 Range 的请求非常友好,按序加载,再给予回源收敛。又拍云还可以通过分客户源站的协议,为客户提供定制化的需求。

(四)WebP 自适应技术优势

目前在互联网上存在着海量的图片,也有很多应用离不开大量图片的展示,比如电商,游戏或 APP 中内嵌的预加载以及各种图片等,这些图片相对文字体积较大,是手机流量的浪费大户。WebP 作为 Google 研发的一种图片格式,不光可以为静态图片瘦身,还可以为 GIF 动态图片瘦身。

比如一家公司运行一台机器,偶尔跑一下 WebP 是没有问题,但是如果业务突增,一台机器就不能完全处理 WebP 任务了。

又拍云因为有自己的弹性云处理,在公司拥有强大的云处理能力的前提下,WebP 从技术角度来说实现起来非常容易。我们直接在 CDN 上提供了 WebP 格式。当对图片需要进行 WebP 处理时,只要修改参数?webp,图片立即生成 webp 格式,不需要修改一行代码,流量立马下降。在游戏方面,由于页游需要做后台加载,WebP 对页游也会有很大帮助。

(五)CDN 支持简单编程

又拍云 CDN 是支持自定义编程的,可编程 CDN 可以分成四部分,scheme、host、path 和 query,支持 40 个实用函数和15个常用变量,覆盖多种不同业务场景。

image.png

可编程 CDN 变量部分

image.png

可编程 CDN 函数部分

下文展示限速实例,但我匹配到 limit 后缀时,取用 20 KB 的限速值,如果打开了这个 limit,就会变成 2 KB 多一点,后面把参数跟上去就可以。

image.png

在没有这个功能的情况下,修改源代码十分繁琐。

举个例子:自定义防盗链。这是一个加强版的防盗链,可以做到 10 分钟失效。用到的参数是 when match 到什么条件,然后结合条件整合,判断再退出。

下图是自动 WebP ,在又拍云后台可以设置规则,将JPG 和 PNG 图片自动转换成 WebP。

image.png

就这么简单,不需要任何修改,也无需重新上传,在又拍云只需要一条规则就可以完成图片格式的自动转换,流量节省一步到位。

(六)CDN 常规功能特性

  • 智能调度:DNS 调度 + HTTP 302 调度 + HttpDNS 调度
  • 内容优化:Gzip 压缩、JS/CSS 合并、代码压缩等
  • 智能路由:动态中转、区域回源、回源负载均衡(A/B 测试)
  • 智能缓存:多域名共享缓存、过滤参数、缓存过期
  • 协议优化:TCP 拥塞控制、HTTP/2
  • 智能访问:地区访问限制、回源鉴权、IP 访问限制
  • 更多贴心功能:重定向优化、DNS 纠正等

(七)CDN 实时日志分析

又拍云日志每天收集的日志约 500 GB,每天访问约 800 亿次。现在的日志技术是基于Nginx和Lua的流式上传,从内存当中会做空间提取分析合并,然后流式地上传到后端的 ELK 中,很少有落盘动作。因为 CDN 对磁盘的要求很高,所以要尽可能把磁盘 IOPS 用于客户响应。

日志聚合,就是 ELK大数据的集群,我刚才说的那个流式上传,因为你在流式上传前做了一部分聚合处理后,上传进集群里的东西不光数据更加精简,体积也变小了。所以又拍云可以做到实时聚合监控,这也是国内第一家可以提供聚合监控的 CDN,这个面板可以客户的管理后端,完全透明的,自主的可以自己去查看需要的内容在全国的分布情况。时间间隔为5分钟,我们就可以看到实时的CDN加速效果。

在技术栈方面,又拍云主要是用 Heka、Kafka 和 ELK 负责日志处理。我们会根据上报统计、聚合计算、多维度分析、基于客户域名和Top10热门客户给出可视化的监控视图,供7x24的NOC部门查看并报警。

下图是又拍云健康日志,其中包含 slow、size、retry、abnormal:

  • slow:表示速率小于 50kb/s 的请求;
  • size:表示发送出去的字节数和文件 Content-Length 不一致;
  • retry: 表示在后端节点重试了至少一次;
  • abnormal:表示非正常响应,这里排除客户源站返回的部分。

image.png

下图是状态码,状态码中 200、300 属于正常范围。而 400 和 500 在专业术语叫做4xx、5xx 它们是比较严重的,尤其是 5xx 的报警级别很高。

image.png

 这是我们的全链路,我们的全链路有一个蓝色(音)的,就是打上一个唯一号,然后可以在日志里面根据这个唯一号把它抽出来,定位到某一条的记录。

  • x-request-id: ce4fc776afd2b74175695d239b67e3ed
  • via: T.2428.H.1, V.mix-gd-can-007, T.2415.R.1, M.cun-ha-cgo-005
  • x-source: C/200

(八)CDN 技术架构演进

上文讲了可变性 CDN,又拍云将整个 Nginx 的 conf 文

件做成 service,来定义它。比如说 server name 参数,我们可以设置一个定制化的域名绑定和验证,设置规则。另外就是还可以利用十几个函数,加上变量去按照自己的需求组合编写不同规则。

下图是又拍云程序 nginx 加 Lua。在又拍云 Nginx 加 Lua 使用程度较深。对 CDN 来说,本质是反向代理,让客户感觉到是透明的。如果不做本质的反向代理,其实无法改变什么。所以又拍云用 Lua 做了很多工作。比如说海量客户。用了 Lua 加 redis,从 redis 中取出来。所以可以做到控制后台,修改东西以后可以在 1 分钟至几秒内同步到全国。包括上文提到那些可定制的规制也是通过 redis 推送出去。再由 Lua 去监控 redis。

四、又拍云,坚强的 CDN

2010 年,又拍云成为第一家提出按流量收费的新一代 CDN,在这之前多数 CDN 还是按照带宽收费的。而按照流量收费更加灵活,为用户节省排期。

2012年,又拍云结合云存储、云处理推出一站式全栈 CDN,配合 CDN 实行存储 1:1免费,同时用户可以直接通过参数,对图片进行云处理等。

2014年,又拍云提出可定制化、场景化的云 CDN,贴合电商、直播等垂直领域的客户使用场景。

2016年,又拍云实现了在 CDN 节点部署容器的可计算云 CDN。

2017年,开始对接支持边缘计算和链路需求的共享 CDN。     

image.png

image.png