小结:

1、

中心处理系统

/1/将定制后的巡检任务拆分,通过配置与任务分发系统、CMDB*( configuration management database)将派发到边缘拨测系统
/2/处理边缘拨测系统返回的拨测结果,进行分析计算

https://mp.weixin.qq.com/s/trAUlnQM1BGgxFALrLM_SQ

干货|爱奇艺CDN巡检系统技术解析

原创: 系统网络团队 爱奇艺技术产品团队 昨天

CDN的全称是Content Delivery Network,即内容分发网络,是一种分布式网络系统。CDN依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。爱奇艺作为中国高品质的视频娱乐服务提供者,致力于让人们平等、便捷地获得更多、更好的视频,CDN的稳定运行是保障用户获得丰富、高清、流畅视频体验与服务的基石,其重要性不言而喻。

爱奇艺CDN采用混合云架构,包括自建CDN和商业CDN数万台CDN服务器,为月活超过5亿用户提供服务。混合云架构可以提升资源利用率、降低成本,但同时也带来了软件与服务变更管理和CDN服务质量监控的困难。软件与服务变更可以被称之为运维领域的“阿克琉斯之踵”,稍有不慎就像打开了“潘多拉魔盒”,爱奇艺自建CDN和商业CDN都在软件升级与配置变更、机房割接、服务器故障下线再重新上线后出现过配置不统一、文件不完整等问题导致用户报障,这是影响爱奇艺CDN服务稳定性的重要问题。在此同时,商业CDN还出现过劫持率较高、非本省覆盖,定向流量出网的情况。更严峻的是,以上很多异常都是用户报障后才被分析出来,我们很被动,用户体验也不好。所以,为了随时掌握全网数万台CDN服务器的服务情况,同时要保证在CDN服务器在进行软件与服务变更后进行上线之前就发现问题,我们设计和实现了CDN巡检系统。

系统整体架构

爱奇艺巡检系统目前支持自建和商业CDN的全量IP功能巡检、定向调度巡检、覆盖率与劫持情况巡检,其中:

功能巡检:验证相关视频文件是否满足奇艺CDN功能需求,验证其线上配置是否满足标准化。

定向流量巡检:验证提供服务的CDN服务器是否属于定向地址库,提供的定向流量服务是否正常。

覆盖率与劫持巡检:验证提供服务的CDN服务器是否由本省服务器提供服务,是否存在劫持情况。

爱奇艺CDN巡检系统主要包括三个子系统,如图一为系统架构图:

1. 巡检任务生成系统:负责数万台CDN服务器的巡检用例的定制化生成,支持人工定制或者定时触发巡检。

2. 中心处理系统:爱奇艺CDN巡检系统核心,负责将定制后的巡检任务拆分,通过配置与任务分发系统、CMDB将巡检任务派发到边缘拨测系统,同时还要处理边缘拨测系统返回的拨测结果,进行分析计算。

3. 边缘拨测系统:负责自建CDN和商业CDN的拨测,并将拨测结果反馈给巡检任务中心处理系统,覆盖移动、联通、电信、广电、方正宽带等多家运营商,20多个省份,包括800多个探测点。

巡检任务生成系统

巡检任务生成系统如图二所示,主要由三部分组成:

图二 巡检任务生成系统

1. 巡检用例筛选器:巡检用例筛选器从线上筛选覆盖各端访问的所有类型的视频格式文件,对筛选出的文件添加巡检标识符,生成巡检文件列表,作为巡检用例生成器的输入,同时通过智能分发系统将巡检文件分发到CDN存储。

2. 实时IP库:由各家CDN实时IP接口汇聚而成,作为巡检用例生成器的输入,用于全量IP巡检用例的生成。

3. 巡检用例生成器:结合巡检文件列表与实时IP库,对文件添加相应鉴权参数与IP替换,将其“加工”成不同的CDN巡检用例,写入redis,供中心处理系统随时调用处理。

技术挑战

目前爱奇艺使用了多家CDN资源,服务器高达数万台,带来了两个挑战:

1. 保证CDN服务IP实时、准确

实时性:我们的做法是要求每家CDN返回的API接口实时动态更新,粒度为5分钟,添加时间戳进行校验。

准确性:结合爱奇艺及多个第三方厂商的IP地址库等地址库对每一个IP进行服务区域和运营商识别,将其归类写入MySQL,用于比对校验。对于IP总数小于500的厂商,比对时发现差异超过其IP总数的5%进行报警,对于IP总数大于500的厂商,我们将差异扩大到10%,当报警发生时,及时与商业CDN沟通是否发生了故障和流量调整。

2. 保证极低的巡检用例生成错误率:每家商业CDN都有不同的访问规范和要求,需要兼容域名和IP等多维度的URL生成逻辑,基础巡检文件个数100+,“定制”化的巡检用例高达数百万,巡检用例生成器需要保证生成用例错误率小于0.001%。

中心处理系统

作为巡检系统的“大脑”,中心处理系统需要数据处理中心、CMDB、配置与任务分发系统、智能调度系统的协作与配合,如图三所示,完成复杂的巡检测试任务,其中:

图三 中心处理系统

数据处理中心:数据处理中心将巡检任务生成系统产生的巡检任务用例拆分,结合分布式消息处理框架celery,支持上百万QPS的巡检用例拆分,秒级将巡检任务发送给配置与任务分发系统。数据处理中心使用ZeroMQ收集边缘拨测系统的拨测结果,通过相关分析计算,将巡检结果实时投递到业务大屏、生成巡检日报和巡检测试报告,与智能调度系统联动。

配置与任务分发系统: 由于在CDN 复杂网络环境下进行软件部署、配置同步、应用状态管理是非常复杂的,开源的ansible、puppet等工具已无法满足快速迭代、持续交付的需求,爱奇艺系统网络团队自研的配置与任务分发系统目前支持数万台服务器配置分钟内同步,可重试可重入,结合CMDB,快速将巡检任务分发到边缘拨测系统,保障巡检快速、高效稳定。

智能调度系统:巡检分析结果可以直接与智能调度系统联动,根据故障类型做出业务决策,如果是IP粒度的小型故障,自建CDN自动上下线,对于商业CDN要求其两个小时内处理完毕,无法修复要求其摘除IP,更新API接口。如果是大型故障,如某省、某运营商故障或某类型文件无法播放,智能调度系统及时调整流量,使用其他CDN进行灾备切换。

技术难点:对于全量IP拨测,在巡检任务拆分阶段需要结合IP所属运营商、不同运营商IP分布密度,拨测agent实时服务状态,拨测agent与被巡检CDN的网络状态等信息做出决策,保障99%以上的拨测覆盖率。

边缘拨测系统

边缘拨测系统是巡检拨测任务的真正执行者,分布在全国各大运营商、多个省份,有着强大的分布式处理能力,并且部署方式简单,只需部署定制化的非侵入拨测脚本,任一服务器都可作为拨测agent。配置与分发系统负责巡检拨测任务触发,监控每一个拨测任务的执行情况。如图四所示,拨测agent支持两种巡检拨测方式:

图四 边缘拨测系统

1. IP模式:用于全量IP巡检,通过IP直连方式获取被巡检CDN的拨测结果,主要用于功能测试。

2. 域名解析模式:线上用户的真实访问是通过域名方式来完成的,由于各家CDN为了保障用户遵循自身的调度策略要进行二次调度,可能出现使用外省资源服务用户,这样会降低用户访问质量甚至出现劫持的情况。同时,定向流量调度对于各家CDN的二次调度要求更为苛刻, 时刻需要保障响应IP符合其提供的地址段。拨测agent通过模拟真实用户,使用域名方式访问CDN,获取各家CDN的本省覆盖率和劫持情况、定向流量调度情况。

系统应用场景

CDN巡检系统上线后,自建CDN与商业CDN在进行服务与配置变更时都需要经过巡检系统巡检通过后才能上线服务。另外的,巡检系统对于已经在线上服务的自建CDN与商业CDN还会进行定时巡检,如图五所示。

图五 巡检系统应用场景

1. 服务变更:在新IDC节点上线、服务器上线和IDC节点割接的上线流程中,调用巡检系统对CDN服务器功能进行检查,通过检查才允许服务器在智能调度系统上线,避免异常服务器上线。

2. 配置变更:在进行软件升级或者配置变更的过程中,实时调用巡检系统进行CDN服务器功能检查,在发现异常的情况下及时回滚,降低影响范围和时间。

3. 商业CDN变更:新商业CDN上线对接、新需求上线、故障恢复上线的过程中,调用巡检系统进行CDN服务器进行功能检查,通过检查后才允许上线,降低商业CDN的故障概率。

4. CDN定时巡检:CDN巡检系统定时创建CDN巡检任务,对CDN服务器的功能性,本省覆盖率、劫持情况、运营商定向流量业务进行检查,及时发现线上异常,并采取相应措施。

成果与展望

爱奇艺CDN巡检系统已平稳运行半年,检测出相关功能配置问题100多起,文件MD5不一致问题10起, 定向流量出网5起,推动三家商业CDN整改服务资源,确保其保障100%的本省覆盖率。未来,爱奇艺巡检系统会支持更多的巡检模式,结合人工智能技术,为未来的IOCP业务、奇速播业务保驾护航,保障用户极致的视频娱乐体验。

干货|爱奇艺CDN巡检系统技术解析的更多相关文章

  1. 对爱奇艺PC Web主站来说,良好的SEO能够帮助其获得更多的搜索流量,因而页面上一些非常重要的内容仍然需要依靠服务端进行渲染,由于另外开发一套基于Node的SSR后台成本较高,而乐趣(基于java和velocity模板引擎)平台作为渲染系统已经十分成熟且运行稳定,在充分试验后,我们决定在Uniqy中使用服务端同步与客户端浏览器异步二次渲染相结合的方式,结合Vue2.0提供的 slot插槽机制,很

    https://mp.weixin.qq.com/s/eB20BoqzENO_oNk8eDg4Eg 干货|爱奇艺PC Web新框架实践 原创: 前端研发团队 爱奇艺技术产品团队 昨天      

  2. 爱奇艺直播 - 春晚直播业务API架构

    小结: 1.服务熔断策略 在网关服务中经常会对后端不同api接口做服务聚合,比如A服务 -> B服务 -> C服务 ,如果C服务出现问题,那么在调用C服务之前需要做熔断.而在设计熔断器的时 ...

  3. 爱奇艺技术分享:爱奇艺Android客户端启动速度优化实践总结

    本文由爱奇艺技术团队原创分享,原题<爱奇艺Android客户端启动优化与分析>. 1.引言 互联网领域里有个八秒定律,如果网页打开时间超过8秒,便会有超过70%的用户放弃等待,对Andro ...

  4. 一站式入口服务|爱奇艺微服务平台 API 网关实战 原创 弹性计算团队 爱奇艺技术产品团队

    一站式入口服务|爱奇艺微服务平台 API 网关实战 原创 弹性计算团队 爱奇艺技术产品团队

  5. 奇艺iOS移动端网络优化实践 | 请求成功率优化篇 原创 Charles 爱奇艺技术

    奇艺iOS移动端网络优化实践 | 请求成功率优化篇 原创 Charles 爱奇艺技术

  6. 视频下载四大神器—如何下载优酷/爱奇艺/腾讯/B站超清无水印视频

      视频下载四大神器—如何下载优酷/爱奇艺/腾讯/B站超清无水印视频  2018-07-11 |  标签»下载, 下载工具, 视频 又是视频下载,老生常谈的话题.阿刚同学已在乐软博客多次与大家分享推荐 ...

  7. 爱奇艺面试Python,竟然挂在第5轮……

    今天给大家分享我曾经在爱奇艺的面试,过程还是比较有意思的,可以给大家一些参考 聊骚阶段 嗲妹妹:你好,我是爱奇艺的HR,我们正在招聘运维开发岗位,请问您最近有在看工作机会吗? 我:(这声音也太酥了吧我 ...

  8. 从字节跳动离职后,拿到探探、趣头条、爱奇艺、小红书、15家公司的 offer【转】

    前言 博主目前从事Android开发3年,前两年一直在抖音工作.我这篇文章并不是简单的描述一些面试中的题,或者总结一些Android的知识,而是想记录我整个的想法和准备的过程,以及一些心得体会,让大家 ...

  9. 爱奇艺面试Python,竟然挂在第5轮…(转)

    今天给大家分享我曾经在爱奇艺的面试,过程还是比较有意思的,可以给大家一些参考 聊骚阶段 嗲妹妹:你好,我是爱奇艺的HR,我们正在招聘运维开发岗位,请问您最近有在看工作机会吗? 我:(这声音也太酥了吧我 ...

随机推荐

  1. ng-app&data-ng-app

    来源stackoverflow 区别:在验证html5时,ng-app会抛出一个错误,而对带data-前缀的特性不会抛出.其它方面这两个属性一样.

  2. C# - 代码重构

    隐藏更多 只暴露集合中供人使用的单一功能,将关于集合的更多功能隐藏掉. 旧版本 public class Animal{    private List<string> LanguageL ...

  3. Python不能用于大型项目?关于Python的10大误解

     语言多元化是PayPal编程文化中一个重要的组成部分.在C++和Java长期流行的同时,更多的团队选择了Jva和Scala.同时,Braintree的收购也引入了一个久经世故的Ruby社区.Pyt ...

  4. 解决tomcat端口被占用:Port 8005 required by Tomcat v7.0 Server at localhost is already in use

    问题提示8005端口被占用 首先:在cmd下,输入  netstat   -ano|findstr  8005 (什么端口号被占用就输入什么端口号),回车 再输入 taskkill  /pid  20 ...

  5. 【原创】大数据基础之Hive(1)Hive SQL执行过程之代码流程

    hive 2.1 hive执行sql有两种方式: 执行hive命令,又细分为hive -e,hive -f,hive交互式: 执行beeline命令,beeline会连接远程thrift server ...

  6. Atcoder Grand Contest 032

    打的第一场Atcoder,已经知道会被虐得很惨,但没有想到竟然只做出一题-- 思维急需提升. A - Limited Insertion 这题还是很签到的. 感觉正着做不好做,我们反着来,把加数变为删 ...

  7. uni-app hbuilderX ios离线打包,启动图修改没反应

    最后还是没反应 删除app从新安装, 可参考https://www.jianshu.com/p/47c1377c61d6

  8. springboot配置Druid数据源

    springboot配置druid数据源 Author:SimpleWu springboot整合篇 前言 对于数据访问层,无论是Sql还是NoSql,SpringBoot默认采用整合SpringDa ...

  9. vue项目关闭eslint检查

    前言 vue项目在用旧版本的vue-cli创建的时候,会询问是否添加eslint的检查, 后来的版本在创建的时候是直接添加了eslint检查. 有时候我们开发习惯不是那么严格的时候, 会不在意这些缩进 ...

  10. SQL SERVER 打开脚本报“未能完成操作,存储空间不足”

    使用用SQLCMD命令行. 1.快捷键:win+R 2.输入cmd​,确定 3.输入命令:sqlcmd -S <数据库服务器名称> -i C:\<脚本文件路径>.sql 例:s ...