Web服务器负载均衡的几种方案 : DNS轮询

大约在2005年初,大众点评网开办一年多,网站的访问量已经不能单单靠一台Web服务器、一台数据库服务器来支撑。准备增加几台前端的Web服务器分担压力,由于没有这方面的经验,经过一段时间的研究,找到了几种简单的负载均衡的方案。这篇文章就简单讲讲几种方案的优缺点。
希望抛砖引玉,大家一起探讨各种方案的优缺,找到适合不同级别网站的合理方案。

**几种解决方案的部分内容不太适用于纯静态、不需要身份验证的网站。

系列索引

 

本篇主要讲一下最简单的方案——DNS轮询。

DNS轮询

大多域名注册商都支持多条A记录的解析,其实这就是DNS轮询,DNS服务器将解析请求按照A记录的顺序,逐一分配到不同的IP上,这样就完成了简单的负载均衡。

优点
  • 基本上无成本,因为往往域名注册商的这种解析都是免费的;
  • 部署方便,除了网络拓扑的简单扩增,新增的Web服务器只要增加一个公网IP即可。
缺点
  • 健康检查,如果某台服务器宕机,DNS服务器是无法知晓的,仍旧会将访问分配到此服务器。修改DNS记录全部生效起码要3-4小时,甚至更久;
  • 分配不均,如果几台Web服务器之间的配置不同,能够承受的压力也就不同,但是DNS解析分配的访问却是均匀分配的。其实DNS也是有分配算法的,可以根据当前连接较少的分配、可以设置Rate权重分配等等,只是目前绝大多数的DNS服务器都不支持;
  • 会话保持,如果是需要身份验证的网站,在不修改软件构架的情况下,这点是比较致命的,因为DNS解析无法将验证用户的访问持久分配到同一服务器。虽然有一定的本地DNS缓存,但是很难保证在用户访问期间,本地DNS不过期,而重新查询服务器并指向新的服务器,那么原服务器保存的用户信息是无法被带到新服务器的,而且可能要求被重新认证身份,来回切换时间长了各台服务器都保存有用户不同的信息,对服务器资源也是一种浪费。
部署方法

这个是万网的域名控制面板,将同一域名解析到2条A记录上。

DNS

这个是免费的智能DNS解析服务,www.dnspod.com,不仅可以多条A记录,而且还能使用中国特色,根据电信、网通、教育网的用户访问,解析到不同的IP上。

DNS

实验

先将www.alcoholwang.cn的A记录解析到61.172.244.75和61.172.244.91上,然后使用nslookup工具查看。

 DNS

nslookup

总结

之前看到文章中讨论,关于DNS服务器的压力问题,其实并不用太过担心,因为解析记录通常都是有一小时的缓存的, 如果用户最近一级的DNS服务器上的解析记录还未过期的话,是不用查询主服务器的,通常DNS都有一小时的缓存,所以这样就等于把压力分摊到了各用户最近一级的DNS服务器上了。

 

接下一篇会针对专门的负载均衡软件进行介绍

posted @ 2008-02-28 15:23 工业酒精 阅读(65052) 评论(31)  编辑 收藏 网摘 所属分类: LTM

  回复  引用  查看    
#1楼2008-02-28 15:39 | 马可香蕉      
关注这个主题
  回复  引用  查看    
#2楼[楼主]2008-02-28 15:40 | 工业酒精      
@马可香蕉

接下来会针对软件、硬件进行一些介绍。
软件方面是我最不擅长的,因为接触的很少。

网站本身用的是硬件,以后长期会介绍关于硬件方面的知识。

  回复  引用  查看    
#3楼2008-02-28 15:57 | 1-2-3      
大众点评是个非常成功的品牌呀,我的同事都非常喜欢它。
  回复  引用  查看    
#4楼[楼主]2008-02-28 16:00 | 工业酒精      
@1-2-3
谢谢,07年发展很迅速,队伍扩充很快,希望08年是爆发的一年。

  回复  引用  查看    
#5楼2008-02-28 16:03 | 第一控制.NET      
还是负载均衡吧。
期待你讲讲硬件,我软件硬件都不擅长。

  回复  引用  查看    
#6楼[楼主]2008-02-28 16:10 | 工业酒精      
@第一控制.NET
对的,负载均衡。

因为08年很大一项工作就是静态化,Web2.0的网站,大多都是动态的,除了使用缓存,如何静态化也是一个值得探讨的问题,所以重新拾回负载均衡,从原理看起,想利用负载均衡为静态化提供便利,在源站程序最小范围的修改完成这项工作,同时把拾回的东西写点东西出来。前2篇都算炒冷饭吧,呵呵。


  回复  引用  查看    
#7楼2008-02-28 21:09 | TT.Net      
正是我想要了解的东西~
  回复  引用  查看    
#8楼2008-02-28 21:27 | 冰封的心      
我最想知道是如何让负载服务器文件实时同步
  回复  引用  查看    
#9楼2008-02-28 21:27 | carysun      
这方面做程序的人都不擅长,博主可以多讲点
  回复  引用  查看    
#10楼2008-02-28 22:03 | Jeffrey Zhao      
@冰封的心
什么样的文件?如果只是图片文件的话我以前靠后端的一份拷贝+前端Squid集群实现过,这样就不存在同步问题了。
至于如果是较大文件——比如之前做过电信机房和网通机房之间的同步,是自己写程序实现的简单调度,如果在电信访问网通上传的内容时,发现自己本地还没有此文件的拷贝,那么就从网通服务器上直接取——虽然比较慢,但是这只是短时间内的情况。

  回复  引用    
#11楼2008-02-28 23:36 | Dawn[未注册用户]
good
  回复  引用  查看    
#12楼[楼主]2008-02-29 01:22 | 工业酒精      

@冰封的心
不知道你具体的网站情况,所以很难给出方案。
你可以说说,你大概的情况,我们找出解决的办法。

我说说点评网关于页面中引用图片、上传图片的方案。当用户访问网站时,Web服务器(http://www.dianping.com">www.dianping.com)只返回给用户html内容,而html中js、css、jpg、gif等图片,调用另外一个域名(http://static.dianping.com">static.dianping.com)下的文件。

http://static.dianping.com/">static.dianping.com这个域名指向的是一台Squid服务器,用来进行文件的缓存和加速,Squid服务器连接着内网的一台文件服务器,这台就是源服务器了,实际上图片等资源是存储在这台服务器上的。

那么如果有用户上传图片怎么办,比较简单的2种解决方案:
1、文件服务器上开共享目录,在web服务器上映射成磁盘,将图片保存在这个磁盘下,实际上就是保存在文件服务器上。
2、文件服务器上部署一个WebService,用来接收Web服务器发送的上传请求,并保存起来,同样保存在文件服务器上。

大众点评网采用的是第二种方案。这种情况下,还有一个好处,如果文件服务器只用于存储,似乎浪费了点,我们把文件服务器同时作为一个图片处理服务器,WebService接收完数据后,还会进行一些图片的后期处理,再保存起来。这时还可以主动的同步到其他文件服务器上,作为备份或者应用。


  回复  引用  查看    
#13楼[楼主]2008-02-29 01:24 | 工业酒精      
@carysun
我也是程序员,只是来点评网比较早,所以很多项目都有机会接触到,亲眼见证一个网站从小到大,也是一件快乐并痛着的过程。

  回复  引用  查看    
#14楼[楼主]2008-02-29 01:25 | 工业酒精      
@Jeffrey Zhao
老赵,你提到的大文件,可以用UDP进行传输,速度可能会快一点点。

  回复  引用  查看    
#15楼2008-02-29 10:24 | Klesh Wong      
UDP?要是丢包了怎么办?
  回复  引用  查看    
#16楼[楼主]2008-02-29 10:53 | 工业酒精      
@Klesh Wong
只是提出方案。。。我同事以前完成过,但是具体细节不是很清楚,园子里面也有相关的文章的,google下吧

  回复  引用    
#17楼2008-02-29 11:16 | 在线代理[未注册用户]
DNS轮训不好,

不喜欢这样的处理方式。

  回复  引用  查看    
#18楼[楼主]2008-02-29 11:23 | 工业酒精      
@在线代理
看看优缺点比较就知道了啊~~~~~~

但是当你了软件或硬件的负载均衡,是可以把DNS轮询累加上去的~~~~~~

  回复  引用    
#19楼2008-03-01 10:00 | QQ资料[未注册用户]
不错,这种比较适合新浪之流的网站
  回复  引用  查看    
#20楼2008-03-01 15:29 | Jeffrey Zhao      
@QQ资料
DNS轮询是肯定不适合新浪之流的网站的。它们应该是使用四层或七层交换来负载均衡数千台服务器。普通互联网应用一辈子到不了这种规模……

  回复  引用  查看    
#21楼[楼主]2008-03-02 19:53 | 工业酒精      
@Jeffrey Zhao
呵呵,上次去北京,和sina播客的一个技术经理聊天,说起构架,就已经听得很复杂了。。。。广域网流量负载均衡到本地流量负载均衡。。。。一个很大的系统。。

  回复  引用  查看    
#22楼2008-03-03 00:49 | Jeffrey Zhao      
@工业酒精
其实我在之前的公司也是在做此类视频分享网站,很多经验都是从那里来的。不过其实视频网站的很多做法和以内容为主的系统相比还是有一定不同的……有机会要多多交流。

  回复  引用  查看    
#23楼[楼主]2008-03-05 00:28 | 工业酒精      
@Jeffrey Zhao
老赵,视频要复杂的多,个人感觉。。。因为视频往往都是长连接,服务器资源消耗和网络资源消耗都很厉害

这种负载均衡,最简单的办法,负载均衡----一堆squid---各squid对应的源服务器。。。。。然后用负载均衡对需要的视频URL进行hash,根据规则分配到不同的squid上,这样保证各squid的内容是不一样的,最大化利用了squid。

  回复  引用    
#24楼2008-03-11 23:14 | cw[未注册用户]
大哥, 向你请教一个问题!

你们网站的城市定位是用的纯真IP库, 还是第三方的IP地址库....

正在为选择IP库头疼, 我是想花些钱买一个用, 这样服务有保障...

谢谢!!!

  回复  引用  查看    
#25楼[楼主]2008-03-12 22:20 | 工业酒精      
@cw
我们暂时还是用纯真IP库。。。。

因为不是最最关键的业务需求,所以出现的偏差还是允许的。。。

你看看这个能不能帮你。。。

http://www.linux-cn.com/html/network/security/20070426/20164.html" target="_new">http://www.linux-cn.com/html/network/security/20070426/20164.html

  回复  引用    
#26楼2008-03-15 21:38 | cw[未注册用户]
非常感谢大哥的回复.....

谢谢!!!

  回复  引用    
#27楼2008-03-18 14:29 | Dawn[未注册用户]
“接下一篇会针对专门的负载均衡软件进行介绍”什么时候出啊。。等ing....
  回复  引用  查看    
#28楼[楼主]2008-03-18 17:34 | 工业酒精      
@Dawn
最近比较忙。。。软件因为我不是很熟悉,所以需要收集更多的资料

硬件方面,我比较熟悉了

  回复  引用  查看    
#29楼2008-03-20 11:18 | 冰封的心      
不知道楼主对Microsoft Application Center 2000是否研究过?
如何在负载服务器上保持用户的验证信息?

  回复  引用    
#30楼2009-01-16 16:16 | xueleixu[未注册用户]
你可以把所有验证信息放到单独的一台服务器上保存,这样只要有用户登录,不管在哪台服务器登录,都会到那台存放验证信息的服务器上面验证。
  回复  引用    
#31楼2009-02-01 13:58 | goguoguo[未注册用户]
在dns的基础上使用LVX、haproxy或者squid或者nginx来做负载均衡晒。
建议使用haproxy,配置性强,性能卓越。
欢迎到我的博客与我讨论:
<a href="blog.goguoguo.com">blog.goguoguo.com</a>




发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1084684




相关文章:

相关链接: