利用dns解析来实现网站的负载均衡
当网站的访问量大了就会考虑负载均衡,这也是每一个架构师的基本功了,其基本地位就相当于相声里的说学逗唱,活好不好就看这个了 :)
传统的负载均衡思路是单点的,不管你是硬件的还是软件的基本都是这样的原理
对于一般的需求来说,这样的架构基本就可以解决问题了。而且维护起来也相对简单。嗯,大多数公司也都是这么干的。
传统思路的局限性
就如同上图所示,传统思路也存在非常明显的局限性。也就是网站的响应速度很大程度上局限于负载均衡节点的能力,而且一旦负载均衡节点本身挂掉的话,整个网站就完全瘫痪了。后端的服务可以水平扩展,但是对于单个节点来说就算你再增大机器的配置也是有极限的,而且这也不符合互联网技术的发展规律。
CDN是怎么做的
作为互联网上承载大部分流量的一大基础设施,CDN对负载分流的解决思路很具有启发性
从上图可以看到,用户的访问被分流了,所有的请求不再是聚集到一个节点上,而是被分担在了各个合适的节点上,这样即使存在单点故障,也仅仅只会影响到一部分用户,况且我们还可以使用其他手段做故障转移。
同样的做法也可以借鉴到传统的BS架构中,我们也可以把用户的请求直接分流到不同的服务器上,而不必经过一个统一的节点中转。这个分流是通过什么做到的呢?答案就是 DNS!
你知道DNS是怎么工作的吗?
大部分人可能天天都用着DNS却不知道它的基本原理,你可能知道我们访问互联网需要查询dns服务器,就是下面的这个玩意
我们只需要问它域名所对应的ip地址就行了。但事情真的这么简单吗?它是怎么知道这个域名所对应的ip地址呢?
其实dns系统是一个典型的树状架构,上图所示的dns服务器其实应该叫dns缓存查询服务器,它是为了减轻互联网上dns查询的负载所设计的。如果你的请求没有命中缓存,那么这个缓存服务器就会自己进行一次标准查询,然后再把结果缓存起来,简单来说就是从根服务器开始一级一级的问。我们以前经常谈到根服务器的重要性其实就体现在这里了,它保留了对所有域名的起始解释权
神奇的解释权机制(SOA)
上面讲到根服务器拥有一切域名的起始解释权,但是如果你去问根服务器它是不会直接告诉你最终答案的。因为如果它要存储所有的记录,那它也太累了,这个负载和开销是惊人的。那它会告诉你什么呢?它会告诉你应该去问谁,也就是它授权下一级服务器来解答你的问题。拟人化这个过程
- 我: root, root 告诉我, segmentfault.com 怎么走?
- root: 呵呵,你可以去问.com的dns服务器,地址是xxxxxx
- 我: .com, .com 告诉我,segmentfault.com 怎么走?
- .com: 呵呵,你可以去问segmentfault.com的dns服务器(dnspod之类的),地址是xxxxxx
- 我: dnspod, dnspod 告诉我,segmentfault.com 怎么走?
- dnspod: 拿着 xxxxxx,走你
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服务商支持负载均衡呢?
这是一种比较高级的服务,一般域名注册商的dns服务器不会支持,目前我已知支持它的服务商有
其中1和4是我们已经在使用的,效果比较理想。
总结
其实DNS可以玩的花样远不止这些,还可以做故障转移,也可以按地区解析等等。域名从互联网诞生之初就开始存在了,但是对它的研究以及衍生出来的使用方法才刚刚开始发掘,随着大家对互联网利用的提升,这类技术肯定会越来越多。
利用dns解析来实现网站的负载均衡的更多相关文章
- Android利用Jsoup解析html 开发网站客户端小记。
这些天业余时间比较多,闲来无事,想起了以前看过开发任意网站客户端的一篇文章,就是利用jsoup解析网站网页,通过标签获取想要的内容.好了废话不多说,用到的工具为 jsoup-1.7.2.jar包,具体 ...
- linux系统下对网站实施负载均衡+高可用集群需要考虑的几点
随着linux系统的成熟和广泛普及,linux运维技术越来越受到企业的关注和追捧.在一些中小企业,尤其是牵涉到电子商务和电子广告类的网站,通常会要求作负载均衡和高可用的Linux集群方案. 那么如何实 ...
- 解决网站在负载均衡环境下SESSION丢失的问题
在WEB场中,动态网页往往会因为几台主机做了负载而产生SESSION丢失的问题,网上也有很多的介绍,我这里只将我经历的过程给大家分享一下: 系统要运行在负载平衡的 Web 场环境中,而系统配置文件 ...
- Nginx简单实现网站的负载均衡
在大型网站搭建时,都会考虑如果用户量每日不断增加,大量的并发访问,会不会给网站.数据库带来崩盘的灾难.今天我们就讨论一下,现实中如何解决这些问题的一套最为容易实现的方案. 控制并发,大家都会首先考虑的 ...
- 利用BGP虚拟下一跳实现链路负载均衡
最近针对BGP链路负载均衡方案“虚拟下一跳”进行了总结,现将总结的PPT贴上来.
- 如何利用MHA+ProxySQL实现读写分离和负载均衡
摘要:本文分享一下"MHA+中间件ProxySQL"如何来实现读写分离+负载均衡的相关知识. 本文分享自华为云社区<MySQL高可用架构MHA+ProxySQL实现读写分离和 ...
- 简单的nginx模拟网站的负载均衡
环境:nginx1.10.3 虚拟机环境:3台centos7虚拟机 将148机器作为转发服务器配置如下 监听80端口,在http里面配置如下 将edc.com分别转发到149和150的服务器上 本地主 ...
- DNS的主从,转发与负载功能
接着原来<DNS原理与应用>的文章,本章内容主要通过实现DNS的主从,转发,及基于域名解析不同的ip实现后端服务负载均衡的效果.最后再实现DNS的高级功能:类似CDN原理实现基于IP实现区 ...
- DNS负载均衡
1)DNS负载均衡的介绍 对于负载均衡的一个典型应用就是DNS负载均衡.庞大的网络地址和网络域名绝对是负载均衡体现优势的地方.那么它的具体原理是如何的呢?本文就将为大家详细介绍一下相关内容. DNS负 ...
随机推荐
- C# IL DASM 使用
IL DASM反编译工具 使用C#的猿人或多或少都会对微软的IL反编译工具(ildasm.exe)有所认识.我最早接触到这工具是公司同事使用他反编译exe程序,进行研读和修改.感觉他还是很强大. IL ...
- 【BZOJ】【1026】【SCOI2009】Windy数
数位DP cxlove基础数位DP第三题 = =预处理是个很有用的东西!然后就是分类讨论! /***************************************************** ...
- 【BZOJ】【2982】Combination
排列组合 Lucas定理模板题…… 感觉我做题顺序有点问题啊……应该是BZOJ 2982-->HDOJ 3037-->BZOJ 1272 好吧这个现在来看就有些水了…… 预处理一下fact ...
- 前端MVC学习——模块发开发、seajs学习
这份学习链接已经足够了:http://seajs.org/docs/#intro 我假设你至少已经浏览过上述链接文档.并且掌握了基本的seajs基础知识~ 手把手教你创建helloworld~ Hel ...
- css3选择器笔记
通用选择器ul~p{} 为ul之后的所有p标签设置属性 (ul和p为同级元素)ul+p{} 仅为ul之后的p标签设置属性 (ul和p为相邻元素)div>p 为div之后的p标签设置属性{ d ...
- [设计模式] 22 模板方法模式 template
转http://www.jellythink.com/archives/407 在GOF的<设计模式:可复用面向对象软件的基础>一书中对模板方法模式是这样说的:定义一个操作中的算法骨架,而 ...
- 关于asp.net mvc4 在IE8下 导出excel失败的解决办法
在使用FileResult向浏览器输出文件时(pdf,excel等),通常这样做: byte[] fileContents = Encoding.UTF8.GetBytes(sbHtml.ToStri ...
- C++ char*,const char*,string,int 的相互转换
C++ char*,const char*,string,int 的相互转换 1. string转const char* string s ="abc";const char* ...
- Android 一个Activity保存它自己的实例
一个Activity保存他自己的实例的作用是,在其他Activity中可以方便的调用该Activity里的方法. 我们可以使用一个静态的变量保存当前Activity的实例,并将其标志为private访 ...
- Windows Azure VM的两种shut down 方式
今天在调查Azure的价格时,发现下面的语句,来自http://azure.microsoft.com/en-us/pricing/details/virtual-machines/ * If my ...