DNS 服务器
DNS 服务器,一定要设置成高可用、高并发和分布式的。
- 根 DNS 服务器:返回顶级域 DNS 服务器的 IP 地址。
- 顶级域 DNS 服务器:返回区权威 DNS 服务器的 IP 地址。
- 权威 DNS 服务器:返回相应主机的 IP 地址
DNS 解析流程
为提高 DNS 解析性能,很多网络都会就近部署 DNS 缓存服务器。
- 客户端向本地 DNS 发送 DNS 请求,解析 www.163.com 的 IP 地址。本地 DNS 由网路服务商(ISP)自动分配。
- 本地 DNS 在缓存中查找与域名对应的 IP,如果找到就返回;如果没有,请求根 DNS。根域名服务器是最高层次的,全球共有 13 套。它不直接用于域名解析,但能指明一条道路。
- 根 DNS 发现是后缀 .com,返回 .com 的顶级 DNS 的地址。
- 本地 DNS 转向问顶级 DNS。
- .顶级 DNS 返回 www.163.com 区域的权威 DNS 的地址。
- 本地 DNS 转向问权威 DNS 服务器
- 权威 DNS 服务器查询后将对应的 IP 地址返回。
- .本地 DNS 再将 IP 地址返回客户端,客户端和目标建立连接。
负载均衡
负载均衡 扩展阅读 见 文末参考资料
DNS 除了可以通过名称映射为 IP 地址,它还可以做另外一件事,就是负载均衡。
内部负载均衡
例如,某个应用要访问另外一个应用,如果配置另外一个应用的 IP 地址,那么这个访问就是一对一的。但是当被访问的应用撑不住的时候,我们其实可以部署多个。但是,访问它的应用,如何在多个之间进行负载均衡?只要配置成为域名就可以了。在域名解析的时候,我们只要配置策略,这次返回第一个 IP,下次返回第二个 IP,就可以实现负载均衡了。
全局负载均衡
为了保证我们的应用高可用,往往会部署在多个机房,每个地方都会有自己的 IP 地址。用户访问某个域名时,用 IP 地址轮询访问多个数据中心。如何一个数据中心挂了,在 DNS 服务器中将其对应的 IP 删掉,实现高可用。
我们肯定希望北京的用户访问北京的数据中心,上海的用户访问上海的数据中心,这样,客户体验就会非常好,访问速度就会超快。这就是全局负载均衡的概念。
示例:DNS 访问数据中心中对象存储上的静态资源
全国有多个数据中心,托管在多个运营商,每个数据中心三个可用区(Available Zone)。对象存储通过跨可用区部署,实现高可用性。在每个数据中心中,都至少部署两个内部负载均衡器,内部负载均衡器后面对接多个对象存储的前置服务器(Proxy-server)。
- 当一个客户端要访问 object.yourcompany.com 的时候,它要请求本地 DNS 解析器。
- 本地 DNS 解析器先查看看本地的缓存是否有这个记录。如果有则直接使用。
- 如果本地无缓存,则需要请求本地的 DNS 服务器。
- 本地的 DNS 服务器一般部署在你的数据中心或者你所在的运营商的网络中,本地 DNS 服务器也需要看本地是否有缓存,如果有则返回。
- 至 7. 如果本地没有,本地 DNS 才需要递归地从根 DNS 服务器,查到.com 的顶级域名服务器,最终查到 yourcompany.com 的权威 DNS 服务器,给本地 DNS 服务器,权威 DNS 服务器按说会返回真实要访问的 IP 地址。
对于不需要做全局负载均衡的简单应用来讲,yourcompany.com 的权威 DNS 服务器可以直接将 object.yourcompany.com 这个域名解析为一个或者多个 IP 地址,然后客户端可以通过多个 IP 地址,进行简单的轮询,实现简单的负载均衡。
在 yourcompany.com 的 DNS 服务器中,一般通过配置 CNAME 的方式,给 object.yourcompay.com 起一个别名,如 object.vip.yourcompany.com,然后告诉本地 DNS 服务器,去请求 GSLB 解析这个域名,GSLB 就可以在这个解析域名的过程中,通过自己的策略实现负载均衡。
图中有两层 GSLB,因为分运营商和地域。这样,不同运营商的客户可不跨运营商访问,提高吞吐量,减少时延。
- 第一层 GSLB,通过查看请求它的本地 DNS 服务器所在运营商,知道用户所在运营商。假设时移动,通过 CNAME 的方式,通过另一个别名 object.yd.yourcompay.com, 告诉 本地 GSLB 服务器去请求第二层的 GSLB。
- 第二层 GSLB,通过查看请求它的本地 DNS 服务器所在地址,知道用户的地理位置,将离用户近的 Region 里的6个内部负载均衡(SLB,Server Load Balancer) 的地址返回给本地 DNS 服务器。
- 本地 DNS 服务器将结果返回给本地 DNS 解析器。
- 本地 DNS 解析器缓存结果后,返回给客户端。
- 客户会得到属于相同运营商且距离较近的 Region 1 里的6个IP地址,随机/轮询访问即可。
参考资料:
趣谈网络协议(极客时间)链接:
http://gk.link/a/106nW
大型网站架构系列:负载均衡详解(1):
https://www.cnblogs.com/itfly8/p/5043435.html
大型网站架构系列:负载均衡详解(2):
https://www.cnblogs.com/itfly8/p/5043452.html
大型网站架构系列:负载均衡详解(3):
https://www.cnblogs.com/itfly8/p/5080743.html
大型网站架构系列:负载均衡详解(4):
https://www.cnblogs.com/itfly8/p/5080988.html
GitHub链接:
https://github.com/lichangke/LeetCode
知乎个人首页:
https://www.zhihu.com/people/lichangke/
CSDN首页:
https://me.csdn.net/leacock1991
欢迎大家来一起交流学习