web负载均衡的多种解决方案
阅读数:94 评论数:0
跳转到新版页面分类
架构学
正文
一、集中式负载均衡
1.反向代理
反向代理服务的核心工作主要是转发HTTP请求,因为它工作在HTTP层(应用层),也就是网络结构中的第七层,因此也被称为”七层负载均衡“,可以做反向代理的软件很多,比较常见的一种是Nginx。
对于同一个登录用户的请求,无法保证一定分配到相同的Web机器上,会导致无法找到session的问题。解决方案主要有两种:
(1)配置反向代理的转发规则,让同一个用户的表求证 定落到同一台机器上(通过分析cookie),复杂的转发规则交会消耗更多多的CPU,也增加了代理服务器的负载。
(2)将session这类的信息,专门用某个独立服务来存储,例如redis/memcache,这个方案比较推荐。
反向代理服务,也是可以开启缓存,如果开启了,会增加反向代理的负担,需要谨慎使用。这种负载均衡策略实现和部署非常简单,而且性能表现也比较好。但是,它有”单点故障“的问题,如果挂了,会带来很多的麻烦。而且,到了后期web服务器继续增加,它本身可能成为系统的瓶颈。
某台节点服务器挂了,但是Nginx仍然可能选中这个出故障的机器,然后就一直连接着,因为超时时间很长,会有问题。
ps:代理其实就是一个中介,A和B本来可以直连,中间插入一个C,C就是中介。刚开始的时候,代理多数是帮助内网client网server用的(比如HTTP代理),从内到外。后出现了反向代理,”反向“这个词在这的意思其实是指方向相反,即代理将来自外网client的请求forward到内网server,从外到内。
2.IP负载均衡
工作在网络层(修改IP)和传输层(修改端口),比超工作在应用层性能要高出非常多,原理就是对IP层的数据包的IP地址和端口信息进行修改,达到负载均衡的目的这种方式,也被称不”四层负载均衡“。常见的负载均衡方式,是LVS(Linux Virtual Server)和IPVS(IP Virtual Server)来实现。
它的性能要比反向代理高出很多,但配置和搭建比较复杂。
3.DNS负载均衡
一个域名是可以配置成对应多个IP的,因此,DNS也就可以作为负载均衡服务。这种负载均衡性能极佳,配置简单,但不能自定义规则,存在DNS生效延迟问题,机器故障问题。
4.DNS/GSLB负载均衡
我们常用的CDN(Content Delivery Network,内容分发网络)实现方式,其实就是在同一个域名对应为多IP的基础上更进一步,通过GSLB(Global Server Load Balance)按照指定规则映射域名的IP。
这种方式,和前面的DNS负载均衡一样,不仅性能极佳,而且支持配置多种策略。但是,搭建和维护成本非常高。
二、客户端负载均衡
客户端会有一个服务器地址列表,在发送请求前通过负载均衡算法选择一个服务器,然后进行访问。
三、常见负载均衡算法
1、随机
2、轮询
3、加权轮询
4、地址hash
5、最小链接数: 根据服务的情况,比如请求积压数等参数,将请求分配给当前压力最小的服务器上。