负载均衡的方案
来源:互联网 发布:土耳其人 知乎 编辑:程序博客网 时间:2024/05/01 08:06
负载均衡:在计算机集群、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最佳化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。
负载均衡既可以采用硬件实现,也可以采用软件实现。比较知名的F5负载均衡器,就是基于硬件实现的,性能上优于大部分软件方式,不过成本也比较昂贵。大部分用户都会选用软件实现的方式来解决。
(下面图片来自网络)
负载均衡方案
1.HTTP重定向负载均衡
这种适用于WEB服务器,负载均衡器根据HTTP请求,计算出实际服务器地址,通过302重定向,用户再去请求实际的服务器地址。这种方案比较简单,但性能较差,需要2次请求才能返回结果。目前一般都不会采用这种方式了。
2.DNS域名解析负载均衡
在DNS中存储实际主机IP,域名解析的时候,根据负载均衡算法返回匹配的IP地址。
这种方案的优点是负载均衡由DNS来完成工作,对服务器是透明的,服务器本身不用维护负载均衡。
缺点是负载均衡不是服务器维护,无法精细控制,DNS在客户端往往有缓存,服务器的变更,出问题等很难及时反映到客户端上。
3.反向代理负载均衡
反向代理服务器解析客户端请求,根据负载均衡算法转发到不同的服务器,用户和后台服务器不再有直接的连接。请求、响应都由反向代理服务器进行转发。
优点是集成在一起,部署简单。
缺点是所有请求响应都要经过反向代理服务器,其本身可能成为性能的瓶颈。
如Nginx就可以部署为反向代理服务器。
4.IP负载均衡
上面的反向代理属于应用层的负载均衡,而IP负载均衡属于网络层。
用户请求包到达负载均衡服务器,在操作系统内核层获取网络包,根据负载均衡算法得出后台服务器地址,修改数据包的源地址、目的地址,转发给服务器,整个过程都在内核层中处理,收到响应包后在修改为正确的源地址、目的地址转发给用户。
优点是整个过程都在内核层处理,具有更好的性能。
缺点是所有响应包都要经过负载均衡服务器,其网卡带宽很容易成为系统的瓶颈。
5.数据链路层负载均衡
上面的方法时在网络层来处理,而数据链路层负载均衡就是在TCP/IP协议中的最底层进行负载均衡了。
该方法通过修改数据报文的MAC地址来实现负载均衡。在服务器集群中所有机器虚拟IP和负载均衡服务器IP一致,达到不用修改源地址和目的地址就能进行数据分发。这种方式又称为直接路由方式。
目前使用最广泛的一种方式就是数据链路层负载均衡,如LVS(Linux Virtual Server)同时支持IP负载均衡和数据链路层负载均衡。
负载均衡算法
经典的8种负载均衡算法
- 轮询调度
按顺序轮流分配到真实服务器上,均等地对待每台服务器,不管服务器的实际连接数和系统负载。 - 加权轮询
根据服务器的不同处理能力来调度请求。保证处理能力强的服务器处理更多访问流量。调度器动态地调整权值。 - 最少连接
动态地将请求调度到已建立连接数最好的服务器上。如果集群服务器的性能相近,采用这种方式可以较好地负载均衡。 - 加权最少连接
在服务器性能差异较大,这种方式比较适合。有较高权值的服务器承受较大比例的活动连接负载。 - 基于局部性的最少连接
先根据目标地址找出最近使用的服务器,若该服务器没超载,将请求发送到该服务器上,若服务器不存在,或超载且处于一半的工作负载,则用“最少连接”选择一个可用的服务器处理请求。
目前主要用于Cache集群。 - 带复制的基于局部性最少连接
也是主要用于Cache集群。 - 目标地址散列
将请求的目标IP地址作为散列键,从静态分配的散列表中找出服务器,若服务器可用未超载,则由该服务器处理请求。 - 源地址散列
原理同上,但是将源地址作为散列键。
- 负载均衡的方案
- 负载均衡的搭建方案
- 请教大型网站的负载均衡方案
- windows下负载均衡的一种方案
- 关于F5负载均衡的一点方案
- HAProxy,智能分流的负载均衡方案
- Nginx的负载均衡方案详解
- Nginx的负载均衡方案详解
- Nginx的负载均衡方案详解
- 负载均衡的几种常用方案
- 负载均衡的几种常用方案
- 网络负载均衡方案
- mysql负载均衡 方案
- 负载均衡方案总结
- 负载均衡方案总结
- TCP负载均衡方案
- 负载均衡方案
- Impala负载均衡方案
- 开启软件开发之路
- RabbitMQ (三) 发布/订阅
- SpringBoot之Hypermedia-Driven RESTful Web Service
- 【原创】增强版冒泡排序算法-java版
- 关于安卓的知识点总结
- 负载均衡的方案
- Android入门--Toast五种情形
- Memcached - Base
- iOS 各个型号的尺寸及大小
- android 关于服务的详细深入介绍
- C++析构函数为什么要为虚函数
- java发送http的get、post请求
- Android_EventBus使用
- react-native IDE(nuclide)安装