红帽白皮书新鲜出炉!点击获取,让你的云战略更胜一筹! 了解详情
写点什么

爱奇艺 CDN IPv6 调度系统实践

爱奇艺技术产品团队

  • 2019-08-26
  • 本文字数:4584 字

    阅读完需:约 15 分钟

爱奇艺CDN IPv6调度系统实践

IPv6 是“Internet Protocol Version 6”(互联网协议第 6 版)的缩写,是互联网工程任务组(IETF)设计的用于替代 IPv4 的下一代 IP 协议。IPv4 地址资源紧缺严重制约了互联网的应用和发展。IPv6 不仅能解决网络地址资源数量的问题,而且也解决了多种接入设备连入互联网的障碍。


2017 年底,中共中央办公厅和国务院办公厅印发了《推进互联网协议第六版(IPv6)规模部署行动计划》,要求加快推进基于 IPv6 的下一代互联网规模部署工作。计划指出,到 2018 年末国内 IPv6 活跃用户数要达到 2 亿,2020 年末达到 5 亿,2025 年末中国 IPv6 规模要达到世界第一。


新互联网时代科技进步与市场趋势的推动之下,爱奇艺积极响应并全力开展 IPv6 专项部署工作,推动基础网络、后台服务和前端应用全面向 IPv4/IPv6 双栈支持演进,并以实际的用户数和流量贡献,于 2019 年 6 月被 IPv6 规模部署专家委员会评为优秀案例。


爱奇艺调度系统(包括 Anycast DNS 调度和 HTTP 视频调度)作为爱奇艺 CDN 核心系统之一,在爱奇艺技术团队的努力下,已经全面具备 IPv6 服务能力,支持各项业务高效对接 IPv6 基础资源,加快了爱奇艺 IPv6 规模部署进程。

调度系统设计

系统架构

爱奇艺 CDN 调度系统全流程架构如下图所示。



以下是架构图中各个系统的角色介绍:


客户端:爱奇艺提供的播放客户端,覆盖手机、平板、电脑、电视和网页等多个平台,客户端首先访问 DNS 解析 HTTP 视频调度域名,然后请求 HTTP 视频调度获取 CDN 下载地址,最后从 CDN 下载视频数据;


探测服务器:一组开启双栈的 HTTP 服务器,为全网客户端提供探测服务,帮助客户端判断本地 IPv4 和 IPv6 可用情况;


Local DNS:客户端使用的 DNS 服务器地址,由用户所在运营商提供;客户端向 Local DNS 发起域名解析请求,Local DNS 递归查询到爱奇艺 Anycast DNS,最后把结果返回给客户端;


Anycast DNS:爱奇艺自研的高性能 DNS 系统,单机 QPS 可达近百万,基于 Anycast 技术部署,为全球用户提供高可用的 DNS 服务,支持 IPv6 后可提供 IPv6 AAAA 记录查询解析;


HTTP 视频调度:CDN 核心系统之一,根据客户端请求来源地址归属运营商和区域,为用户选择服务质量最优的 CDN,确保用户享受极致播放体验;


爱奇艺混合 CDN:包括自建 CDN 和商业 CDN,为爱奇艺数亿用户提供就近下载服务;


资源管理平台(天工):资源统一管理平台,实现从资源需求收集、商务拓展、资源采购、资源部署、资源管理、基础运维和成本计算的统一管理,旨在打造以流程管理为基础的自动化运维平台;


调度管理平台(伏羲):调度管理平台,管理 DNS 调度和 HTTP 视频调度各种配置和策略。调度管理平台从资源管理平台中自动同步机房和服务器基础信息,借助配置管理平台实现配置的快速下发和生效;同时支持通过域名和 IP 维度进行拨测,实时探测全网服务器健康状态,自动下线故障服务器;


配置管理平台(Fast):作为 CDN 服务器的管理平台,联动资源管理平台和调度管理平台等多个系统,同步资产和服务等基础信息。利用部署在多个运营商+区域的 Proxy 集群,保证全网 CDN 节点的连通率,提供稳定可靠的配置管理服务。


SDN 管理平台:网络配置管理平台,实现基于模板支持自定义业务场景的网设配置功能,支持批量下发自定义业务场景配置,支持 netconf、ssh 和 snmp 多种管理方式。通过生成配置架构及网元全量配置,实现核心 IDC 建设自动化建设。

系统设计

爱奇艺技术团队对客户端、调度和后台管理等多个系统做了大量设计工作来支持 IPv6。


下面简要说明各个系统模块针对 IPv6 功能的设计工作:


客户端:爱奇艺提供了包括手机、平板、电脑、电视和网页等多种播放客户端,覆盖数亿用户。目前绝大多数客户端都已经支持 IPv6。当客户端启动以及检测到网络变化时,访问爱奇艺 IPv6 探测服务器,分别通过 IPv4/IPv6 发出 HTTP 请求,以此判断本地 IPv4/IPv6 网络连通性;在支持 IPv6 的前提下,客户端优先解析视频调度的 IPv6 地址;客户端在通过 IPv4 或 IPv6 请求调度器时,携带 Net-Stack header,告知视频调度器本地协议栈支持情况;


Anycast DNS:开启双栈,支持通过 IPv4/IPv6 DNS 查询 A 记录和 AAAA 记录。同时提供永远在线的 IPv4&IPv6 权威 DNS 服务;


HTTP 视频调度:开启双栈,支持通过 IPv6 地址查询客户端归属运营商和区域;根据用户请求头中的 Net-Stack 参数以及来源 IP 地址,判断客户端 IPv4/IPv6 支持情况,结合调度策略开关和 IPv6 资源负载,为用户返回 IPv4 或 IPv6 下载地址。对于仅支持 IPv6 的客户端,返回 IPv6 下载地址;对于支持双栈的客户端,会在 IPv6 资源允许的情况下,返回 IPv6 下载地址;对于部分支持双栈的客户端,当 IPv6 资源紧张的情况下,返回 IPv4 下载地址;对于仅支持 IPv4 的客户端,返回 IPv4 下载地址;流程如下图:



HTTP 请求头 Net-Stack 取值示意含义如下:


= X:标识客户端仅支持 IPv4;


= Y:标识客户端仅支持 IPv6;


= Z:标识客户端支持双栈;


爱奇艺混合 CDN: 包括爱奇艺自建 CDN 和商业 CDN,都需要开启双栈,同时支持 IPv4 和 IPv6,结合调度管理平台,可支持部分节点和部分商业 CDN 支持 IPv6 的资源模式,可保证资源可以灰度平滑上线;


资源管理平台:为了支持 IPv6,资源管理平台实现了 IPv6 地址段管理闭环,其中包括:基于 IDC 的 IPv6 地址段录入、自动分配、拨测和回收等功能,为了完成全网 IPv6 地址的分配,开发了基于命令行的自动化分配工具,结合配置管理平台完成了全网存量的 IPv6 的配置。在服务器上线(装机子流程)流程根据 IDC IPv6 的状态,可以自动分配 IPv6 地址。


调度管理平台:从资源管理平台自动同步服务器 IPv6 配置,增加 DNS 调度和 HTTP 视频调度 IPv6 地址库,拨测系统兼容 IPv6;基于区域和机房两个维度的增加 IPv6 开关,精细控制 IPv6 上线节奏,在保障用户体验的同时,逐步增加 IPv6 流量占比;


配置管理平台:各个 CDN 节点接收到 IPv6 配置任务后,使用自己的资产和服务信息对任务模板进行二次渲染,得到最终的配置命令并执行,执行完毕后上报修改状态;


SDN 管理平台:全面支持 IPv6,通过生成配置架构及网元全量配置,实现一键完成核心机房 IPv6 相关配置,有效提升 IPv6 机房资源交付效率。

网络资源准备

为保障各业务上线 IPv6 的基础网络资源需求,数据中心和网络的双栈改造是最早启动的工作环节,在 2018 年底基本完成了数据中心和网络能力的 IPv6 工作。


下面是关键基础网络能力准备情况:


数据中心 IPv6 就绪:爱奇艺的数据中心包括 Core、Storage 和 Cache 三类,目前已经完成所有自建机房的 IPv6 地址申请、部署、分配和注册备案工作,确保 IPv6 网络出口安全可用,全面支持业务双栈上线。


网络能力 IPv6 就绪:爱奇艺自有全球骨干网 QNET 完成 IPv6 升级工作,实现三大运营商和教育网等多家基础电信服务商的 IPv6 对接,并对基于 QNET 的 Anycast 系统进行 IPv6 升级,为 DNS 核心业务提供高可用的 IPv6 服务;


IPv6 网络质量监控:流量监控和网络监控系统完成双栈升级,对比分析 IPv6 和 IPv4 网络质量差异和不同区域 IPv6 网络质量差异,指导和保障 IPv6 业务上线。

IPv6 节点改造

IPv6 节点改造关键是机房基础设施和服务的改造,其中涉及到 CDN 节点和核心的平台。


下面简要介绍一下节点 IPv6 改造的流程:


(1) 通过资源管理平台管理节点的 IPv6 地址段,并为节点的每个服务器和网络设备自动生成 IPv6 地址;


(2) SDN 管理平台从资源管理平台获取节点中网络设备的 IPv6 信息,通过生成配置架构及网元全量配置,实现一键完成核心机房 IPv6 相关配置下发与生效;


(3) 在配置管理平台中创建任务模板,自动下发 IPv6 配置和软件配置到服务器,服务器重启网络,软件配置平滑升级,服务支持 IPv6;


(4) 服务支持 IPv6 后,向调度管理平台注册告知自己具备 IPv6 服务能力;


(5) 调度管理平台自动调整调度策略,在区域开启 IPv6 的情况下,自动切入 IPv6 流量;


整体流程图如下:



借助于爱奇艺 CDN 完善的支撑平台,无论在硬件资源准备,还是服务软件管理,针对 IPv6 的支持已经完全自动化,尤其体现在基础网络设备配置、操作系统支持、IPv6 资源管理、服务 IPv6 支持、服务注册和自动调度等方面均已实现自动化管理并上线。

客户端调度流程

下面是 IPv4 和双栈客户端访问 DNS、视频调度和视频 CDN 的时序图,从图中可以看到爱奇艺 DNS、HTTP 视频调度服务和视频服务均已支持 IPv6,可以根据客户端不同的请求方式返回 IPv4 或者 IPv6 的资源。


平滑上线

上一部分详细介绍了整个 IPv6 业务调度架构和流程,本部分介绍系统上线的关键步骤,其中包括操作系统和软件层面的 IPv6 配置支持以及如何在调度管理平台进行平滑切量上线。

系统配置

系统层面配置包括内核调整和系统 IPv6 配置启用,IPv6 启用方法如下:


(1) grub 配置开启 IPv6


删除/etc/default/grub 配置文件中“ipv6.disable=1”配置


(2) 重新生成 grub ,配置


使用命令 grub2-mkconfig --output /boot/grub2/grub.cfg 生成新的 grub 配置文件


(3) IPv6 全局开关配置


新增/etc/sysconfig/network 配置文件中“NETWORKING_IPV6=yes”配置


(4) 配置网卡 IPv6 地址


更新配置文件/etc/sysconfig/network-scripts/ifcfg-ethx,增加如下选项:


IPV6INIT="yes"IPV6ADDR="分配的IPv6地址"IPV6_DEFAULTGW="分配的IPv6网关"
复制代码


(5) IPv6 地址生效


在 CentOS 7 系统中,需要重启系统,IPv6 地址配置才能 100%确保生效,CentOS 6 系统只需要执行 service network restart 即可生效。


(6) 测试网络连通性


通过 ping6 命令,可以测试 IPv6 地址与外部 IPv6 网络连通性。


以上工作已经开发出完善的命令行工具,实现自动获取分配 IPv6 信息并配置的功能。


系统初始化还需要调整以下内核参数:



以上针对系统内核参数、网络配置和 IP 地址自动分配相关的运维工作,我们使用自研的配置管理平台,已经实现自动化任务模板。针对存量设备,自动从资源管理平台获取 IP 地址,自动配置;针对新设备,装机流程中自动会分配 IPv6 地址,自动调整相关系统配置。

服务软件配置

(1) 调度器和视频 Cache 服务器开启 IPv6 端口监听


调度器和视频 Cache 是基于 Nginx 开发的,线上环境在 server{}模块增加 IPv6 监听配置示例如下:



server{listen [::]:80 backlog=8192;}
复制代码


(2) DNS 服务器开启 IPv6 端口监听


爱奇艺自研 DNS 是基于开源的 acl[1]框架,为了支持 IPv6,acl 框架在基础模块和配置方面都做了很多优化,开启 IPv6 相关的配置如下:


service hpdns{master_disable = no;master_service = |53 # 监听所有网络地址的53端口}
复制代码

业务切量

通过爱奇艺调度管理平台,可以灵活的对 IPv6 流量进行调整控制,对于管理的视频 IDC 节点,设置开启 IDC 的 IPv6 服务支持选项,即可在 IDC 节点层面打开视频服务的 IPv6 访问支持:



调度管理平台支持按照用户区域和运营商配置 IPv6 的开启:



实际的推进过程中,也是通过对用户区域和调度资源(IDC)两个维度进行配置实现灰度切量的,确保不影响用户体验并对用户无感知。

总结和展望

经过一年多的努力,爱奇艺调度系统已经全面具备 IPv6 服务能力,正在按照区域和运营商,逐步增加 IPv6 用户覆盖。截至 2019 年 6 月底,爱奇艺 IPv6 月活用户达到上亿级别,峰值带宽达到数百 G。


未来,我们仍将继续推进 IPv6 部署,稳步增加 IPv6 带宽占比,充分利用 IPv6 技术优势,为用户带来更好的播放体验。同时,推进 IPv6 网络部署和系统架构改造,进一步提升用户体验和降低成本。


公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2019-08-26 15:345869

评论

发布
暂无评论
发现更多内容

论模式与反模式

凌晞

构架

加密了100个小姐姐的PDF文档,1行代码搞定,网友:快男!

程序员晚枫

Python 加密 PDF 自动化办公

OneCode :如何构建部署低代码引擎工程

codebee

从0为你讲解,什么是服务降级?如何实现服务降级?

做梦都在改BUG

Fabarta 正式加入大数据技术标准推进委员会,共同推动大数据技术标准化进程

Fabarta

人工智能 图数据库 分布式图数据库 图智能

如果用ChatGpt给OpenTiny官网设计页面会怎样?

英勇无比的消炎药

开源 前端 OpenTiny UI组件库

华为云开源OpenTiny项目中TinyVue组件库和TinyNG组件库的区别是什么?

英勇无比的消炎药

前端 开源、 OpenTiny UI组件库

template竟能使一套C++代码支持多个客户?

老王同学

c++ template

创业公司如何不沦为OpenAI“死侍军团”:训练小众数据,服务特定用户

B Impact

字节资深架构师用7大部分13章节,彻底讲透SpringBoot生态体系

做梦都在改BUG

Java spring 微服务 Spring Boot 框架

月内狂飙 50%的 ZBC ,连续登顶Solana 链交易量排行榜

EOSdreamer111

一路披荆斩棘腾讯6面面经(已拿offer)大厂远没想象中的难

小小怪下士

Java 程序员 面试 后端

真的香!腾讯SpringBoot高阶笔记,限时开源48小时

程序知音

Java 微服务 编程语言 springboot java架构

月内狂飙 50%的 ZBC ,连续登顶Solana 链交易量排行榜

股市老人

细节拉满,80 张图带你一步一步推演 slab 内存池的设计与实现

bin的技术小屋

内存管理 Linux Kenel 内核 内存池

阿里CTO最新分享神仙级“多线程手册”全套笔记,涵盖了多线程相关所有知识点

开心学Java

Java 线程 多线程 阿里

flutter系列之:在flutter中使用相机拍摄照片

程序那些事

flutter 架构 大前端 程序那些事

在Goroutines中如何处理Error

Jack

前端面试实录HTML篇

控心つcrazy

html 面试 前端 HTML5, CSS3

浅谈 Spring 如何解决 Bean 的循环依赖问题

做梦都在改BUG

Java spring 循环依赖

熬夜肝完! 阿里P8的Java进阶知识典藏版,我从18K飙到30K

程序知音

Java 编程语言 java面试 java架构 Java面试题

为 NGINX 配置免费的 Let’s Encrypt SSL/TLS 证书

NGINX开源社区

8个可以免费下载3D模型的网站,快收藏起来吧~

Finovy Cloud

3D软件 3ds Max

字节跳动CVPR 2023论文精选来啦(内含一批图像生成新研究)

字节跳动技术范儿

字节跳动 算法 计算机视觉 CVPR AIGC

OpenTiny的设计理念是什么?

英勇无比的消炎药

开源 OpenTiny UI组件库

GitHub标星35k+微服务深度原理实践进阶PDF,竟让阿里换下了Dubbo

做梦都在改BUG

Java 架构 面试 微服务

华为开源项目OpenTiny的TinyVue组件库适用于哪些地方?

英勇无比的消炎药

前端 开源、 OpenTiny UI组件库

毕业项目-618秒杀系统

不爱学习的程序猿

Python数据分析库介绍及引入惯例

timerring

Python pandas

性能测试入门实践路线图

老张

性能测试 稳定性保障

月内狂飙 50%的 ZBC ,连续登顶Solana 链交易量排行榜

威廉META

爱奇艺CDN IPv6调度系统实践_语言 & 开发_InfoQ精选文章