点播CDN回源标准化策略

一、背景&问题:

  • 背景:

  • 历史上公司点播CDN接入的厂商就比较多

  • 厂商之间回源的方式存在细节上的差异

  • 不同的厂商之间专线大小存在差异

  • 厂商之间的定位不同,有全镜像存储厂商,作为源站资源副本永久存储,也有镜像存储厂商

  • 问题:

  • 在有新的流量做调度切换或者专线异常恢复的时候,专线和UPOS源站的压力较大

  • 厂商回源策略有黑盒,在出现问题的时候定位难度较大,处理效率比较低

二、点播回源架构的策略变化和演变:

1、点播回源故障具体案例和反思

多厂商专线在某次故障期间和专线恢复时存在专线带宽突发的情况

图片

图片

图片

事后我们分析,专线上涨是由于厂商专线下面不同类型回源影响到的,而在故障当下,我们因为缺失细粒度的专线监控,而且我们也不能做CDN切量的操作,因为会担心流量有雪崩的风险,所以定位和止损的效率不高

 2、回源架构分析

为了解决以上的问题,提升CDN厂商回源稳定性、保障源站安全,在出现问题时能快速定位并且及时止损,减少因为回源问题导致CDN质量受损的情况。在调研前期发现对接的各家商业CDN的回源策略发现主要存在以下两种常见的回源情况:

  • 一种是用户分片请求后,要等待整文件回源完成之后再返回分片,这样容易引起用户的播放延迟增大

  • 一种是分片回源时,对分片所属的整文件进行同步拉取,这会极大的放大回源带宽,给源站造成压力

图片

3、回源优化方案

在分析了厂商回源架构后,基于公司的点播业务特性提出了一个回源标准化方案,主要的逻辑如下:

  • 首先让同步分片回源优先响应,降低用户播放延迟

  • 其次根据分片回源请求的频次统计,对视频文件的冷热进行判断

  • 判定为热文件时,整文件同步拉取,以此来降低这部分热资源分片再次请求时的回源带宽

  • 判定为冷文件的情况下,放入整文件回源对列,等待流量低峰时错峰下载落存储,避免流量高峰时段影响源站

  • 然后对整文件下载的逻辑进行流控限速,避免大幅放大回源带宽

  • 最后在极端情况专线中断时,停止异步整文件回源和主动分发拉取,保障用户同步分片回源正常走公网,降低业务影响

图片

4、  监控依赖优化

实时厂商点播回源策略和分类回源带宽监控数据设计

图片

图片

这样带来的收益有:

  • 首先在回源带宽出现异常时快速定位异常回源类型

  • 其次是厂商回源策略不再黑盒,可以依据回源策略调整控制厂商的回源带宽,避免对源站产生压力

  • 最后是能快速确认因回源导致的CDN质量问题

5、  商业CDN存储分桶方案

在执行点播回源标准化方案过程中因点播CDN和存储解耦的架构演进,从CDN资源运营的角度看,会有两个收益

  • 首先是可以依赖专线和网关能力上限最大程度实现CDN故障时的厂商间切换

  • 其次在商务成本有优化的前提下,能提高切量的效率,缩短收益获取的时间

同时在回源侧也会带来更复杂的环境

因此我们在回源侧做了改进

  • 首先是对全镜像厂商适配分桶方案,将不同的回源类型进行拆分,分别做不同优先级和策略保障,并且兼容到了CDN回源标准化的实施中

  • 其次是CDN和存储解耦后进行资源需求测算,测算单位CDN接入带宽所对应的专线容量、临时存储大小、两侧网关需求

  • 最后配合采购、网络推动CDN厂商以及存储业务方做对应的资源扩容

优化后的架构方案如下:

图片

6、  回源安全优化

为了保障源站安全,回源标准化方案引入了OSIG鉴权

图片

因为CDN和源站公网鉴权都采用UPSIG鉴权方案,源站公网地址如果泄漏,用户可以通过更换源站域名方式访问,对源站安全带来不可控的风险

因此引出了OSIG的鉴权方案,厂商CDN回源时额外新增OSIG签名,隔离CDN和源站的鉴权逻辑,从而达到保护源站安全的目的

三、总结和展望:

回源标准化的过程持续了大半年,虽然遇到了各种各样的问题,方案也在逐步演进,好在方案得以初步实现,向着符合预期的方向前进,总体上完成了大部分的功能,接下来我们将会继续站在资源运营的角度上优化各类资源,让点播的CDN业务更加稳定可靠。

-End-

作者丨振涛

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/43416.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qint64 pendingDatagramSize() const;

qint64 pendingDatagramSize() const; 是 Qt 的 QUdpSocket 类中的一个成员函数。这个函数用于查询 UDP 套接字上等待读取的下一个数据报(datagram)的大小,单位是字节。 当你使用 QUdpSocket 来接收 UDP 数据时,这个函数可以帮助…

实现寻找最近创建的文件并写入数据

c中实现如下功能: 1.在active函数中实现:创建Profile/###.cvs,其中###代表当前时间 2.在write函数中实现:找到时间最近的cvs文件,写入数据 实现 要在C中实现这两个功能,可以使用标准库来处理文件操作和…

Spring Boot整合MongoDB实现事务管理

Spring Boot整合MongoDB实现事务管理 概述 Spring Boot是一种快速开发Spring应用的方式,它提供了大量的自动配置和默认设置,以简化开发流程。MongoDB是一个基于文档的NoSQL数据库,以其高性能和灵活的数据模型而受到欢迎。从MongoDB 4.0版本…

HTTP的请求报文和响应报文是怎样的,有哪些常见字段?

http报文分为请求报文和响应报文 请求报文包含:请求行、请求头、空行、、请求体 请求行包含: 方法:即要执行的操作,如get,post、put、delet 资源路径:请求的资源的URL HTTP版本:使用的http协议…

docker run enteypoint怎么样使用呢?

在使用 docker run 命令时,ENTRYPOINT 通常是在 Dockerfile 中定义的,用于指定容器启动时默认执行的命令。但是,docker run 命令也提供了一个 --entrypoint 参数,允许你临时覆盖 Dockerfile 中定义的 ENTRYPOINT。 以下是关于如何…

Python提取视频文案

Python提取视频文案 1、背景描述2、视频转音频3、音频转文字 1、背景描述 在多媒体应用中,视频是一个信息量巨大的载体。然而,有时我们需要从视频中提取语音并转换为文本,以用于文本分析和机器学习训练 其中主要涉及到两个过程:视…

LeetCode67(二进制求和[位运算,大数运算])

二进制求和 题目要求: 给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。 这道题其实有几种解法.我们先来介绍简单的方法. 我们可以将两个字符串的二进制转成十进制,获取对应值相加之后,我们可以不断对2取余,获取尾数拼接即可.也就是像我们平常求一…

微信公众平台、公众号、小程序联动

欢迎来到我的博客,代码的世界里,每一行都是一个故事 🎏:你只管努力,剩下的交给时间 🏠 :小破站 微信公众平台、公众号、小程序联动 如何通过unionid获取到微信公众openid如何根据code获取微信公…

UI组件库---vantList组件接口多次调用大坑问题

问题描述:当使用refesh下拉操作时,vanlist组件会多次调用(大概三次)! 解决方案: 1、接口错误的时候,大量重复请求。 可能接口错误时vant3内部某些变量没重置,导致一直重复请求&am…

利用 STM32 实现多协议物联网网关:Modbus/Zigbee 到以太网/Wi-Fi 的数据桥接

摘要: 随着物联网技术的飞速发展,不同通信协议之间的互联互通成为了构建智能化系统的一大挑战。本文将以实战项目为例,详细介绍如何利用 STM32 微控制器实现 Modbus/Zigbee 与以太网/Wi-Fi 之间的协议转换,从而打通传感器数据上传至服务器的“…

短视频矩阵系统源代码开发---多种剪辑逻辑再次升级

揭秘AI短视频运营秘籍,轻松涨粉! 1、数据管理方面,我们提供了全面的账号及视频Top 10的数据统计服务。 2、在AI视频创意制作领域,我们采用原创视频批量剪辑、阶乘算法和去重原理,以提升内容的独特性和吸引力。 3、同…

【pytorch22】激活函数与GPU加速

激活函数 ReLu还是还是可能出现梯度弥散&#xff0c;因为x<0的时候&#xff0c;梯度还是可能小于0 leaky relu&#xff0c;在x<0的时候&#xff0c;梯度就不会为0&#xff0c;梯度不会不动 Relu函数在x0处是不连续的 一种更加光滑的曲线是SELU&#xff0c;是两个函数的…

FOC算法

如下图所示的&#xff0c;是FOC算法的整体流程图&#xff0c;下面图中最重要的部分就是SVPWM和3相全桥电路&#xff0c;和送给SVPWM进行运算&#xff0c;运算之后的结果为三个相差120的马鞍波&#xff0c;然后将这三相马鞍波作为控制全桥MOS开关的三个PWM波的占空比&#xff0c…

判断线程是否存活

isActive()方法&#xff1a;判断当前的线程是否处于活动状态。 活动状态是指线程已经启动且尚未终止&#xff0c;线程处于正在运行或准备开始运行的状态&#xff0c;就认为线程是存活的。 class Alive implements Runnable {Overridepublic void run(){for(int i0;i<4;i){…

C#中,不同命名空间下面完全相同的类对象进行赋值

背景前提&#xff1a; 1、在命名空间ModelA、ModelB下&#xff0c;都有完全相同的类定义ClassX、ClassY、ClassZ &#xff1b; 2、ClassBase是父类&#xff0c;它的子类有&#xff1a;ClassX、ClassY、ClassZ 3、在ModelB下不能访问ModelA&#xff1b; 4、有大量文件&…

前端笔记-day13

文章目录 01-体验vw和vh02-vw适配02-适配.htmldemo.lessdemo.css 03-vw和vh不能混用03-vw和vh.htmldemo.lessdemo.css 04-综合案例-酷我demo.htmldemo.lessbase.lessdemo.css 酷我&#xff08;标准版&#xff09;index.htmlindex.lessindex.css 01-体验vw和vh <!DOCTYPE ht…

记一次线上流量突增问题排查

一.问题 接流量告警出现获取 xx 信息接口调用次数同比往年大促活动猛涨.扩大至 10 倍之多.心里顿时咯噔一下.最近各种严打,顶风作案.某不是摸到电门了.一下子要把自己带走.从此走向求职之路.一时间脑子哇哇的思绪万千. 202x.5.20 大促开门红的调用.这个是往年活动的时候的调用…

如何在 Odoo 16 中生成 CSV 报告

在 Odoo 中&#xff0c;我们需要生成多种类型的文件以用于不同的目的。CSV 报告允许用户从 Odoo 数据库导出结构化数据。CSV 格式受到各种应用程序和工具的广泛支持&#xff0c;因此可以轻松地与外部系统&#xff08;如电子表格&#xff08;例如 Microsoft Excel、Google Sheet…

铁威马NAS教程丨为什么修复文件系统、为卷扩容、增加及删除 SSD 缓存等操作失败?

适用机型&#xff1a; 所有 TNAS 型号 适用版本&#xff1a; 所有 TOS 版本 问题现象&#xff1a; 在尝试修复文件系统、为卷扩容、增加或删除 SSD 缓存时(TOS 5)&#xff0c;可能因卷被其他进程占用而操作失败。 解决方法&#xff1a; 为了成功执行上述操作&#xff0c;您…

谷歌云 | Gemini 大模型赋能 BigQuery 情感分析:解码客户评论,洞悉市场风向

情感分析是企业洞察客户需求和改进产品服务的重要工具。近年来&#xff0c;随着自然语言处理 (NLP) 技术的飞速发展&#xff0c;情感分析变得更加精准高效。Google 推出的 Gemini 模型&#xff0c;作为大型语言模型 (LLM) 的代表&#xff0c;拥有强大的文本处理能力&#xff0c…