在进行新闻门户访问,下载的场景的时候,会进行网页的访问,日常中我们会使用大量的网站,如果全部使用IP地址访问,那么很难记住,于是就需要一个域名,可以查看对应的地址

在网络上,记住网站的名字很容易,但是很难记住网站的IP地址,于是需要一个名称-IP的转换的地址簿,就是DNS的服务器

而且因为上网的人数之多,每个人都需要他,一定是一个高并发,高可用的分布式服务器集群

整体的服务器集群如下

图片

分别将服务器分为了

1.根服务器:返回顶级域的DNS服务器的IP

2.顶级域DNS服务器:返回权威DNS服务器的IP地址

3.权威DNS服务器,返回要访问的主机的IP地址

那么DNS的解析流程为

1.首先电脑的客户端会发送一个DNS请求,询问 www.163.com 是什么?首先发给了本地域名服务器,本地的DNS,本地的域名服务器如果是自动分配的,那么可能就是由网络服务商 ISP, 电信 移动等自动分配,在运营商的某个机房里面

2.本地DNS收到了来自客户端的请求,在这个服务器里面存着一个域名 对应 IP的一个大表格,然后能找到www.163.com 的话,会直接返回这个IP地址,如果没有,则会去问根域名服务器,根域名服务器是全球层级的服务器,全球只有13套,不用于域名解析,而是告诉你去哪里找下级服务器

3.根DNS服务器收到了本地DNS的请求,发现了后缀是.com,于是告诉其顶级域名服务器的地址

4.本地DNS继续向顶级域名服务器访问,询问 www.163.com ,顶级域名服务器,就是一些例如.com .net .org这样的一级域名,这样能提供权威域名服务器,于是给了权威服务器的ip

5.本机向权威DNS服务器询问, www.163.com 的对应IP是什么?163.com 的权威服务器管着这个域名,所以可以告诉客户端IP是多少

6.权威服务器返回了对应的IP地址,告诉了本地DNS

7.本地DNS将IP返回给了客户机,客户机和目标建立了连接

图片

但是实际上,DNS除了进行IP的查询,还能做到一些额外的功能

负载均衡

站在客户端的角度,只是往本地DNS服务器发送了一个请求,但是本地DNS服务器,进行了多次的递归查询

在这个递归的查询过程中,DNS可以进行负载均衡

DNS可以进行内部负载均衡

一个应用如果要进行访问数据库,如果配置的是数据库的域名,那么如果服务器的IP进行了更改,那么可以只修改DNS服务器中,将域名从原来的IP地址替换为新的IP地址,整体的工作就完成了,大大简化了运维

在此基础上,我们在多个应用之间配置了域名,那么访问的时候,访问的是应用的集群,我们在域名解析的时候,配置了策略,这次返回第一个IP,下次返回第二个IP,实现负载均衡

为了应用的高可用,往常,我们会将应用部署在了多个机房,每个地方都有自己的IP地址,当用户访问某个域名的时候,IP地址可以轮询的访问多个数据中心,如果一个数据中心因为某个原因死掉了,那么只要在DNS服务器中,将这个数据中心的对应IP地址删除就可以了

而且,如果希望北京的用户访问北京的数据中心,上海的用户访问上海的数据中心,加快访问速度,就能做到全局负载均衡的概念

比如,我们要访问在数据中心存储的静态资源

假设有着多个数据中心,存在多个运营商上,每个数据中心有是三个可用区,对象存储通过跨可用区去部署,实现了高可用,每个数据中心有两个内部负载均衡服务器,后面对接着多个对象存储的前置服务器

Proxy-server

图片

1.一个客户访问 object.yourcompany.com的时候,需要将域名转换为IP进行访问,所以要请求本地DNS解析器

2.本地会首先查看是否有缓存对应的ip,有的话,方便直接使用,没有再进行递归查询

3.如果本地没有缓存,询问本地的DNS服务器

4.本地服务器也会查看自己有没有缓存,如果有就直接返回,没有在进行上面说的查询流程

5.如果本地没有,就只能从根服务器->顶级域名服务器->权威域名服务器的流程

6.对于没有全局负载均衡的应用来说,yourcompany.com的权威DNS服务器可以将其解析成为一个或者多个IP地址,然后客户端通过多个IP地址,进行简单的轮询,实现基本的负载均衡

但是对于需要全局负载均衡的应用,则需要专门的设备和服务器来进行全局负载均衡器 GSLB

Global Server Load Balance,

在权威服务器上,可以配置一个CNAME,给object.yourcompany.com起一个别名,比如 object.vip.yourcompany.com,告诉本地DNS服务器去请求这个GSLB去解析这个 object.vip.yourcompany.com,GSLB会解析这个域名,实现自己的策略的负载均衡

我们有多层的GSLB,是因为方便区分不同的运营商,在不同的运营商中在区分这个数据中心的不同地区

第一层的GSLB,可以通过查看请求他的本地的DNS服务器所在的运营商,知道了用户所在的运营商,假如是移动的,那么可以通过CNAME的方式,通过另一个别名 obejct.yd.yourcompany.com,告诉本地的DNS去请求第二层的GSLB

第二层的GSLB.可以通过查看请求他的本地DNS服务器的地址,知道地理位置,然后将用户的位置比较近的Region的几个内部负载均衡 SLB Server Load Balancer的地址,放回了本地DNS服务器

本地DNS服务器获得后,进行缓存,返回给客户端

客户单开始访问了属于相同运营商距离比较近的Region的对象存储,因为有多个IP地址,所以可以随机或者轮询的选择一个可用区访问

本章小结:

DNS是网络世界的地址簿,可以通过域名去查地址,因为域名服务器是通过树状结构阻止的,域名就递归的去查找

在域名-IP的映射过程汇总,给了应用去负载均衡的机会,可以是简单的负载均衡,也可以根据地址和运营商做的负载均衡

课后思考:

1.全局负载均衡为何要分地址和运营商呢?

必然是分层的概念,首先利用不同的运营商进行了筛选和优化,然后利用地区,进行了最后的优化,提高到了不能再提高的部分

2.全局负载均衡的过程中,常常有失灵的情况,为什么呢?

像是之前说的NAT网关,会在传递的时候进行变化,这就导致了可能在最后到达了GSLB的时候,运营商解析错误了

详细点说,还会有着

全局负载均衡器因为流量大,导致的失灵问题

这种问题,是因为流量达到了当前机器极限,针对此,我们只能通过扩容进行解决

全局负载均衡器因为机器故障了,导致的失灵问题

这种问题,使用集群可以解决

全局负载均衡器因为网络故障导致的失灵

接入更多的线路可以进行解决

3.如果权威DNS连不上,怎么办

比如dns服务器收到www.163.com 的解析请求,递归的调用ns记录为ns1.163.com和ns2.163.com,但是此时ns1.163.com网络不通,dns服务器是一致等待,还是重试后返回失败

一般来说,DNS是基于UDP协议的,应用层设置一个超时器,如果UDP发出后一致没有响应,在一定时间后,会进行重试

且DNS服务器一般都是高可用的,即时挂了,也能很快的进行切换

对于客户端来说,为了保证DNS解析能够成功,会配置多个DNS服务器,一个失败了,还能选择其他的

发表评论

邮箱地址不会被公开。 必填项已用*标注