王者荣耀是近两年来比较火的手游,不少小伙伴都有玩过。玩这个游戏最怕的不是遇到猪一般的队友,也不是怕遇到神一样的对手。最让我们感到害怕和绝望的是,团战爆发时,而你 460 了。460 是一个玩家常用的词,其实它完整表达的是,你的网络延迟达到了 460ms。像王者荣耀这样的游戏,CDN 加速是必须有的。而常常出现 460,难道 CDN 对移动端加速无效吗?

Google Web 性能优化工程师和开发大使、《High-Performance Browser Networking》作者 Ilya Grigorik 近日发布了一篇名为《为什么 CDN 对移动客户端加速“没有”效果》的博客,让我们来看看他在文中讲了什么。

原文链接:https://www.igvita.com/2014/03/26/why-is-my-cdn-slow-for-mobile-clients/

以下是译文:

“我们正在使用 CDN,但是当查看性能数字时,它似乎对移动客户端的效果要差得多。我们正在考虑禁用它,因为不确定它是否对移动端加速有效。有人需要为移动设备建立一个特殊的 CDN,我们肯定会用它来改善延迟!”

随着越来越多的团队专注于提高移动网站的性能,我听到类似论点的频率正在迅速增加。问题是,虽然声明通常基于实际数据,但结论是错误。传统 CDN 对移动客户端和对宽带网络的绝对优化效果差不多;这不是“无线 CDN”的问题,而是运营商网络的问题。

网络延迟的组成

在讨论 CDN 对移动端加速是否有效之前,我们首先要了解延迟是怎么来的。举一个具体的例子,就能非常清晰的了解延迟。让我们假设如下:

  • 客户位于西海岸; 服务器位于东海岸。
  • 美国西海岸和东海岸之间的传播延迟为 50 毫秒。
  • 服务器响应时间为 50 毫秒。
  • “有线”客户端的最后一英里延迟:光纤约为 18 毫秒,电缆约为 26 毫秒,DSL 约为 44 毫秒。
  • “无线”客户端的最后一英里延迟:4G 约为 50 毫秒,3G 约为 200 毫秒。

CDN 加速效果

CDN 加速是尽可能地将字节移动到用户附近,在全球各个数据中心和对等点内部署缓存服务器。换句话说,在最佳情况下,CDN 服务器位于 ISP /运营商网络之外:客户端发出请求,导致退出 ISP /运营商网络的最后一英里延迟的成本,并立即命中返回的 CDN 服务器一个回应。因此,CDN 最大限度地减少了传播延迟,还可以通过返回缓存的静态资源来缩短服务器响应时间。

继续之前的示例,假设我们的 CDN 服务器是最佳放置的(东海岸到西海岸的延迟时间不是 50ms 而是 5ms),而且请求 CDN 未命中源站的情况下客户端到 CDN 节点的延迟是 5ms。对于我们的光纤客户端,新的总时间是最后一英里往返加上 CDN 响应时间的总和:18 + 5 + 5 + 5 + 18,总共 51 毫秒。因此,增加 CDN 的好处就是将我们总请求时间由 186ms 降低到了 51ms:在总延迟上有 365% 的改善!

采用同样的方法重复计算每个连接的基本信息,就可以得到一个不幸的趋势:

  • 随着最后一英里延迟的增加,CDN 的相对有效性“下降”。
  • 考虑CDN服务器位于 ISP 网络之外,这就意味着节点的选择非常有意义
  • 无论最后一英里的延迟如何,绝对延迟的改善仍然是有效的。

CDN 有助于减少传播和服务器响应时间。如果你衡量优化前后的对比,就会发现 CDN 几乎没有做移动客户端的优化:例如,3G 用户普遍获得 33% 的优化效果,而 4G 用户普遍获得了 117% 的优化效果

在边缘节点上的运营和维护成本

改善端到端延迟的明显策略是将缓存服务器更加靠近客户端,而不是将它们放在 ISP 网络之外。我们可以将它们移到内部吗?原则上,答案是肯定的,许多 ISP 已经部署了自己的缓存服务器。但是,在实践中,这是一个棘手的问题。

首先,对等点的数量相对较少,这允许 CDN 部署在全球数十个众所周知的位置以提供其服务。此外,为此,他们不必与各个 ISP 进行任何特殊交易:通常,服务器部署在共享数据中心(对等点)中。

我们假设 CDN 和某个 ISP 达成协议,理想情况下尽可能将服务器部署靠近客户(靠近无线电塔和其他聚合点)。这样做需要大量硬件,使维护和升级成为运维的噩梦,并且会导致许多安全问题。例如,您是否会在无法直接访问的第三方运营网络中部署 TLS 终端节点?总之,这是成本,安全和物流的噩梦。

许多互联网服务提供商长期以来一直试图推动“高端市场”并提供 CDN 功能。然而,ISP 有一个不同的问题:他们很难签署客户,因为大多数网站对于和每个运营商单独签署协议丝毫不感兴趣。

除了业务和运营成本之外,为移动客户优化 CDN 没有什么特别之处。根本问题是移动运营商的最后一英里延迟是残酷的,这就是我们需要解决的问题。我们需要透明地了解这些网络的性能,而不是将缓存服务器推向更接近边缘的地方,我们需要运营商之间更多的竞争来解决潜在的最后一英里性能问题。

简而言之,没有理由为什么 CDN 本身对移动客户来说“慢”:不要将相对收益与绝对节省混为一谈。也就是说,每个 CDN 提供商的实际性能显然会根据其服务器的位置和与各种移动运营商的连接而变化,测量,收集实际数据,进行优化。CDN 对移动设备来说并不慢,使用它们!

又拍云 CDN 结合高效链路优化,智能网络调度以及强大的内容匹配等技术,让移动应用在公网拥堵、弱网、不同终端等应用场景中,依旧能够快速获取到动态、静态内容,轻松提升 30% 访问速度。

推荐阅读:

又拍云 OpenResty / Nginx 服务优化实践​

了解 HTTPS,读这篇文章就够了​

Google 工程师:为什么 CDN 对移动客户端加速“没有”效果的更多相关文章

  1. CDN对于动态加速是否有效

    CDN对于动态加速是否有效的问题.关于这个问题,一直存在一些分歧,部分人认为有效,部分人认为无效,主要是CDN技术也在更新,而且是比较低调的进行着更新,所以并不是所有人都清楚CDN对动态加速的效果.其 ...

  2. AWS CloudFront CDN直接全站加速折腾记The request could not be satisfied. Bad request

    ERROR The request could not be satisfied. Bad request. Generated by cloudfront (CloudFront) Request ...

  3. CDN HTTPS安全加速基本概念、解决方案及优化实践

    大家都知道,HTTP 本身是明文传输的,没有经过任何安全处理,网站HTTPS解决方案通过在HTTP协议之上引入证书服务,完美解决网站的安全问题.本文将为大家介绍阿里云CDN HTTPS安全加速传输的基 ...

  4. Google工程师打造Remix OS系统 桌面版安卓下载

    三位前Google工程师打造的Remix OS系统终于来到了PC桌面上,现已可以下载尝鲜. Remix OS for PC基于Android-x86项目,由安卓5.1 Lollipop深度定制而来,不 ...

  5. Azure CDN:氮气加速已开启,司机们请做好准备

    在上一周,我们向各位小伙伴介绍了通过 Azure CDN 高级版服务为 HTTPS 应用加速的做法,漏掉的小伙伴可以点击这里穿越回去补课哦.那我们今天讲点什么呢?当然是 CDN 最重要的价值:改善应用 ...

  6. CDN存储和加速静态文件是什么回事(整理)(CDN是什么)

    CDN存储和加速静态文件是什么回事(整理)(CDN是什么) 一.总结 一句话总结: 内容分发网络:Content Delivery Network:依靠网络中的各个节点,就近发放静态资源. CDN的全 ...

  7. 深度学习框架Tensorflow应用(Google工程师)

    首先在这里给大家分享Google工程师亲授 Tensorflow2.0-入门到进阶教程 有需要的小伙伴可点击进入扣群下载,群内不定期的会分享资料教程,点击直达链接:https://jq.qq.com/ ...

  8. [jQuery编程挑战]001:实现页面元素加速动画效果

    要求: 页面包含两个HTML元素:一个按钮,一个小方块 动画要求:点击按钮,小方块从页面坐标300,300,加速移动到0,0 相关知识点: jQuery动画方法animate easing参数的设置 ...

  9. 国内网站常用的一些 CDN 公共库加速服务

    CDN公共库是指将常用的JS库存放在CDN节点,以方便广大开发者直接调用.与将JS库存放在服务器单机上相比,CDN公共库更加稳定.高速.一 般的CDN公共库都会包含全球所有最流行的开源JavaScri ...

随机推荐

  1. golang map的判断,删除

    http://blog.sina.com.cn/s/blog_9e14446a01018q8p.html map是一种key-value的关系,一般都会使用make来初始化内存,有助于减少后续新增操作 ...

  2. 提高测试脚本复用性降低DOM结构引起路径变化的影响

    问题描述 在定位元素时直接复制的xpath. 但是因为下面这些原因导致之前引用的路径失效, 不得不频繁修改脚本重新定位元素, 大降低了脚本的复用性, 也增加了维护的成本: 1. UI修改 (比如增加了 ...

  3. Log4j2中RollingFile的文件滚动更新机制

    一.什么是RollingFile RollingFileAppender是Log4j2中的一种能够实现日志文件滚动更新(rollover)的Appender. rollover的意思是当满足一定条件( ...

  4. BZOJ_1705_[Usaco2007 Nov]Telephone Wire 架设电话线_DP

    BZOJ_1705_[Usaco2007 Nov]Telephone Wire 架设电话线_DP Description 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是 ...

  5. 使用ASIFormDataRequest完成用户的登录操作

    ASIFormDataRequest是用于向表单post数据或get数据,可以用于用户向服务器端发送请求完成登录注册,上传下载数据的操作. 之前写过一篇文章是介绍使用ios内置的功能完成登录操作(NS ...

  6. 使用bat打开多个cmd窗口执行gulp、node

    一.使用场景 使用场景:项目发布前 操作步骤: 1.执行gulp,对文件进行压缩.合并等操作: 2.在1执行完成后,对1中合并的文件如default.css进行多主题色的自动生成,在这里使用node处 ...

  7. C#多线程中的异常处理

    常规Thread中处理异常 使用Thread创建的子线程,需要在委托中捕捉,无法在上下文线程中捕捉 static void Main(string[] args) { ThreadStart thre ...

  8. 在linux服务器之间复制文件和目录命令scp

    scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能会稍微影响一下速度.当你服务器 ...

  9. Uiautomator--出现报错“urllib3.exceptions.ProtocolError:<'Connection aborted.',error<10054,''>>”的解决方式!

    在运行uiautomator时,出现报错"urllib3.exceptions.ProtocolError:<'Connection aborted.',error<10054, ...

  10. 深度学习之循环神经网络(RNN)

    循环神经网络(Recurrent Neural Network,RNN)是一类具有短期记忆能力的神经网络,适合用于处理视频.语音.文本等与时序相关的问题.在循环神经网络中,神经元不但可以接收其他神经元 ...