产品战略专家梁宁确认出席AICon北京站,分享AI时代下的商业逻辑与产品需求 了解详情
写点什么

避免流量高峰期 CDN 问题的 10 个方法

  • 2018-07-26
  • 本文字数:2515 字

    阅读完需:约 8 分钟

在视频流媒体中,因平台火爆而出现问题是件好事。至少,这比根本没有观众要好。

也许你正在使用世界级的 CDN,但是,在大型赛事期间,当 CDN 的服务器和对等点流量变得饱和的时候,一些用户还是无法享受到流畅的体验。因为每个 CDN 拥有的容量都是有限的,所以都有其局限性。

更糟糕的是,每个 CDN 都是一个黑盒子,在任何特定时候几乎都不能提供可用容量的信息。因此,CDN 在大型赛事中的实际表现情况是无法预测的,尤其是当有不同内容供应商进行活动视频直播的时候。你会发现,实际上你和其他内容供应商在共享 CDN 这种稀缺资源上竞争。

今年的世界杯正如火如荼地进行着,可以说世界杯会是有史以来最大的流媒体活动。我们对一些进行世界杯视频直播的广播公司客户进行了采访,询问了他们为世界杯直播做了哪些准备。

根据采访,我们总结了如下10 个方面的经验。你可以主动采取这些行动,以确保用户在观看世界杯直播时尽可能获得最佳体验。用户已经为这次盛会等了足足四年,你可不想让他们失望吧。

1. 数据是关键 —— 了解 CDN 表现如何

使用 Mux、Youbora 或 Conviva 等服务以准确了解你的 CDN 表现如何。再强调一遍,每个 CDN 都是一个黑盒子,但是你至少应该从外部进行测试,并获得关于交付情况有意义的数据。

此图来源于某次活动现场直播的Peer5 分析仪表盘

Peer5 的内置流媒体分析还能对 CDN 交付提供很多洞察分析,即使你没有使用我们的 P2P 交付产品,你还是可以使用这些免费的分析数据 。如果目前你还没有分析数据,那么有一点分析总比什么都没有好。如果你有分析数据,那么可以把 Peer5 的数据和现有供应商的统计数据进行比较,以进行完整性检查。

2. 让 CDN 供应商为问题负责

CDN 提供商并不完美。它们经常返回 HTTP 错误,而且有些会优先考虑重要或者咄咄逼人的客户。与你的 CDN 提供商取得联系,准备好数据(#1 中提到的),并要求他们为你的大型赛事提供更好的性能。

如果你的 CDN 提供商没有解决问题,没有达到你的期望,就要考虑换 CDN!如今,换个 CDN 不再是个大麻烦了,通常只需要几天来部署和测试一个新的 CDN。

3. 如果你还没换 CDN,那么就用多个 CDN 以保安全

你不能仅仅依靠单独一个供应商来进行世界杯直播。流媒体直播的关键是冗余,如今使用多个 CDN 要容易得多。首先,纯粹使用 CDN 进行缓存,并删除任何类似摄入等供应商锁定的功能。然后,可以轻松地添加另一个(或者两个,甚至四个!)CDN。接着,你可以在 CDN 之间进行负载平衡,如果出现问题,就切换到没有问题的 CDN 上。

即使你无法更改供应商,无法真的从你的 CDN 迁移,也有办法使用额外的 CDN 进行缓存和冗余,同时仍然使用你的主 CDN 专门进行摄入 / 编码。

4. 改进多个 CDN 切换逻辑

你是如何在 CDN 之间实行负载平衡的?我们看到很多平台仍然使用非常简单的静态负载平衡方案。这意味着,每个用户在整个过程中被分配到一个 CDN,这可能是个问题。首先你必须要测试的是:如果一个 CDN 不能工作了(或者表现糟糕),是否能中途切换 CDN?你可以自己构建这个功能,或者采用第三方解决方案,比如:Cedexis 或 DLVR。

5. 多样化 CDN —— 添加一个无服务器 CDN

给你自己多准备条路。点对点(Peer-to-Peer,简称 P2P)网状网络在解决大规模问题方面已经有几十年的历史了。一旦谷歌开源 WebRTC,Peer5 就可以构建一个 P2P,一个无需终端用户下载或安装的无服务器 CDN,因为 WebRTC 已经嵌入了浏览器。这意味着 Peer5 对于终端用户来说是透明的,就像任何一个基于服务器的 CDN,并且与目前的流媒体架构无缝集成。

这个混合方法(传统的CDN + 无服务器CDN)很独特,因为它使交付堆栈完全多样化了,不受负载的影响。P2P CDN 是最终的流媒体保险方案,其中最棒的是,它完全免费。如果一切正常,并且传统的CDN 表现良好,那么你将永远不需要P2P 容量,也就不必为此付费。但是,如果一切都乱了套,并且观看人数太多了,那么,你就真的需要一个解决方案来解救你。

6. 增加一些额外的服务器

如今,很多公司运营着自己的数据中心,有时也和商业 CDN 合作。如果你运营自己的 CDN,谨慎起见,要增加一些额外的服务器以防万一。考虑到惊群(thundering herd)现象,要在为时已晚前启动更多的实例。

7. 准备好阻止更多用户访问视频流

没有人希望自己处于这个境地,但是,你也许需要在 CDN 出现问题的地区掐断连接。

考虑告诉用户是否 / 何时遇到了交付问题。或者,考虑从页面中删除视频元素一段时间。完全没有视频比有个不断出现错误和缓冲的视频要好一点。

通过采取这个步骤,你也减轻了 CDN 的负担。你肯定不希望在大型节目中出现错误信息或推送代码更改。提前开发这个功能,并确保你能够在需要的时候马上就能触发该功能。

8. 准备好妥协 —— 添加更低的格式标准

由于质量不够好,很多内容供应商不再提供 360p 格式。但是,在大型节目中,你应该考虑把它们添加进来。更低的格式标准意味着即使你的 CDN 受到压力,容量有限,一些终端用户仍然可以观看。

9. 完美并不总是好事 —— 删除更高的格式标准

一种更有趣的方法是,如果碰到紧急状况(容量问题),删除最高格式标准的能力。ABR 算法是很贪婪的,这意味着每个播放者都会试图从 CDN 攫取尽可能多的带宽,以获得尽可能高的视频质量。每个播放器都是独立的,不会“知道”服务器是否压力过大或者当前有多少个其他用户在请求视频片段。很有可能发生这样的情况:所有播放器都在争夺达到同样的最高格式标准,但是最终,没有一个能够做到(可以想想囚徒困境)。

同样,这不是一个理想的场景,但是,当糟糕的事情开始发生时,拥有一个可以消除副本的故障安全措施也许是非常有用的。

10. 了解极限 —— 事先进行压力测试

不幸的是,目前还没有完美的全球压力测试解决方案。有像 LoadRunner 这样的综合解决方案,会创建数以千计的请求发送给你的 CDN,但是这些请求通常将来自位于同一数据中心的几台服务器,它们和你的 CDN 有着良好的连接性。你不能真正超高规模地或在有困难的地区测试你的 CDN,这会非常昂贵和耗时。

我们找到的最佳解决方案是,使用以前大型赛事的真实数据,并认真地深入研究那些第 1 条中的分析所识别出的薄弱痛点。

祝你好运!

查看英文原文: 10 ways to avoid CDN issues at peak

感谢张婵对本文的审校。

2018-07-26 08:517079
用户头像

发布了 199 篇内容, 共 85.2 次阅读, 收获喜欢 295 次。

关注

评论 1 条评论

发布
用户头像
不错不错
2020-03-08 18:35
回复
没有更多了
发现更多内容

华为云消息队列服务荣获首个双擎可信云稳定性最高级认证

华为云开发者联盟

开源 安全 消息队列 可信云 DMS Kafka版

基于JSX的全新BDD工具 - Crius

RingCentral铃盛

大数据开发之数仓工具Hive(一)

@零度

大数据 hive 数仓工具

Android C++系列:Linux Socket编程(二)网络套接字函数

轻口味

28天写作 Android; 12月日更

我也想说说日志,但是我不想说漏洞。

why技术

纯 Git 实现前端 CI/CD

杨成功

架构 前端 CI/CD 签约计划第二季

13. 《重学 JAVA》-- 抽象类和接口

杨鹏Geek

Java 25 周年 28天写作 12月日更

解析WeNet云端推理部署代码

华为云开发者联盟

gRPC 语音 PyTorch ASR WeNet

30个类手写Spring核心原理之AOP代码织入(5)

Tom弹架构

Java spring 源码

存储空间降为原来的1/7,TDengine在中移物联网轨迹数据存储中的应用

TDengine

数据库 tdengine 时序数据库

深入浅出 Java 中枚举的实现原理

恒生LIGHT云社区

Java 编程语言 枚举

「可观测产品首发」观测云免费版正式上线!开箱即用,观测无限

观测云

Linux之rm命令

入门小站

Linux

龙蜥社区一周动态 | 12.06-12.10

OpenAnolis小助手

龙蜥社区

拥抱开源,共建生态!观测云 DataFlux-Func 代码全部开源

观测云

云智慧智能运维算法技术黑板报 | 内容合集

云智慧AIOps社区

机器学习 大数据 智能运维 算法实践 技术专题合集

卧槽!Spring中竟然有12种定义Bean的方法?

北游学Java

Java、 SP【ring

百度搜索中“鱼龙混杂”的加盟信息,如何靠AI 解决?

百度Geek说

架构 AI 后端 百度搜索

源码超度:String、StringBuffer、StringBuilder

无心水

StringBuilder StringBuffer String字符串

30个类手写Spring核心原理之MVC映射功能(4)

Tom弹架构

Java spring 源码

在中国如何打造一个有生命力的开源项目?

Jianmu

DevOps 持续集成 CI/CD 开源社区 持续部署

阿里巴巴、埃森哲、德勤三方圆桌对话——《与数字化先锋共绘创新蓝图》

大咖说

阿里巴巴 大咖说 数字经济 数智化

使用 scipy.fft 进行Fourier Transform:Python 信号处理

华为云开发者联盟

Python 音频 信号处理 傅立叶变换 Fourier transform

观测云高分通过等保三级认证,信息安全体系建设领先行业

观测云

Linux一学就会之LVM管理和SSM存储管理器使用

学神来啦

Linux centos 运维 lvm linux云计算

前端架构师的 git 功力,你有几成火候?

杨成功

git 架构师 GitFlow git 规范 签约计划第二季

云原生时代,领域驱动设计思想(DDD)如何落地?

华为云开发者联盟

软件架构 架构设计 建模 领域驱动设计思想 领域模型

iOS 开发者福音:iOS 项目也能支持 MQTT 5.0 啦!

EMQ映云科技

ios mqtt emq tvos osx

前端开发之cypress的自动化实践

@零度

前端 Cypress

【SpringCloud技术专题】「Gateway网关系列」(1)微服务网关服务的Gateway组件的原理介绍分析

洛神灬殇

Spring Cloud api 网关 SpringCloud Gateway API Gateway 12月日更

在线JSON转flow工具

入门小站

工具

避免流量高峰期CDN问题的10个方法_音视频(后端)_Hadar Weiss_InfoQ精选文章