《DNS稳定保障系列3--快如闪电,域名解析秒级生效》
在刚刚过去的双十一,又是一个全民狂欢的盛宴,天猫双十一的成交量高达2684亿。无数小伙伴在淘宝、天猫里买买买,今年你又剁手了多少?言归正传,在你疯狂秒杀的时候,有没有发现,今年的购物体验一如既往的好,访问速度快,购物体验那个流畅。我在这里自豪的向大家宣布,我们阿里云解析DNS又一次完成了今年双十一的安保任务!大促的稳定,离不开DNS团队的默默奉献。
今天我们来说说DNS服务稳定保障的重要环节--解析生效速度。对于DNS服务提供商来说,解析生效速度是一个关键议题,也是衡量系统能力的一个重要指标。当前主流DNS厂商的权威解析服务器大都采用了全球多地域多机房分布式集群部署的方式,以达到更低的解析时延,这同时也对解析管控系统的性能和跨地域跨机房的数据同步能力提出了更大挑战。
对于用户来说,大量线上服务和异地多活系统的构建是通过DNS来支撑的,更快的解析生效速度意味着更强的系统掌控能力和故障恢复能力,是系统稳定性和容灾能力评估的重要一环。让我从多个维度带您了解快速生效这个热点话题。
DNS解析原理

图: DNS解析原理
总的来说:客户端发起递归DNS请求,递归DNS服务器(大多数情况下为运营商DNS或者公共DNS)如果在TTL时间内有缓存则直接返回解析结果(1→8),否则会通过迭代查询请求多级的DNS权威服务器,并最终将查询结果返回给客户端(1→2→...→7→8),同时缓存本次查询结果。
云解析权威解析怎么保证秒级生效
从DNS解析原理中我们可以看到,递归服务器在TTL时间内会缓存权威域名服务器的解析结果。因此解析生效包含2个环节:首先域名的权威DNS服务器必须生效,然后还需要等各地递归DNS生效。各地递归DNS生效时间可以TTL控制,阿里云云解析作为权威服务器,付费版TTL可以最小设置为1秒。接下来重点介绍云解析怎么保证权威秒级生效。
软件层面
- 强大的业务管控系统
云解析依托阿里云内部资源,构建了稳定可靠的业务管控系统,为客户提供可视化的域名解析管理平台和OpenApi接口。为了避免单用户瞬时超高频调用等异常情况对其他用户造成影响,管控系统采取了租户隔离的策略:各个用户域名的解析调用互不影响,系统整体保证隔离性、公平性、可靠性、可控性。同时针对不同业务场景,采取了对应的隔离策略,以保证总体稳定。
对于分布式系统架构,CAP 理论是系统设计中的一个重要理论。也就是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错(Partition tolerance),三者不可得兼。BASE理论是对CAP原则中一致性和可用性权衡的结果,BASE是指基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency)。其最核心思想是:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。阿里云云解析在系统设计上采用此理念:即使某个域名有业务调用洪峰,也能保证该域名最终解析生效。且由于存在租户隔离策略,其他用户不会受到影响。

图: CAP理论
对账是检验上下游系统间数据最终一致性的一种保障手段。云解析建立了各个环节的对账体系,如果有不一致的情况发生,会自动触发报警、自动处理异常,能有效保证解析实时生效以及异常处理自动化。
随着用户的持续增加,系统稳定性和性能挑战不容小觑。另外,由于当前分布式系统、微服务化的流行和大规模部署,一次请求往往需要涉及到多个服务。因此需要一个可以帮助理解系统行为、用于分析性能问题的工具,它能够将跨应用的所有调用链性能信息集中展现,以便发生故障的时候,可以快速定位和解决问题,于此同时,它还可以对每个具体调用阶段做耗时分析,进而做针对性优化。阿里云云解析建立了全链路监控体系,使系统性能数据化,规范化,针对于监控结果反馈,持续压榨系统极限性能。
此外,管控系统还有很多未讨论的点,比如系统全栈监控、限流、熔断、降级、异地多活高可用、弹性扩容等,在这里不再赘述。
- 高性能权威DNS
ADNS是阿里云自研的高性能权威DNS解析软件,可以在普通服务器上,实现千万级的QPS。云解析管控系统和ADNS配合,可以将客户的解析配置,实时同步到在全球部署的权威解析服务器节点上。 - 缓存联动刷新
由于阿里DNS是全链路DNS厂商,可以做到权威DNS和递归DNS之间使用私有协议通信。当用户使用阿里DNS作为DNS托管方,同时使用阿里公共DNS作为递归DNS时,可以很方便的做到缓存联动刷新,可以获取更低的解析生效时延。
硬件层面
- 高性能服务器
云解析权威采用阿里定制高性能服务器,采用软硬结合的方式解决业务性能极致、成本最优、高可靠等问题。 - 专线网络
借助集团全球加速能力来进行全球访问提效,同时达到配置下发实时生效。
安全防护
DNS作为网络基础设施,经常会受到DDoS攻击,这会对解析生效时间产生重大影响。DDoS (Distributed Denial of service)攻击通过僵尸网络利用各种服务请求耗尽被攻击网络的系统资源,造成被攻击网络无法处理合法用户的请求。 通常DDoS防御技术有清洗和黑洞两种方式,云解析综合利用两种防御方式,建立了坚固的安全防护壁垒。付费版提供了2种安全防护等级,保障用户在遭受攻击的时候,也有丝滑般流畅体验。
- DNS攻击基本防御:针对付费版本绑定的所有域名,提供基础DNS攻击保护能力,基础DNS攻击防御上限不超过每秒1000万次,适用于一般情况下的DNS攻击预防保障。
- DNS攻击全力防御:针对版本绑定的所有域名,提供全面的DNS攻击保护能力,能承受每秒过亿次的DNS攻击,适用于频繁受到DNS攻击时进行全力保护。
SLA
云解析付费版提供了100%的SLA,建立了实时解析生效监控系统。另外,还通过设置服务基线,定时运行端到端测试用例的方式来监测生效时长,保证秒级生效。
解析生效测试方法
常见的测试域名解析生效的方法有四种:阿里云云解析提供的网页版域名检测工具、阿里巴巴DNS本地检测工具、测试命令dig或nslookup、拨测工具。具体可见我们的官方帮助文档。
解析不生效常见原因
- 域名状态异常
域名状态对解析生效会产生直接影响。注册商设置暂停解析(clientHold)、 注册局设置暂停解析(serverHold)、域名到期等都会造成解析不生效。可以使用whois工具排查域名状态信息,比如下图所示域名就是因为域名是注册商设置暂停解析(clientHold)造成的解析不生效。

图: Whois结果示例
- 域名DNS服务器不是用的阿里云DNS
阿里云云解析权威服务器的后缀为alidns.com或者hichina.com。如果上述whois信息显示域名使用的DNS服务器(Name server)不是阿里云云解析权威,则需要咨询域名当前DNS服务商。 - 域名递归解析过程被污染
由于常用的DNS查询没有认证机制、且是利用无连接的UDP协议,因此DNS查询就非常容易被篡改。利用阿里云域名检测工具,可以自助诊断是否被污染:

图: 域名检测到被劫持示例
更多内容,可参考官方帮助文档。
解析不生效解决方法
解析不生效的解决方法有很多,但都是不是万能的,还是需要具体问题具体分析。排除域名本身问题以外,常见还有以下解决方案:
- 检查防火墙
检查防火墙iptables,查看是否有拦截53端口的相关规则。 - 刷新本地DNS缓存
Windows:ipconfig /flushdns 。 Linux:重启nscd服务或者关闭nscd服务后再测试。 - 更换本地DNS服务器
如果本机可以访问公网,可以添加阿里云公共DNS(V4:223.5.5.5、223.6.6.6。V6:2400:3200::1 2400:3200:baba::1)
本文作者:阿里云DNS专家
本文为云栖社区原创内容,未经允许不得转载。
《DNS稳定保障系列3--快如闪电,域名解析秒级生效》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- Java控制台输入字符串及字符串比较
需求描述:茵茵很喜欢研究车牌号码,从车牌号码上可以看出号码注册的早晚,据研究发现,车牌号码是按字典序发放的,现在她收集了很多车牌号码,请你设计程序帮她判断注册较早的号码.车牌号码由5个字母或数字组成. ...
- Oracle查询中文乱码
1.查询Oracle服务端字符集 SQL> select userenv('language') from dual ; USERENV('LANGUAGE') ---------------- ...
- Red Hat Linux下安装JDK
1. 下载Linux平台的JDK 下载对应操作系统的jdk,操作系统是32位的就下32位的jdk,64位的就下64位的jdk.下错了装不上的. 下载地址:http://www.Oracle.com/t ...
- 测开之路八十二:匿名函数:lambda表达式
# 匿名函数:lambda表达式# lambda 参数: 逻辑f = lambda name: print(name)f('tom') f2 = lambda x, y: x + yprint(f2( ...
- Jexus 強勁、堅固、免費、易用的Linux ASP.NET服務器
Jexus 強勁.堅固.免費.易用的Linux ASP.NET服務器 Jexus是一款Linux平台上的高性能WEB服务器和负载均衡网关,以支持ASP.NET.ASP.NET CORE.PHP为特色, ...
- IQueryable不能使用异步方法的解决方案
---恢复内容开始--- 看见别人用Linq to Sql的Async好久了,我还没开始用,感觉太土了,跟不上潮流了,打开vs,就准备写个查询,然后发现我用一个IQueryable的对象,怎么都点不出 ...
- 《STL源码剖析》——第五、六:关联容器与算法
第五章.关联容器 5.0.关联容器 标准的STL关联式容器分为set(集合)和map(映射表)两大类,以及这两大类的衍生体multiset(多键集合)和multimap(多键映射表).这些容器的底层 ...
- Spring cloud学习--Zuul02
过滤器 Zuul包括两部分内容:请求的路由和过滤.而实际上请求的路由也是通过过滤器实现的,例如理由映射主要通过pre类型的过滤器完成,它将请求路径与配置的路由规则进行匹配,找到需要转发的目标地址:请求 ...
- [Python3] 022 面向对象 第二弹
目录 6. 面向对象的三大特性 6.1 封装 6.1.1 私有 private 6.1.2 受保护 protected 6.1.3 公开 public 6.2 继承 6.2.1 继承的概念与作用 6. ...
- Java-多线程第三篇3种创建的线程方式、线程的生命周期、线程控制、线程同步、线程通信
1.Java使用Thread类代表线程. 所有的线程对象必须是Thread类或其子类的实例. 当线程继承Thread类时,直接使用this即可获取当前线程,Thread对象的getName() ...