域名接入服务商国外虚拟主机服务商推荐


本文引用了腾讯工程师廖伟健发表于“鹅厂网事”公众号上的《【鹅厂网事】全局精确流量调度新思路-HttpDNS服务详解》一文部分内容,感谢原作者的分享。

1、引言对于互联网,域名是访问的第一跳,而这一跳很多时候会“失足”(尤其是移动端网络),导致访问错误内容、失败连接等,让用户在互联网上畅游的爽快瞬间消失。而对于这关键的第一跳,包括鹅厂在内的国内互联网大厂,都在持续深入地研究和思考对策,本文将就鹅厂团队在这一块的技术实践,做一个深度的总结和技术分享,希望给大家带来些许启发。学习交流:-即时通讯/推送技术开发交流4群:[推荐]-移动端IM开发入门文章:《新手入门一篇就够:从零开发移动端IM》(本文同步发布于:)

2、相关文章《网络编程懒人入门(一):快速理解网络通信协议(上篇)》《网络编程懒人入门(二):快速理解网络通信协议(下篇)》《网络编程懒人入门(六):史上最通俗的集线器、交换机、路由器功能原理入门》《网络编程懒人入门(七):深入浅出,全面理解HTTP协议》《网络编程懒人入门(九):通俗讲解,有了IP地址,为何还要用MAC地址?》《技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解》《现代移动端网络短连接的优化手段总结:请求速度、弱网适应、安全保障》《移动端IM开发者必读(一):通俗易懂,理解移动网络的“弱”和“慢”》《移动端IM开发者必读(二):史上最全移动弱网络优化方法总结》《脑残式网络编程入门(五):每天都在用的Ping命令,它到底是什么?》《脑残式网络编程入门(六):什么是公网IP和内网IP?NAT转换又是什么鬼?》

3、正文概述但凡使用域名来给用户提供服务的互联网企业,都或多或少地无法避免在有中国特色的互联网环境中遭遇到各种域名被缓存、用户跨网访问缓慢等问题。那么对于腾讯这样的域名数量在10万级别的互联网公司来讲,域名解析异常的情况到底有多严重呢?每天腾讯的分布式域名解析监测系统在不停地对全国所有的重点LocalDNS(指运营商的DNS服务)进行探测,腾讯域名在全国各地的日解析异常量是已经超过了80万条(这方面,来自移动端的异常尤为突出)。这给腾讯的业务带来了巨大的损失。为此腾讯建立了专业的团队与各个运营商进行了深度沟通,但是由于各种原因,处理效率及效果均不能达到腾讯各业务部门的需求。除了和运营商进行沟通,有没有一种技术上的方案,能从根源上解决域名解析异常及用户访问跨网的问题呢?这是包括腾讯在内的很多国内互联网大厂技术团队一直在思考的问题。

4、首先,什么是DNS?要想理解本文将要讨论的DNS各种问题,我们需要首先来复习一下DNS的基本原理和相关知识。4.1DNS的工作原理DNS(DomainNameSystem,域名系统),DNS服务用于在网络请求时,将域名转为IP地址。能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。DNS的基一原理如下图所示:传统的基于UDP协议的公共DNS服务极易发生DNS劫持,从而造成安全问题。4.2DNS域名系统结构如上图所示,典型DNS域名系统的结构如下:1)Root域名:DNS域名使用时,规定由尾部句号来指定名称位于根或更高级别的域层次结构;2)TopLevel顶级域名:用来指示某个国家、地区或组织使用的名称的类型名称。如;3)SecondLevel域名:个人或组织在上使用的注册名称。如;4)ThirdLevel域名:已注册的二级域名派生的域名。如。4.3DNS解析过程如上图所示,这是一个典型的域名解析过程:1)浏览器中输入,发出解析请求;2)本机的域名解析器resolver程序查询本地缓存和host文件中是否为域名的映射关系,如果有则调用这个IP地址映射,完成解析;3)如果hosts与本地解析器缓存都没有相应的网址映射关系,则本地解析器会向TCP/IP参数中设置的首选DNS服务器(我们叫它LocalDNS服务器)发起一个递归的查询请求;4)服务器收到查询时,如果要查询的域名由本机负责解析,则返回解析结果给客户机,完成域名解析,此解析具有权威性。如果要查询的域名,不由LocalDNS服务器解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性;5)如果LocalDNS服务器本地区域文件与缓存解析都失效,则根据LocalDNS服务器的设置(是否递归)进行查询,如果未用开启模式,LocalDNS就把请求发至13台RootDNS。如果用的是递归模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环;6)RootDNS服务器收到请求后会判断这个域名是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP;7)LocalDNS服务器收到IP信息后,将会联系负责域的这台服务器;8)负责域的服务器收到请求后,如果自己无法解析,它就会找一个管理域的下一级DNS服务器地址给本地DNS服务器;9)当LocalDNS服务器收到这个地址后,就会找域服务器,10、11重复上面的动作,进行查询;10)最后返回需要解析的域名的IP地址给LocalDNS服务器;11)LocalDNS服务器缓存这个解析结果(同时也会缓存,6、8、10返回的结果);12)LocalDNS服务器同时将结果返回给本机域名解析器;13)本机缓存解析结果;14)本机解析器将结果返回给浏览器;15)浏览器通过返回的IP地址发起请求。4.4DNS的递归查询和迭代查询递归查询:如果主机所询问的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其他根域名服务器继续发出查询请求报文,而不是让该主机自己进行下一步的查询。迭代查询:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地域名服务器:你下一步应当向哪一个域名服务器进行查询。然后让本地域名服务器进行后续的查询,而不是替本地域名服务器进行后续的查询。由此可见,客户端到LocalDNS服务器,LocalDNS与上级DNS服务器之间属于递归查询;DNS服务器与根DNS服务器之前属于迭代查询。实际环境中,因为采用递归模式会导致DNS服务器流量很大,所以现在大多数的DNS都是迭代模式。

5、国内移动端网络所面临的各种DNS杂症总结下来,DNS的这些咋整主要的带来了三类问题:1)LocalDNS劫持;2)平均访问延迟下降;3)用户连接失败率下降。LocalDNS劫持:由于HttpDNS是通过ip直接请求功能,能直接识别使用GooglepublicDNS解析腾讯域名的用户的IP地址,不会出现流量调度失效。但是问题来了:a.如何在用户侧构造域名请求:对于PC端的客户端来说,构造一个标准的DNS请求包并不算什么难事。但在移动端要向一个指定的LocalDNS上发送标准的DNS请求包,而且要兼容各种iOS和android的版本的话,技术上是可行的,只是兼容的成本会很高;b.推动用户修改配置极高:如果要推动用户手动修改PC的DNS配置的话,在PC端和手机客户端的WiFI下面还算勉强可行。但是要用户修改在移动互联网环境下的DNS配置,其难度不言而喻。3)完全抛弃域名,自建connectcenter进行流量调度:如果要采用这种这种方案的话,首先你就得要拿到一份准确的IP地址库来判断用户的归属,然后再制定个协议搭个connectcenter来做调度,然后再对接入层做调度改造。这种方案和2种方案一样,不是不能做,只是成本会比较高,尤其对于腾讯这种业务规模如此庞大的公司而言。既然上面的这些传统方案都存在那么多的问题,那有没有一种调度精准、成本低廉、配置方便的基于域名的流量调度系统呢?答案是肯定的,我们在下一步继续分享。

8、当前主流的解决方案:HttpDNS出现了8.1什么HttpDNS?HTTPDNS利用HTTP协议与DNS服务器交互,代替了传统的基于UDP协议的DNS交互,绕开了运营商的LocalDNS,有效防止了域名劫持,提高域名解析效率。另外,由于DNS服务器端获取的是真实客户端IP而非LocalDNS的IP,能够精确定位客户端地理位置、运营商信息,从而有效改进调度精确性。HTTPDNS的原理如下图所示:8.2HttpDns主要解决的问题LocalDNS劫持:由于HttpDns是通过IP直接请求HTTP获取服务器A记录地址,不存在向本地运营商询问domain解析过程,所以从根本避免了劫持问题。平均访问延迟下降:由于是IP直接访问省掉了一次domain解析过程,通过智能算法排序后找到最快节点进行访问。用户连接失败率下降:通过算法降低以往失败率过高的服务器排序,通过时间近期访问过的数据提高服务器排序,通过历史访问成功记录提高服务器排序。8.3腾讯的HttpDNS思路经过努力,腾讯公司的GSLB团队推出的HttpDNS是为移动客户端量身定做的基于Http协议和域名解析的流量调度解决方案,专治LocalDNS解析异常以及流量调度不准。详细介绍如下。腾讯的HttpDNS基本原理:HttpDNS的原理非常简单,主要有两步:

A、客户端直接访问HttpDNS接口,获取业务在域名配置管理系统上配置的访问延迟最优的IP。(基于容灾考虑,还是保留次选使用运营商LocalDNS解析域名的方式);

B、客户端向获取到的IP后就向直接往此IP发送业务协议请求。以Http请求为例,通过在header中指定host字段,向HttpDNS返回的IP发送标准的Http请求即可。HttpDNS带来的优势:从原理上来讲,HttpDNS只是将域名解析的协议由DNS协议换成了Http协议,并不复杂。但是这一微小的转换,却带来了无数的收益:

A、根治域名解析异常:由于绕过了运营商的LocalDNS,用户解析域名的请求通过Http协议直接透传到了腾讯的HttpDNS服务器IP上,用户在客户端的域名解析请求将不会遭受到域名解析异常的困扰;

B、调度精准:HttpDNS能直接获取到用户IP,通过结合腾讯自有专利技术生成的IP地址库以及测速系统,可以保证将用户引导的访问最快的IDC节点上;

C、实现成本低廉:接入HttpDNS的业务仅需要对客户端接入层做少量改造,无需用户手机进行root或越狱;而且由于Http协议请求构造非常简单,兼容各版本的移动操作系统更不成问题;另外HttpDNS的后端配置完全复用现有权威DNS配置,管理成本也非常低。总而言之,就是以最小的改造成本,解决了业务遭受域名解析异常的问题,并满足业务精确流量调度的需求;

D、扩展性强:HttpDNS提供可靠的域名解析服务,业务可将自有调度逻辑与HttpDNS返回结果结合,实现更精细化的流量调度。比如指定版本的客户端连接请求的IP地址,指定网络类型的用户连接指定的IP地址等。当然各位可能会问:用户将首选的域名解析方式切换到了HttpDNS,那么HttpDNS的高可用又是如何保证的呢?另外不同运营商的用户访问到同一个HttpDNS的服务IP,用户的访问延迟如何保证?为了保证高可用及提升用户体验,HttpDNS通过接入了腾讯公网交换平台的BGPAnycast网络,与全国多个主流运营商建立了BGP互联,保证了这些运营商的用户能够快速地访问到HttpDNS服务;另外HttpDNS在多个数据中心进行了部署,任意一个节点发生故障时均能无缝切换到备份节点,保证用户解析正常。接入效果及未来展望:当前腾讯的HttpDNS方案已在腾讯内部接入了多个业务,覆盖数亿用户,并已持续稳定运行超过一年时间。而接入了HttpDNS的业务在用户访问体验方面都有了非常大的提升。以某个接入HttpDNS的业务为例,该业务仅通过接入HttpDNS,在未做任何其它优化的情况下,用户平均访问延迟下降超过10%,访问失败率下降了超过五分之
一,用户访问体验的效果提升非常显著。另外腾讯的HttpDNS服务除了在腾讯内部被广泛使用以外,也受到了业务同行的肯定。国内最大的publicDNS服务商114dns在受到腾讯DNS的启发下,也推出了HttpDNS服务。在未来的日子里,腾讯GSLB团队将会在腾讯内部进一步推广HttpDNS服务,并将在实际业务的需求下对HttpDNS服务进行升级,如提供更为通用、安全、简单的接入协议,进一步提升接入用户的网络访问体验等等。希望HttpDNS能为各位在解决域名解析异常及全局流量调度失效方面提供一个简单、可行的思路。

9、作为创业团队,如何改造APP并支持HttpDNS?作为创业团队,人力、财力、技术力量可能都无暇顾及这一块,但是移动端APP却实实在在面临文中提到的各种DNS问题,我们该怎么办呢?9.1使用第3方云服务商提供的HttpDNS接口目前,国内有一部分厂商已经提供了这个解析服务,可以直接使用第三方服务。目前,提供HttpDns解析服务的第3方服务商越来多,比如:阿里云HttpDNS、腾讯云HttpDNS、华为云HttpDNS等。以阿里云的HttpDNS为便,它的API比较标准,直接发一个Get请求,带上请求参数,返回结果以json返回:删除。本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。



1.容灾调度说明线上服务(后台服务)署地"天津,上海,深圳,香港"四地部署每个地方4个VIP(业务提供服务的外网IP地址,就叫接入IP吧)分别为:移动、电信、联通、CAP(提供给小运营商接入)这里我们要关注的几个问题:

1.APP接入的IP是最优的吗?(跨运营商?跨地域?容量饱和?)。

2.APP接入的IP是对的吗?(不是被劫持返回的非法IP)。

3.接入的IP是合适的吗?(免流通道)。

2.解决方案:首先app客户端与服务端是TCP长链接(用于发送在线push)客户端通过tcp三次握手后,会发送一个特殊的handshake数据包,为啥?

(1)验证TCP链接可用性。移动网络下会出现链接建立成功,但实际不可用的情况!

(2)验证服务器真伪。对于DNS劫持的网络,一般无法识别握手包协议(私有协议)

(3)服务器重定向。接收服务器返回新的IP来连接,后台常用来实现就近接入、容灾调度、高负载自动断链等功能对于服务端handshake的作用?

(1)通过不同的APP的appid(一个数字表示一个具体的应用),确认接入的域名是否正确,用于调度客户端到正确的域名对应的VIP;详细解释:比如sns业务对应的域名为音乐业务对应的域名为:sns和音乐用的是同一套sdk,后面因为一些bug问题,导致音乐链接到了sns的接入机,或者sns业务链接到了音乐的接入机,那么通过后台,可以告诉客户端正确的接入VIP,让客户端接入正确的接入机器(可以有效的避免业务体验问题,接入错误了业务肯定就不通了!)

(2)通过判断客户端IP地址信息(查询IP库)返回给客户端最优的,对的,合适的接入IP。详细解释:客户端接入后,通过ept()得到客户端的IP,查询IP库可以得知客户端(国家,省份,运营商,APN信息)如果发现,接入IP是电信而客户端是移动,那么可以返回移动的接入IP地址给客户端,避免跨运营商的情况,同时也客户端对接入区域进行有效的统计。

(3)告诉客户端自己的出口IP地址,国家,省份,运营商,APN信息。详细解释:客户端上报数据进行相关统计

(4)方便快速的容灾调度详细解释:如最初上面所说,比如我现在要裁撤某个地方的VIP(以天津为例子),那么发现客户端是通过天津地区的VIP接入的我可以返回上海的VIP给客户端,使得接入到天津的用户链接到上海来(这只是其中一种接入期间的调度)。具体的实施:这里主要是定义了一个xml文件,xml文件里面说明了各个国家省份对应的接入VIP,后台通过查询客户端的IP返回的IP库信息,匹配返回对应的接入VIP,发现客户端的接入IP与xml里面的一致的时候那么就不用重定向了!//当然这里还是有很多问题是没有得到很好的解决的

1.接入VIP机器故障的时候怎么处理

2.怎么保证某个区域接入的量的合理性

3.怎么保证xml配置的接