DNS协议
在网络世界,也是这样的。你肯定记得住网站的名称,但是很难记住网站的 IP 地址,因而也需要一个地 址簿,就是DNS 服务器。
下面是DNS的结构图:
- 根域名DNS服务器:返回顶级域DNS服务器的DNS和IP。
- 顶级域DNS服务器:返回权威DNS服务器的DNS。
- 权威DNS服务器:返回相应主机的IP地址。
DNS解析的过程:
为了提高DNS的解析功能,很多网络都会就近部署DNS缓存服务器。
- 电脑客户端会发出一个 DNS 请求,问 www.163.com 的 IP 是啥啊,并发给本地域名服务器 (本地DNS由你的网络服务商(ISP),如电信、移动等自动分配)。
- 本地 DNS 收到来自客户端的请求,会去缓存的大表(标识域名与IP对于关系)中查询,如果能查询到就直接返回。如果没有的查询到,本地的DNS就会去访问它的根域名服务器(根域名服务器是最高层次的,全球一共有13套,它是不会用于解析域名的,它的作用是给你标明对应的顶级域DNS服务器)
- 根域名DNS服务器收到本地DNS服务器的请求,发现后缀是 .com 的,就会返回 .com 对应的顶级域名服务器的地址。
- 本地DNS转向顶级域名服务器(类似 .com .net .org .cn)它负责管理二级域名,比如163.com,然后它会返回对应的权威DNS服务器地址。
- 本地DNS转向权威DNS服务器,然后权威服务器解析后返回对应的IP地址。
- 本地DNS再将IP地址返回给客户端,客户端和目标建立连接。
具体的流程图如下:
负载均衡
站在客户端角度,这是一次DNS 递归查询过程。因为本地 DNS 全权为它效劳,它只要坐等结果即可。 在这个过程中,DNS 除了可以通过名称映射为 IP 地址,它还可以做另外一件事,就是负载均衡。
内部负载均衡:某个应用要访问另外一个应用,如果配置另外一个应用的 IP地址,那么这个访问就是一对一的。但是当被访问的应用撑不住的时候,我们其实可以部署多个。但 是,访问它的应用,如何在多个之间进行负载均衡?只要配置成为域名就可以了。在域名解析的时候,我们只要配置策略,这次返回第一个 IP,下次返回第二个 IP,就可以实现负载均衡了。
全局负载均衡:为了保证我们的应用高可用,往往会部署在多个机房,每个地方都会有自己的 IP 地址。当用户访问某个域名的时候,这个 IP 地址可以轮询访问多个数据中心。如果一个数据中心因为某种原因挂了,只要在DNS 服务器里面,将这个数据中心对应的 IP 地址删除,就可以实现一定的高可用。另外,我们肯定希望北京的用户访问北京的数据中心,上海的用户访问上海的数据中心,这样,客户体验就会非常好,访问速度就会超快。这就是全局负载均衡的概念。