摘自大型网站技术架构负载均衡的方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了摘自大型网站技术架构负载均衡的方法相关的知识,希望对你有一定的参考价值。
1.http重定向负载均衡
http重定向服务器是一台普通的应用服务器,其唯一的功能就是根据用户的http请求计算一台真实的web服务器地址,并将该web服务器地址写入http重定向响应中(Location头)
状态码是302,返回给用户浏览器。负载服务器和web服务器,都是公网的IP。
这种负载均衡的有点是比较简单,缺点是浏览器需要两次请求服务器才能完成一次访问,性能比较差,重定向服务器自身可能成为瓶颈,很少使用.
2.DNS域名解析负载均衡
这是利用DNS处理域名解析请求的同时进程负载均衡的一种方案。
在DNS服务器中配置多个A记录,比如www.mysite.com IN A 114.100.80.1 , www.mysite.com IN A 114.100.80.2,www.mysite.com IN A 114.100.80.3
每次域名解析请求都会根据负载均衡算法计算一个不同的IP地址返回,这就达到了负载均衡的目的了。问题来了,那么负载均衡之后的,session如何共享呢?比如第一次负载到服务器A,第二次负载到服务器B,那么如何A服务器保存的session如何在B服务器上也能访问呢?(第一种,将session的值加密保存在cookie,每次访问服务器的时候,带回服务器;第二种,利用memcached, 数据库,redis等,将session保存在一台单独的服务器上,所有的web服务器都可以访问这台session服务器,那么就解决了共享的问题了,一般常用的方法是加密保存在cookie中。)
DNS域名解析负载均衡的优点是将负载均衡的工作转交给DNS,省掉了网站管理维护负载均衡服务器的麻烦,同时许多DNS支持基于地理位置的域名解析,会将域名解析成距离用户地理位置最佳的一个服务器,加快访问速度。缺点是,每一级的DNS都可能缓存A记录,需要长时间才能生效(好像是10分钟),这段时间,DNS依然会解析到已经下线的服务器,导致用户访问失败。
大型网站的架构一般是dns作为第一级的负载均衡,结构是 dns(负载均衡)->内网的负载均衡服务器(比如lvs,nginx)->web服务器
3.反向代理负载均衡(比如varnish, squid, nginx)
反向代理一般用来缓存资源,以改善网站的性能,(第一次访问资源的时候,反向代理会向资源服务器转发请求,然后缓存资源,然后返回给用户;第二次访问的时候,直接从反向代理获取资源,返回给用户,比如nginx的静态资源缓存,cgi缓存;varnish可以缓存资源,如果是.php结尾的请求则转发到fastcgi服务器等),web服务器不直接对外访问,因此web服务器不需要外部的IP,反向代理服务器则需要两个网卡,配置一个外网,一个内网的IP.
缺点是所有的请求和响应都要经过其中转,所以有可能成为瓶颈。
4.IP负载均衡(lvs的Virtual Server via Network Address Translation(VS/NAT)方法,ip地址重写方法,详细的解释可以看关于LVS的文章)
请求到达负载均衡服务器之后,负载均衡服务器根据负载均衡的算法选择一台后端的web服务器ip,然后把请求的目标IP改为web服务器的IP,将请求的源地址改为自身的IP,然后将请求转发给web服务器,这样,请求和响应都会经过负载均衡服务器。另一种做法是将负载均衡服务器同时作为真实物理服务器集群的网关,这样所有的请求都会达到负载均衡服务器。
IP负载均衡是在内核进程完成数据分发的(看lvs的文章有详细的介绍),较反向代理负载均衡(在应用层)有更好的处理性能。但是所有的请求和响应都要经过负载均衡服务器,所以可能成为瓶颈。
5.数据链路层负载均衡(lvs的Virtual Server via Direct Routing(VS/DR))(最高效,使用最多的方法)
数据链路层负载均衡是指在通信协议的数据链路层修改MAC地址进行负载均衡,详细的内容可以看关于LVS的DR方法的介绍。
以上是关于摘自大型网站技术架构负载均衡的方法的主要内容,如果未能解决你的问题,请参考以下文章