302和DNS,HttpDNS调度比较


302和DNS调度比较

转载2015年11月30日 19:40:57
一般是两者结合,DNS做省市级别和跨运营商的调度, 302做基于内容和精确IP的精确调度

DNS的优点:

DNS系统是天然的分布式结构
客户端本机,LDNS都可以实现cache,架构本身就能实现高的伸缩性和性能
---------------------------------------------------------

DNS的缺点:

DNS并不是为GSLB设计的
GSLB 基于 local DNS的地址判断,粒度较粗。而且LDNS可能和end user网络距离很远。
用户可能会设置错误的Local DNS,该服务器和用户实际距离较远,比如8.8.8.8等
DNS请求里面不会带有内容信息,GSLB只能拥有LDNS ip信息,无法针对内容作出更加灵活的判断
因为DNS reply TTL,所以某个用户一段时间内的请求都会导向同一个site (解决:趋向于较短的TTL)
某些Local DNS会忽略DNS TTL信息,而采用固定的TTL时间,对此我们无能为力
电信系统倾向于直接使用ip地址访问,不使用域名
---------------------------------------------------------

302的优点:

可以直接得到end user ip和内容的地址,可以做出精确的redirect
每个请求都需要访问GSLB,可以做出单独的处理
可以在一个点方便的作出统计和认证
---------------------------------------------------------

302的缺点:

需要应用层协议支持(http / rtsp)
一般有重定向次数限制
GSLB需要处理较多的请求,却没有LDNS作为cache
GSLB暴露给end user , 容易遭受攻击
用户访问GSLB本身就会带来时延,可能深圳的用户需要访问北京的GSLB
单点故障(可以通过GSLB服务群集解决)
某些应用对URL变化敏感,比如WEB
某些客户端支持不好(中文字符集等问题)

HttpDNS

首先,需要明确一个概念,什么叫做HttpDNS以及为什么要用HttpDNS。

HttpDNS是使用HTTP协议向DNS服务器的80端口进行请求,代替传统的DNS协议向DNS服务器的53端口进行请求。也就是使用Http协议去进行dns解析请求,将服务器返回的解析结果,也就是域名对应的服务器ip获得,直接向该ip发起对应的api服务请求,代替使用域名。

那么为什么要使用HttpDNS呢?主要原因有三点

1、LocalDNS劫持
2、平均访问延迟下降
3、用户连接失败率下降

LocalDNS劫持: 由于HttpDNS是通过ip直接请求http获取服务器A记录地址,不存在向本地运营商询问domain解析过程,所以从根本避免了劫持问题。 (对于http内容tcp/ip层劫持,可以使用验证因子或者数据加密等方式来保证传输数据的可信度)
平均访问延迟下降: 由于是ip直接访问省掉了一次domain解析过程,(即使系统有缓存速度也会稍快一些‘毫秒级’)通过智能算法排序后找到最快节点进行访问。
用户连接失败率下降: 通过算法降低以往失败率过高的服务器排序,通过时间近期访问过的数据提高服务器排序,通过历史访问成功记录提高服务器排序。如果ip(a)访问错误,在下一次返回ip(b)或者ip(c) 排序后的记录。(LocalDNS很可能在一个ttl时间内(或多个ttl)都是返回记录

至于HttpDNS更加详细的内容,可以参考下面这篇文章

【鹅厂网事】全局精确流量调度新思路-HttpDNS服务详解

那么,在客户端该如何实现httpDNS呢?目前,国内有一部分厂商已经提供了这个解析服务,我们可以使用它们的服务,也可以使用自建服务器进行中转,至于自建服务器上如何实现,是调第三方呢还是自己去解析呢这个属于服务器的事,对于客户端来说是完全透明的。这篇文章主要是为了学习,为了方便起见,我们直接使用第三方服务。目前,提供httpdns解析服务的有:

阿里云HttpDNS

DNSPod D+

无论是哪个api,都是直接调用它们暴露的restful api获得解析结果,只不过收费问题不一样,当然也有免费的,免费的是有限制的。
阿里云的HttpDNS服务的api比较标准,直接发一个Get请求,带上请求参数,返回结果以json返回。

比如
http://203.107.1.1/d?host=www.taobao.com&ip=42.120.74.196
请求成功时,返回结果如下

{  
    "host": "www.taobao.com",  
    "ips": [  
    "115.238.23.241",  
    "115.238.23.251"  
    ],  
    "ttl": 57  
}  

而DNSPod的API基本上和阿里云的没什么差别,只不过返回结果不是以json返回,而是直接返回ip地址。举个例子:
http://119.29.29.29/d?dn=www.dnspod.cn&ip=1.1.1.1&ttl=1

请求成功则返回ip地址,但不是json格式,如果存在ttl=1,则以逗号分隔

59.37.116.101,60

优质内容筛选与推荐>>
1、存储过程接收多个值(用分隔符号的字符串参数)的用in查询
2、JVM 内部运行线程介绍
3、Java语言实现简单FTP软件------>FTP软件效果图预览之上传功能(三)
4、python之路----钻石继承
5、先查询再插入,并发情况下出现重复数据解决思路


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn