1. 什么是 HTTPDNS ?


传统的 DNS(Domain Name System)使开发者常面临着域名劫持、调度不精准的问题。


HTTPDNS 使用 HTTP 协议替换常用的 UDP 协议,完成客户端和递归 DNS 之间的域名解析过程,使得 HTTPDNS 服务器自身可以充当递归 DNS ,这样域名解析请求直接发送到阿里云的 HTTPDNS 服务器,可以绕过Local DNS运营商 ,避免由于 Local DNS 造成的域名劫持和调度不精准问题。产品原理如下图所示:


阿里云 EMAS HTTPDNS 联合函数计算重磅推出 SDNS 服务,三大能力获得突破-LMLPHP

图1 架构原理图


2.SDNS 软件定义解析


虽然,HTTPDNS 在域名劫持和调度上,相对传统 DNS 已经有了质的飞跃,但是还存在如下不足:

(1)【权威 DNS 存在不足】传统权威 DNS 的功能非常有限,且不同供应商提供的能力参差不齐,有优化空间;

(2)【无法优化结果】HTTPDNS 充当递归DNS的功能时,无法改变权威 DNS 解析的结果;

(3)【缺乏管理】客户域名解析缺乏集中管理,大型客户的域名解析往往分布在多个 DNS 供应商。


而 SDNS 不仅可以帮助开发者进一步优化调度质量,而且可以结合函数计算等能力,扩展 HTTPDNS 的服务边界。



2.1 什么是 SDNS ?

SDNS(Software-Defined Name System,简称SDNS)即软件定义解析,是在 HTTPDNS 的基础上,创造性的引入了自定义解析功能。其主要特性有:

(1)支持客户端自定义参数输入;

(2)HTTPDNS 服务器端结合自定义函数处理能力,支持客户实现复杂的自定义解析功能;

(3)返回自定义解析结果给客户端。



2.2 SDNS 的三大能力

SDNS 在功能上完成了三个方面的飞跃:


(1)自定义能力

    • 域名解析过程,可以基于自身业务诉求和实际检测数据情况,改进权威解析结果,实现业务最优。


(2)服务扩展能力

    • 不再局限于域名解析调度。例如可以结合函数计算等云服务,丰富和扩展自身业务能力。


(2)系统调度能力

    • 由于域名解析过程可以定义,可以修改权威的结果,增加额外的数据信息,客户可以在现有服务的基础上,整合各个权威 DNS 服务,规避由于多权威 DNS 不规范所导致的调度质量不够高的问题。




2.3 SDNS的应用场景


【场景一】功能扩展


目前 SDNS 已经跟函数计算进行业务整合,可以将函数计算的相关能力整合进 HTTPDNS 。


SDNS 可以在解析的过程中,在指定的阶段执行由客户编写的函数计算(FC)的函数逻辑,并提供以下能力:

(1)获取客户IP所在的所在地域及运营商信息;

(2)修改域名解析结果及 TTL 时间;

(3)添加自定义的数据输出,与解析结果一起返回。


  • 基于函数计算,扩展业务能力

SDNS 可以将运行时上下文输入给函数计算(FC)的函数,允许客户定义逻辑来处理这些数据。并将处理后的结果合并回SDNS 解析流程中。


SDNS 的系统架构如下:

阿里云 EMAS HTTPDNS 联合函数计算重磅推出 SDNS 服务,三大能力获得突破-LMLPHP 

图2 架构原理图


阿里云 SDNS 实现自定义解析的核心是引入函数计算服务。


阿里云 EMAS HTTPDNS 联合函数计算重磅推出 SDNS 服务,三大能力获得突破-LMLPHP 

图3 自定义解析功能原理图


HTTPDNS 通过为以下5个阶段之间提供 Hook 点,并通过引入函数计算在这些 Hook 点实现自定义函数功能。

阶段名说明
HTTPDNS_LOCATE_IP在地址库中定位该IP所在地域及运营商
HTTPDNS_CHECK_CACHE以域名和定位结果信息作为 key,搜索缓存中的解析结果,如果有有效解析结果则跳转至 HTTPDNS_WRITE_RESPONSE 阶段;如果没有进入 HTTPDNS_RESOLVE 阶段
HTTPDNS_RESOLVE实际执行递归解析逻辑
HTTPDNS_WRITE_CACHE将解析结果写入缓存
HTTPDNS_WRITE_RESPONSE将解析结果写入响应中并返回给调用端

Demo Hook 函数实现了两个功能:

(1)为返回结果增加一个 IP;

(2)为返回结果增加了“extra”字段。


'use strict'; exports.handler = function (event, context, callback) {  // 解析传入的入参  event = JSON.parse(event.toString());  // callback 第一个参数是exception,第二个参数是出参,会被自动JSON化  callback(null, {  ips: event.ips.concat(['188.177.166.155']),  ttl: event.ttl * 2,  extra: "some-thing-send-to-user"  }); };


详细使用说明:https://help.aliyun.com/document_detail/121293.html



【场景二】缩短域名生效时间


基于 SDNS ,可以缩短 OTT 时间,当遭遇到网络攻击后,及时调整 OTT 时间,将业务及时切换到阿里云高防,既保障了业务安全,又优化了自身成本。


案例:



【场景三】定向调度流量

以直播为例,北京地区准备开展一次大型直播,服务器面临巨大流量压力会导致拥塞和延时追赶。接入 SDNS 后,非直播流量调度到其它服务地区,避免流量陡增造成的问题,直播结束后再切回。定向调度能有效缓解流量压力,保障和提升直播的体验。


阿里云 EMAS HTTPDNS 联合函数计算重磅推出 SDNS 服务,三大能力获得突破-LMLPHP


【场景四】智能调度

传统 DNS 不对请求来源进行区分,从随机服务 IP 池中选择其中一个返回给访问者。这种调度方式,会对最终用户的体验,造成不良影响。


智能调度可以根据解析请求的 IP 地址所归属的地域、运营商返回就近的服务器 IP。另外,对于分布式服务(典型的如 CDN 服务),还可以降低最终用户访问服务器的延迟。


一般 DNS 会分地域调度,在CDN 场景下,根据地域自动填充调度路径;非 CDN 场景则需用户手动填写。SDNS 在 CDN 场景下提供 OTT 能力,可以在多个 CDN 之间互相切换,从而实现对调度结果的优化。


案例:


阿里云 EMAS HTTPDNS 联合函数计算重磅推出 SDNS 服务,三大能力获得突破-LMLPHP 

图4 智能调度示意图

【场景五】自定义线路

当 DNS 请求的 IP 地址归属特定 IP 地址段时,返回对应的服务器 IP。

阿里云 EMAS HTTPDNS 联合函数计算重磅推出 SDNS 服务,三大能力获得突破-LMLPHP

 

图5 自定义线路示意图



【场景六】自定义参数解析

基于自定义参数输入进行调度,如根据用户账号调度(比如不同用户的上下文信息存储于不同的服务器中,采用默认的 HTTPDNS 调度策略不合适)。

阿里云 EMAS HTTPDNS 联合函数计算重磅推出 SDNS 服务,三大能力获得突破-LMLPHP

图6  自定义参数调度示意图


同时,基于自定义参数,还可以实现业务的A/B Test 和新服务发布的灰度。


【场景七】前置质量检测

基于 SDNS,可以前置检查域名解析结果的性能和可用性,并在结果返回前优化,如果返回 IP 质量不佳则可以切换至优质的 IP。


阿里云 EMAS HTTPDNS 联合函数计算重磅推出 SDNS 服务,三大能力获得突破-LMLPHP


总结

SDNS 是 HTTPDNS 在开放性上的一次跃迁,打破了原有的封闭服务模式,赋能企业研发团队。基于 SDNS,研发团队可以进一步提高调度精准度,提升业务覆盖面,助力打造更强大、更智能的调度体系,为最终用户提供极致的体验。


相关链接:

(1)HTTPDNS:https://www.aliyun.com/product/httpdns

(2)SDNS使用说明:https://help.aliyun.com/document_detail/120654.html

(3)编写自定义解析函数:https://help.aliyun.com/document_detail/121293.html

(4)移动研发平台EMAS:https://aliyun.com/product/emas




更多资料:

[1] 流量劫持与防范

[2] 移动APP持续交付系列之云构建价值分析

[3] 移动互联网时代,如何优化你的网络 —— 域名解析篇

[4] 如何利用HTTPDNS降低DNS解析开销

[5] App如何实现就近接入?如何改善调度不准问题?

[6] 如何解决域名解析不生效问题?

[7] 那些年移动App域名解析踩过的坑

[8] 阿里云HTTPDNS自定义域名解析介绍

[9] 阿里云HTTPDNS如何编写自定义解析函数


钉钉搜索35248489,加入阿里云云原生应用研发平台EMAS技术交流群,探讨最新最热门的应用研发技术和实践。(或钉钉扫码加入)

阿里云 EMAS HTTPDNS 联合函数计算重磅推出 SDNS 服务,三大能力获得突破-LMLPHP

08-31 10:56