AI 年度盘点与2025发展趋势展望,50+案例解析亮相AICon 了解详情
写点什么

爱奇艺 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 网络部署和系统架构改造,进一步提升用户体验和降低成本。


2019-08-26 15:346058

评论

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

程序员到底应该学习什么语言好?

页面仔小杨

字节码编程,Javassist篇一《基于javassist的第一个案例helloworld》

小傅哥

Java 字节码编程 字节码插桩 小傅哥

彻底明白如何设计一个良好的 API

Yezhiwei

OKR实践中的痛点(2):对不qi,对不qi

大叔杨

OKR Scrum 敏捷 敏捷开发

Ruoyi Vue前后端分离版本添加UReport设计器

赵欣

Vue Ruoyi uReport

spring-cloud-stream 集成 rocketmq

再见孙悟空

RocketMQ Spring Cloud

曾国藩家书嘉言钞(六)

熊小北同学

曾国藩 曾国藩家书 嘉言钞

高性能交易系统设计原理

廖雪峰

架构

DDD 实践手册(1.Get Started)

Joshua

领域驱动设计 DDD 系统架构 架构模式

程序员不可不知的:2020年测试六大趋势

禅道项目管理

人工智能 开源 DevOps 敏捷开发 测试

ANTLR入门(一)

zane

编程语言 ANTLR

告诉你一个学习编程的诀窍(建议收藏)

ithuangqing

学习 编程 自学编程

变革之路的思考

龙眼果

SpringBoot+Mybatis Plus多租户动态数据源

zane

数据库 Spring Cloud mybatis

Filebeat + Kafka + Elasticsearch + Kibana 实现日志收集与管理

AlwaysBeta

大数据 kafka elasticsearch elastic 数据分析

翻译: Effective Go (3)

申屠鹏会

翻译 gol

讲一个程序员如何副业月赚三万的真实故事

非著名程序员

程序员 副业 副业赚钱 提升认知

从少儿编程讲讲开发行业的大趋势

kimmking

在线教育 少儿编程

本地开发环境搭建利器--vagrant

aoho

DevOps 运维 vagrant

从高盛的技术“开源”看金融业软件发展未来

FinClip

open-source 金融科技 数字化生态

100字:对数时间复杂度

韩小非

算法 时间复杂度

ANTLR 入门(二)

zane

编程语言 ANTLR

一个平凡者的阅读故事

卷尚

如何写作一本书(1):写前须知

英子编辑

技术 写作 读书

读 Guide to Java String Pool

shengjk1

Java string pool

字节码编程,Javassist篇二《定义属性以及创建方法时多种入参和出参类型的使用》

小傅哥

Java 字节码编程 字节码插桩 小傅哥

Laravel 7 新特性 - 流畅的字符串操作

Middleware

php laravel string

远程办公钉钉使用体验

冯夷

钉钉

招聘小思考

水色

JDK源码分析之 ArrayList

Wh1

源码分析

《代码整洁之道》原则整理

insight

编程

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