当网站访问量大时,会考虑负载均衡。这也是每个架构师的基本功。其基本地位相当于相声中的说、学、唱。就看工作好不好了:)传统负载均衡的思想是单点的,不管你是硬件还是软件,原理基本一样,如下图:对于一般的需要,这样的架构基本可以解决问题,而且维护起来也比较简单,大部分公司都是这样做的。传统思维的局限性如上图所示,传统思维也有非常明显的局限性。也就是说,网站的响应速度很大程度上受限于负载均衡节点的容量,一旦负载均衡节点自身挂掉,整个网站就会彻底瘫痪。后端服务可以横向扩展,但是对于单个节点来说,即使你增加机器的配置也是有限制的,这不符合互联网技术的发展规律。CDN是如何工作的?作为承载互联网大部分流量的大型基础设施,CDN对负载分流的解决方案非常鼓舞人心,如下图所示:不再聚集在一个节点上,而是在每个合适的节点上共享。这样即使出现单点故障,也只会影响部分用户,我们也可以采用其他方式进行故障转移。同样的做法在传统的BS架构中也可以借鉴。我们也可以直接将用户请求分发到不同的服务器上,而不需要经过统一的节点进行中转。这种转移是如何实现的?答案是:DNS你知道DNS是怎么工作的吗?大多数人可能每天都在使用DNS,却不知道它的基本原理。大家可能知道我们上网需要查询dns服务器,就是下面这个东西。我们只需要询问其域名对应的ip地址即可。但这真的那么简单吗?它怎么知道这个域名对应的ip地址呢?事实上,dns系统是一个典型的树形结构。上图所示的dns服务器其实应该叫做dns缓存查询服务器。它旨在减少Internet上的dns查询负载。如果你的请求没有命中缓存,缓存服务器会自己执行一次标准查询,然后缓存结果。简单的说就是从根服务器开始,逐级询问。以前我们经常讲根服务器的重要性,其实这里也有体现。保留所有域名的初始解释权。但是如果你问根服务器,它不会直接告诉你最后的答案。因为如果要存储所有的记录,太累了,负载和开销是惊人的。那么它告诉你什么?它会告诉你问谁,也就是授权下一级服务器回答你的问题。我们看下面的拟人化过程:1.我:root,root告诉我,segmentfault.com怎么走?2.root:呵呵,你可以问一下.com的dns服务器,地址是xxxxxx3。我:.com,.com告诉我,怎么去segmentfault.com?4..com:呵呵,你可以问一下segmentfault.com的dns服务器(dnspod之类的),地址是xxxxxx5。我:dnspod,dnspod告诉我,怎么去segmentfault.com?6.dnspod:取xxxxxx,遵循你的DNS负载均衡的基本原则。了解了上述过程后,我们得出了两个基本结论。1、dns系统本身是一个分布式网络,相对可靠,至少比你的网站本身更可靠2、dns的最终解释权可由我们自己掌握。有了这两个结论,剩下的就简单了。我们只需要在最终解释的查询结果上做文章即可。简单的说就是把你所有的服务器地址,按照用户自己需要设定的频率返回给用户。以github.com为例,我们先获取它的SOA服务器(因为dns缓存查询服务器会缓存结果,如果直接查询域名,每次都会返回相同的结果),dns域名服务器.com的也是13个,都是[a-m].gtld-servers.net,我们随便选一个找github.com的SOA。如下图:OK,我们得到了四台SOA服务器ns[1-4].p16.dynect.net,然后选择一台去github.com上查询对应的记录。顺便多试几次,看看最后的ip地址会不会变。我们在这里检查了两次。注意ANSWERSECTION部分返回两个结果,一个是192.30.252.129,一次是192.30.252.128。这就是利用dns来实现负载均衡,你最终的访问会到达不同的ip地址。哪些DNS服务提供商支持负载平衡?这是一个比较高级的服务,一般域名注册商的dns服务器是不会支持的。目前支持的服务商有:1.AWSRoute532.NSONE3.Dyn4.dnspod,其中1和4是我们已经用过的,效果比较理想。总结其实DNS能玩的花样远不止这些,它还可以做failover,还可以按区域解析等等。域名自互联网诞生以来就已经存在,但对它的研究和衍生的使用方法才刚刚开始被发现。随着大家对互联网使用的提高,这样的技术肯定会越来越多。作者:默默地出处:https://www.cnblogs.com/liang...
