文章只是个人摘要,详细请见参考链接
定义:来自用户的 HTTP 请求到达负载均衡服务器以后,负载均衡服务器根据某种负载均衡算法计算得到一个应用服务器的地址,通过 HTTP 状态码 302 重定向响应,将新的 IP 地址发送给用户浏览器,用户浏览器收到重定向响应以后,重新发送请求到真正的应用服务器;
优点:**简单
缺点:
定义:当用户从浏览器发起 HTTP 请求的时候,首先要到 DNS 域名服务器进行域名解析,解析得到 IP 地址以后,用户才能够根据 IP 地址建立 HTTP 连接,访问真正的数据中心的应用服务器(这里IP是负载均衡服务器IP)。
优点:
缺点:
对于时延和故障敏感的业务,有一些公司自己实现了HTTP-DNS的功能,即使用HTTP协议实现一个私有的DNS系统针对以上问题。 详情请看:HttpDNS:网络世界的地址簿也会指错路
定义:用户请求到达数据中心以后,最先到达的就是反向代理服务器。反向代理服务器查找本机是否有请求的资源,如果有就直接返回资源数据,如果没有,就将请求发送给后面的应用服务器集群继续处理。例如:Nginx
缺点:
优点:
定义:当用户的请求到达负载均衡服务器以后,负载均衡服务器会对网络层的数据包的 IP 地址进行转换,修改 IP 地址,将其修改为应用服务器的 IP 地址,然后把数据包重新发送出去,请求数据就会到达应用服务器。可在系统内核直接修改IP数据包的地址,效率比方向代理高;
缺点:不管请求和响应数据包均要经过负载均衡服务器进行IP地址转换 (针对于数据链路层负载均衡 而言),因此,负载均衡会成为响应数据的流量瓶颈;
定义:负载均衡服务器并不修改数据包的 IP 地址,而是修改数据链路层里的网卡 mac 地址,在数据链路层实现负载均衡;
优点:数据链路层负载均衡可以解决响应数据量大而导致的负载均衡服务器输出带宽不足的问题
Linux上实现IP负载均衡和链路层负载均衡技术是LVS,通过Linux可直接配置实现这两种负载均衡;
定义:硬件负载均衡是通过单独的硬件设备来实现负载均衡功能,这类设备和路由器、交换机类似,可以理解为一个用于负载均衡的基础网络设备。目前业界典型的硬件负载均衡设备有两款:F5和A10。
优点:
缺点:
负载均衡算法主要有以下几种:
定义:负载均衡系统收到请求后,按照顺序轮流分配到服务器上。无须关注服务器本身的状态;
服务器本身状态:只要服务器在运行,运行状态是不关注的。但如果服务器直接宕机了,或者服务器和负载均衡系统断连了,这时负载均衡系统是能够感知的,也需要做出相应的处理。
定义:加权轮询是轮询的一种特殊形式,其主要目的就是为了解决不同服务器处理能力有差异的问题。例如,集群中有新的机器是32核的,老的机器是16核的,那么理论上我们可以假设新机器的处理能力是老机器的2倍,负载均衡系统就可以按照2:1的比例分配更多的任务给新机器,从而充分利用新机器的性能。
优缺点:加权轮询解决了轮询算法中无法根据服务器的配置差异进行任务分配的问题,但同样存在无法根据服务器的状态差异进行任务分配的问题。
定义:负载均衡系统将任务分配给当前负载最低的服务器,这里的负载根据不同的任务类型和业务场景,可以用不同的指标来衡量。例如:
优缺点:负载最低优先的算法解决了轮询算法中无法感知服务器状态的问题,由此带来的代价是复杂度要增加很多。
定义:负载最低优先类算法是站在服务器的角度来进行分配的,而性能最优优先类算法则是站在客户端的角度来进行分配的,优先将任务分配给处理速度最快的服务器,通过这种方式达到最快响应客户端的目的。性能最优优先类算法本质上也是感知了服务器的状态,只是通过响应时间这个外部标准来衡量服务器状态而已。
优缺点:性能最优优先类算法本质上也是感知了服务器的状态,只是通过响应时间这个外部标准来衡量服务器状态而已。因此性能最优优先类算法存在的问题和
负载最低优先类算法类似,复杂度都很高
定义:负载均衡系统根据任务中的某些关键信息进行Hash运算,将相同Hash值的请求分配到同一台服务器上,这样做的目的主要是为了满足特定的业务需求,比如: