网络慢走-9
DNS协议
大家一般没有通过IP来在互联网上访问资源的,比如你访问百度,不是在浏览器中输入ip地址来访问百度,说实话鬼知道你百度部署的服务器的IP是啥,所以一般通过一个别名访问,这个别名就叫域名,就像我们的名字之于身份证号码。但是我们知道网络中数据通信一定要知道ip地址才能通信的,那我知道了百度域名,如何通过域名来获得ip地址进而进行网络数据通信呢。那就是DNS服务器所负责的事情。
DNS服务器你可以简单理解为存储了域名跟ip对应关系的服务器,DNS分了几个层次如下
DNS树状结构最顶层的脚根DNS服务器,他不负责域名解析,只是负责解析请求转发,他把顶级域DNS服务的ip返回给客户端,顶级域DNS服务返回权威DNS服务器的ip
那么一个DNS解析的流程是这样的
DNS解析过程客户端先去本机域名解析器查看有没有缓存域名IP,如果没有就去本地DNS服务去解析,本地DNS一般是你所使用的运营商提供的某台服务器。如果本地DNS服务器无法解析,就发给艮DNS解析,根DNS不会解析域名,但是发现你请求的是。com域名那么会把.com顶级域DNS的ip返回给客户端,客户端再去.com顶级域DNS解析域名,顶级域DNS发现你要解析的是baidu.com的域名于是就把baidu.com的权威域名DNSip返回给客户端,客户端再去baidu.com的权威DNS解析域名,这个权威DNS服务正式www.baidu.com域名的原始出处,他保存了这个域名的ip,于是把ip返回给客户端,客户端拿到ip后建立网络连接继续进行网络数据传输。
负载均衡
DNS出来负责解析做域名和ip映射还可以起负载均横的作用。DNS的负载均衡分为两种
一种是内部负载均衡:大概过程就是DNS通过提前定义好的策略去pick服务器ip返回给客户端。比如服务器集群有10个node,DNS解析在每次解析域名的时候通过轮询的方式返回服务器ip
一种是全局负载均衡:意思就是DNS在解析过程中动态选择响应路径最快的ip地址给客户端。比如一个公司在中国和美国都有服务器,但是中国客户访问的时候就动态选择中国服务器响应请求。
全局负责均衡一般考虑临近程度和负载大小两个因素来决定响应最快的ip给客户端,常见的GSLB有三种实现方式,DNS轮询,HTTP重定向,IP欺骗
基于DNS的GLSLB
基于DNS的GLBS注意点是跟DNS服务器在接到解析请求会转发给GSLB服务,然后由GSLB服务完成解析。GSLB通过就近原则选择离客户端距离最近的服务集群里的服务ip给客户端,但是如果这里GSLB接受到的IP地址是本地DNS服务器的IP地址,如果本地DNS服务跟客户端不是在一个区域,那就会出现GSLB判断不准确的情况。
基于HTTP转发的GSLB
HTTP重定向基于HTTP重定向的GSLB,客户端请求域名解析的时候,DNS服务器返回GSLB的ip地址给客户端,于是客户端以为这个ip地址就是服务器的ip地址,于是就拿着ip地址跟GSLB进行通信,GSLB接到客户端请求后范围302重定向还有具体服务器的ip地址,如是请求就被转发到了具体服务器ip地址上去了。正所谓HTTP重定向,但是缺点是也就是只支持http转发
基于IP欺骗的GSLB
基于HTTP欺骗的GSLB这种方式的GSLB也是DNS返回GSLB的ip给客户端,客户端就用这个ip进行通信,但是请求到达GSLB,GSLB选择一个最优的服务器响应请求返回时,服务器把源ip地址改成了GSLB地址,这样对于客户端感觉还是GSLB响应了他的请求而并不知道哪个服务器做的。正所谓善意的欺骗,而且这种方式通知HTTP,FTP等协议的传输。
前面说的都是GSLB通过什么策略骗过客户端把选择最优服务器屏蔽起来的,那GSLB具体怎么选择服务器呢。
第一通过地理区域或自定义区域:将IP的若干条IP地址前缀分配到特定区域,根据本定DNS的IP地址把请求有限分配到特定的服务点上,预先配好的。
第二通过IP权重:为DNS应答的IP分权重,权重决定其他候选IP分配到该IP的流量比例
第三通过往返时间 RTT:Active RTT和passive RTT两种测量方式,active RTT依赖网络健康状况而且会产生非业务流量,passive不会主动测量,而是建立连接后才测量,而且不会产生额外流量。