当网站的访问量大了就会考虑负载均衡,这也是每个架构师的基本功了,其基本地位就至关于相声里的说学逗唱,活好很差就看这个了 :)git
传统的负载均衡思路是单点的,无论你是硬件的仍是软件的基本都是这样的原理github
对于通常的需求来讲,这样的架构基本就能够解决问题了。并且维护起来也相对简单。嗯,大多数公司也都是这么干的。segmentfault
就如同上图所示,传统思路也存在很是明显的局限性。也就是网站的响应速度很大程度上局限于负载均衡节点的能力,并且一旦负载均衡节点自己挂掉的话,整个网站就彻底瘫痪了。后端的服务能够水平扩展,可是对于单个节点来讲就算你再增大机器的配置也是有极限的,并且这也不符合互联网技术的发展规律。后端
做为互联网上承载大部分流量的一大基础设施,CDN对负载分流的解决思路很具备启发性缓存
从上图能够看到,用户的访问被分流了,全部的请求再也不是汇集到一个节点上,而是被分担在了各个合适的节点上,这样即便存在单点故障,也仅仅只会影响到一部分用户,何况咱们还可使用其余手段作故障转移。服务器
一样的作法也能够借鉴到传统的BS架构中,咱们也能够把用户的请求直接分流到不一样的服务器上,而没必要通过一个统一的节点中转。这个分流是经过什么作到的呢?答案就是 DNS!网络
大部分人可能每天都用着DNS殊不知道它的基本原理,你可能知道咱们访问互联网须要查询dns服务器,就是下面的这个玩意架构
咱们只须要问它域名所对应的ip地址就好了。但事情真的这么简单吗?它是怎么知道这个域名所对应的ip地址呢?负载均衡
其实dns系统是一个典型的树状架构,上图所示的dns服务器其实应该叫dns缓存查询服务器,它是为了减轻互联网上dns查询的负载所设计的。若是你的请求没有命中缓存,那么这个缓存服务器就会本身进行一次标准查询,而后再把结果缓存起来,简单来讲就是从根服务器开始一级一级的问。咱们之前常常谈到根服务器的重要性其实就体如今这里了,它保留了对全部域名的起始解释权分布式
上面讲到根服务器拥有一切域名的起始解释权,可是若是你去问根服务器它是不会直接告诉你最终答案的。由于若是它要存储全部的记录,那它也太累了,这个负载和开销是惊人的。那它会告诉你什么呢?它会告诉你应该去问谁,也就是它受权下一级服务器来解答你的问题。拟人化这个过程
了解了上述过程,咱们获得两个基本结论
有了这两条结论,剩下的事情就简单了,咱们只须要在最终解释的查询结果上作文章就能够了。简单来讲,就是将你的全部服务器地址,按照本身需求制定的频次,返回给用户。
以github.com
为例,咱们首先获取它的SOA服务器(由于dns缓存查询服务器会缓存结果,若是你直接去查询域名,会每次返回同样的结果),.com
的dns域名服务器也是13台,它们是[a-m].gtld-servers.net
,咱们随便选一台来找找github.com
的SOA
OK,咱们获取了四个SOA服务器ns[1-4].p16.dynect.net
,再随便选一个来问问github.com对应的记录吧,顺便试几回看看最终的ip地址会不会变化
咱们这里查询了两次,注意ANSWER SECTION
部分返回了两个结果,一次是192.30.252.129
,一次是192.30.252.128
。
这就是利用dns实现了负载均衡,你的最终访问会到达不一样的ip地址。
这是一种比较高级的服务,通常域名注册商的dns服务器不会支持,目前我已知支持它的服务商有
其中1和4是咱们已经在使用的,效果比较理想。
其实DNS能够玩的花样远不止这些,还能够作故障转移,也能够按地区解析等等。域名从互联网诞生之初就开始存在了,可是对它的研究以及衍生出来的使用方法才刚刚开始发掘,随着你们对互联网利用的提高,这类技术确定会愈来愈多。