利用dns解析来实现网站的负载均衡

标签: dns 负载均衡 | 发表时间:2015-03-04 21:07 | 作者:joyqi
出处:http://segmentfault.com/blogs

当网站的访问量大了就会考虑负载均衡,这也是每一个架构师的基本功了,其基本地位就相当于相声里的说学逗唱,活好不好就看这个了 :)

传统的负载均衡思路是单点的,不管你是硬件的还是软件的基本都是这样的原理

load-balance

对于一般的需求来说,这样的架构基本就可以解决问题了。而且维护起来也相对简单。嗯,大多数公司也都是这么干的。

传统思路的局限性

就如同上图所示,传统思路也存在非常明显的局限性。也就是网站的响应速度很大程度上局限于负载均衡节点的能力,而且一旦负载均衡节点本身挂掉的话,整个网站就完全瘫痪了。后端的服务可以水平扩展,但是对于单个节点来说就算你再增大机器的配置也是有极限的,而且这也不符合互联网技术的发展规律。

CDN是怎么做的

作为互联网上承载大部分流量的一大基础设施,CDN对负载分流的解决思路很具有启发性

图片描述

从上图可以看到,用户的访问被分流了,所有的请求不再是聚集到一个节点上,而是被分担在了各个合适的节点上,这样即使存在单点故障,也仅仅只会影响到一部分用户,况且我们还可以使用其他手段做故障转移。

同样的做法也可以借鉴到传统的BS架构中,我们也可以把用户的请求直接分流到不同的服务器上,而不必经过一个统一的节点中转。这个分流是通过什么做到的呢?答案就是 DNS!

你知道DNS是怎么工作的吗?

大部分人可能天天都用着DNS却不知道它的基本原理,你可能知道我们访问互联网需要查询dns服务器,就是下面的这个玩意

dns

我们只需要问它域名所对应的ip地址就行了。但事情真的这么简单吗?它是怎么知道这个域名所对应的ip地址呢?

其实dns系统是一个典型的树状架构,上图所示的dns服务器其实应该叫dns缓存查询服务器,它是为了减轻互联网上dns查询的负载所设计的。如果你的请求没有命中缓存,那么这个缓存服务器就会自己进行一次标准查询,然后再把结果缓存起来,简单来说就是从根服务器开始一级一级的问。我们以前经常谈到根服务器的重要性其实就体现在这里了,它保留了对所有域名的起始解释权

神奇的解释权机制(SOA)

上面讲到根服务器拥有一切域名的起始解释权,但是如果你去问根服务器它是不会直接告诉你最终答案的。因为如果它要存储所有的记录,那它也太累了,这个负载和开销是惊人的。那它会告诉你什么呢?它会告诉你应该去问谁,也就是它授权下一级服务器来解答你的问题。拟人化这个过程

  1. 我: root, root 告诉我, segmentfault.com 怎么走?
  2. root: 呵呵,你可以去问.com的dns服务器,地址是xxxxxx
  3. 我: .com, .com 告诉我,segmentfault.com 怎么走?
  4. .com: 呵呵,你可以去问segmentfault.com的dns服务器(dnspod之类的),地址是xxxxxx
  5. 我: dnspod, dnspod 告诉我,segmentfault.com 怎么走?
  6. dnspod: 拿着 xxxxxx,走你

dns-1

DNS负载均衡的基本原理

了解了上述过程,我们得到两个基本结论

  1. dns系统本身是一个分布式的网络,它是相对可靠的,起码比你网站本身可靠的多
  2. dns的最终解释是可以受我们自己控制的

有了这两条结论,剩下的事情就简单了,我们只需要在最终解释的查询结果上做文章就可以了。简单来说,就是将你的所有服务器地址,按照自己需求制定的频次,返回给用户。

github.com为例,我们首先获取它的SOA服务器(因为dns缓存查询服务器会缓存结果,如果你直接去查询域名,会每次返回一样的结果), .com的dns域名服务器也是13台,它们是 [a-m].gtld-servers.net,我们随便选一台来找找 github.com的SOA

SOA

OK,我们获取了四个SOA服务器 ns[1-4].p16.dynect.net,再随便选一个来问问github.com对应的记录吧,顺便试几次看看最终的ip地址会不会变化

A Record

我们这里查询了两次,注意 ANSWER SECTION部分返回了两个结果,一次是 192.30.252.129,一次是 192.30.252.128

这就是利用dns实现了负载均衡,你的最终访问会到达不同的ip地址。

有哪些DNS服务商支持负载均衡呢?

这是一种比较高级的服务,一般域名注册商的dns服务器不会支持,目前我已知支持它的服务商有

  1. AWS Route 53
  2. NSONE
  3. Dyn
  4. dnspod

其中1和4是我们已经在使用的,效果比较理想。

总结

其实DNS可以玩的花样远不止这些,还可以做故障转移,也可以按地区解析等等。域名从互联网诞生之初就开始存在了,但是对它的研究以及衍生出来的使用方法才刚刚开始发掘,随着大家对互联网利用的提升,这类技术肯定会越来越多。

相关 [利用 dns 解析] 推荐:

利用dns解析来实现网站的负载均衡

- - SegmentFault 最新的文章
当网站的访问量大了就会考虑负载均衡,这也是每一个架构师的基本功了,其基本地位就相当于相声里的说学逗唱,活好不好就看这个了 :). 传统的负载均衡思路是单点的,不管你是硬件的还是软件的基本都是这样的原理. 对于一般的需求来说,这样的架构基本就可以解决问题了. 就如同上图所示,传统思路也存在非常明显的局限性.

DNS解析过程及DNS TTL值

- - IT技术博客大学习
标签:   DNS   TTL.    经常说DNS劫持,也常常说域名解析不正确. 在阅读《HTTP权威指南》缓存一章时,提到缓存文档过期采用“生存时间技术”与DNS类似. 所以抽空学习了解了一下DNS的解析过程,以及DNS TTL值的概念. 根域名服务器(root-servers.org)是互联网域名解析系统(DNS)中最高级别的域名服务器,全球仅有13台根服务器.

关闭MySQL的DNS反向解析

- - 天空极速
发现有非常多的 unauthenticated user 尝试做登入使用 mysql 的情況 ,当这种情况无限制发生时就会造成系统十分缓慢. 查阅mysql官方网站得知,这属于官方一个系统上的特殊设定,就把他当成mysql的一个bug算了. 不管链接的的方式是经过 hosts 或是 IP 的模式,他都会对 DNS 做反查 mysqld 会尝试去反查 IP -> dns ,由于反查解析过慢,就会无法应付过量的查询.

DNS原理及其解析过程

- - 操作系统 - ITeye博客
 网络通讯大部分是基于TCP/IP的,而TCP/IP是基于IP地址的,所以计算机在网络上进行通讯时只能识别如“202.96.134.133”之类的IP地址,而不能认识域名. 我们无法记住10个以上IP地址的网站,所以我们访问网站时,更多的是在浏览器地址栏中输入域名,就能看到所需要的页面,这是因为有一个叫“DNS服务器”的计算机自动把我们的域名“翻译”成了相应的IP地址,然后调出IP地址所对应的网页.

Chrome和Proxy Switchy支持远程DNS解析

- 洋白菜 - 月光微博客
  以前的Chrome因为没有远程域名解析功能,所以一般都开着一个Firefox作为代理备用. 但是Firefox占用资源太大,总是想换.   现在发现,原来Chrome不知道什么时候已经添加了远程域名解析功能,使用 Proxy Switchy 设置 Socks5 代理之后,访问自动会启用远程DNS解析,不用设置就行,经过测试访问Facebook、Twitter、Youtube等网站均无问题.

修改windows XP 的 VPN域名解析DNS优先级

- 桔子 - iGFW
XP包括之前的系统拨入VPN后,会发现VPN接口配置的DNS的优先级不够而无法对内部主机进行解析. 导致虽然已经连上了vpn但是但是无法打开youtube、twitter等网站,因为系统默认的DNS还是原来的本地连接的DNS,依旧被劫持中. 而通过修改注册表值即可解决这个问题. 1.    点击开始, 点击运行, 键入REGEDIT, 然后按确定.

如何让Godaddy域名使用DNSPod做DNS解析

- - 大猫の意淫筆記
貌似越来越多的godaddy DNS 服务器被区域性的干扰导致无法使用,那么,推荐大家一个国内的优秀免费DNS提供商 dnspod.cn. 第一步,进入Godaddy的域名管理界面. 第二步,点要设置DNS的域名. 第三步,点 Set Nameservers. 第四步,输入DNSPOD.cn 提供的2组DNS服务器地址.

推薦幾個優秀的免費DNS解析服務

- - 0.618網絡空間
域名眾多,分別用了幾家不同的DNS服務. 如下是我自己在用的幾個免費DNS服務,它們都是基於標準的解析系統,技術規範穩定. 不像一些不倫不類的產品,看著方便實際問題多多. He.net是非常古老的電信運營商,有自己的機房和BGP網絡. 它的DNS服務應該是基於IP Anycast的,一直很穩定. 有5組NS服務器:ns1-5.he.net 管理面板比較好用,采用了一些Ajax技術.

不要用DNSPod的免费域名DNS解析服务

- - 阅微堂
博客 » IT技术 » DNS ». 阅微堂之前一直使用DNSPod的NS服务器,用来解释zhiqiang.org的DNS. Google蜘蛛的访问报告多次提示有DNS解释错误,不过由于问题不严重没有重视. 直到11月10日左右,Google连续发送了访问失败的邮件,我才发现错误率已经超过50%.

利用免費可信任的DNS保護您的計算機

- - 0.618網絡空間
域名系統(DNS)是用來解決人類可讀的主機名如 www.0618.us成機器可讀的IP地址,如206.225.24.172. 你的DNS作為一種互聯網的電話簿. 如果你有一個人的名字,但你不知道他們的電話號碼,你可以看一下它在電話簿中. DNS提供同樣類型的互聯網服務. 通常情況下,聯網的計算機使用的DNS服務器IP的網絡管理員或Internet服務提供商(ISP)所提供的.