基于EDNS优化的CDN精准调度方案探讨
2020-09-22黄润怀海锦霞梁洁
[黄润怀 海锦霞 梁洁]
1 引言
随着8k/VR等大视频业务的快速发展,以及双千兆网络的大力推广,用户对视频服务质量要求越来越高,要求大码率、零卡顿、低时延等极致体验。部分互联网内容提供商也要求在本地网提供服务,实现用户访问时快速提供服务。这就要求CDN运营商能够将CDN节点尽量下沉至靠近用户的地方,实现低时延高质量的CDN服务。
CDN服务节点下沉之后该如何实现流量的精准调度是本文考虑的重点。中国电信目前以省为单位集中部署Local DNS,由LDNS代理用户请求进行递归查询,这导致了依赖于DNS调度的准确度只能局限到以省为单位,难以满足大视频业务低时延的服务质量要求。
本文接下来将阐述如何基于EDNS优化以及CDN调度系统(GSLB)的优化来实现CDN的精准调度。
2 CDN调度现状
现有的互联网CDN的调度方式大部分是基于传统DNS的调度,CDN业务的调度流程可归纳分为两大部分,一是DNS解析流程,二是CDN资源调度流程,具体流程如图1所示。
图1 基于传统DNS的CDN调度流程
终端向LDNS发起DNS解析请求,LDNS根据用户请求的域名层层递归至DNS授权服务器,获取该域名的CNAME记录之后,LDNS根据CNAME之后的域名再次进行递归查询,最终获取CDN GSLB的地址并请求域名解析。
CDN GSLB根据LDNS的地址,进行查询和调度策略匹配,可定位用户属于某个省份,若该省份仅部署了一个节点,即向LDNS返回该节点IP,若该省份在多个地市均部署了CDN服务节点,则GSLB会对这些CDN节点进行轮询,随机分配一个节点,返回该节点的IP给LDNS。终端获取到最终的CDN服务节点的IP,向该节点发起服务请求。
现有的调度机制存在问题如下:
CDN GSLB对用户位置的判断依据是从DNS请求中获取LocalDNS递归地址,而LocalDNS以省为单位部署,所以GSLB能判断用户是属于某个省份,但无法实现地市级别的精准调度,会出现跨地市的CDN服务,网络时延大且不稳定,用户体验较差。
3 EDNS原理
为解决CDN精确调度的问题,Google等互联网公司提出了edns-client-subnet扩展协议(ECS协议),通过附加字段传递原始用户网络地址给权威DNS ,从而权威DNS可根据原始用户源地址信息实现精准调度。目前IETF已发布相应的ECS协议RFC,为ECS的应用打下良好基础。
EDNS的基本原理如图2所示。
图2 EDNS基本原理
EDNS是DNS的逐跳扩展,因此,EDNS应用于每一对服务器之间,即递归解析器和权威服务器之间。递归解析器向权威服务器发送携带ECS选项的查询请求,ECS选项中包含了source prefix-length,并将用户地址截取至该长度,用0补齐。权威服务器返回的DNS响应包含scope-prefix-length,递归解析器根据source prefixlength、scope-prefix-length以及最大缓存长度的关系确定存储地址的长度,并将响应标记为对该范围内的所有地址有效。
RFC定义的EDNS0存在以下问题:
按照RFC7871定义,每个应答报文只能含有一个缓存生效地址段。同一个域名每个用
户地址段至少需要一个缓存条目,对于一个省级ISP,用户IPv4源地址条目数一般能够达到几千条(以C类计算),这样一个域名在缓存中的条目数量大量膨胀。
根据ECS递归算法,来自不同用户地址段的同一个域名查询请求都需要进行递归查询。这样递归查询量大幅上升,资源消耗大幅上升。
4 CDN精准调度方案
为了解决上述EDNS以及现有CDN调度系统存在的问题,本文提出了一种基于ENDS优化的CDN精准调度方案。具体方案实现如图3所示。
图3 CDN精准调度方案
首先,LDNS升级支持ECS协议,并且支持根据业务模型规划调度单元将用户归类,为每个调度单元分配唯一映射地址,该映射地址为LDNS与CDN GSLB协商好的的地址。这样,在用户请求域名解析时,LDNS根据这个用户所在的调度单元,查询到该调度单元对应的映射地址,这时,LDNS不再携带用户原始IP,改为携带映射地址和CDN GSLB通信。
同时,LDNS支持多视频缓存,根据调度单元增设唯一对应的多分区缓存,普通域名继续使用公共分区,通过缓存分区可大幅度提升缓存命中率,减少递归流量。
虽然LDNS的递归可以同时兼容EDNS递归和普通递归 ,但EDNS递归比普通递归更加消耗资源,建议部署单独的EDNS递归,集中控制EDNS域名的递归或转发策略,实现递归解析分流,保障LDNS原有性能不降低。
CDN调度系统(GSLB)升级支持ECS协议,周期性探测各CDN节点状态,在收到LDNS的域名解析请求时,根据LDNS携带的ECS信息,优化调度算法,结合权重、节点服务质量、热点等综合考虑,返回最优的CDN节点IP,实现用户的精准调度。GSLB初期集中式部署,需要采集全国CDN节点的状态数据,当业务流量越来越大,CDN节点增多时,GSLB性能压力增大,建议采用分布式部署方式,提升GSLB性能和效率,实现用户请求的快速精准调度。
LDNS在收到CDN GSLB响应报文时,忽略掉报文里面的scope-prefix-length,根据source prefix-length存储地址的长度,并缓存对应的“映射地址段-CDN节点IP”条目
5 试点应用
为了验证方案的可行性,项目团队部署了实验室测试环境,包含了现网DNS设备以及中国电信云公司CDN设备,主要测试厂商DNS系统和云公司的权威服务器之间的ECS功能测试,解析性能,以及安全防护能力。测试结果表明,现网主流厂商的DNS设备可以通过软件升级支持ECS功能,能够支持多视图缓存,以及ECS递归,云公司的GSLB系统可以通过升级支持ECS协议,实现将用户精准地调度至最靠近且服务质量最优的CDN节点提供服务,验证了上述章节的CDN精准调度方案的技术可行性。
进行了实验室测试验证之后,项目组在宁波进行了现网试点,从试运行采集到的数据来看(如图4所示),采用本方案实现精准调度后,宁波的用户会被精准调度至宁波的CDN节点,而未采用精准调度方案之前,宁波的用户会被随机调度至杭州或者 温州的CDN节点提供服务。从用户体验提升较为明显,首包到达时延下降了60%,内容下载时间下降了80%以上。
图4 CDN精准调度前后服务质量对比
6 结束语
本文提出了基于EDNS优化的CDN精准调度方案,并进行了实验室验证和现网试点验证,通过对LDNS升级支持ECS,并优化支持多视图划分,地址映射以及分区缓存等功能,同时,对CDN调度系统优化支持智能调度,最终实现CDN的精准调度,满足大视频业务及互联网业务的服务质量要求,大大提升了用户体验,同时也为运营商对互联网业务的精细化运营奠定了基础。