架构——负载均衡架构知识点索引

文章目录

    • 负载均衡架构分类
      • HTTP重定向负载均衡
      • DNS负载均衡
      • 反向代理负载均衡
      • IP负载均衡
      • 数据链路负载均衡
      • 硬件负载均衡
    • 负载均衡算法
      • 轮询
      • 加权轮询
      • 负载最低优先
      • 性能最优类
      • Hash类
    • 参考

文章只是个人摘要,详细请见参考链接

负载均衡架构分类

负载均衡架构主要有以下几种:
架构——负载均衡架构知识点索引_第1张图片

HTTP重定向负载均衡

定义:来自用户的 HTTP 请求到达负载均衡服务器以后,负载均衡服务器根据某种负载均衡算法计算得到一个应用服务器的地址,通过 HTTP 状态码 302 重定向响应,将新的 IP 地址发送给用户浏览器,用户浏览器收到重定向响应以后,重新发送请求到真正的应用服务器;

优点:**简单

缺点:

  1. 用户完成一次访问,需要访问两次数据中心,一次请求负载均衡服务器,一次请求应用服务器;
  2. 第二次访问,HTTP重定向时,将应用服务器暴露给外部用户,系统安全性降低;

DNS负载均衡

定义:当用户从浏览器发起 HTTP 请求的时候,首先要到 DNS 域名服务器进行域名解析,解析得到 IP 地址以后,用户才能够根据 IP 地址建立 HTTP 连接,访问真正的数据中心的应用服务器(这里IP是负载均衡服务器IP)。

优点:

  1. 实现地理级别的均衡。例如:北方的用户访问北京的机房,南方的用户访问深圳的机房。
  2. 简单

缺点:

  1. 更新不及时:DNS本地缓存时间比较成,用户可能访问失效IP,影响正常业务;
  2. 扩展性差:DNS负载均衡控制权在域名商那,无法根据业务特点,定制化DNS功能和扩展特性;
  3. 分配策略简单:无法感知后端服务器状态;

对于时延和故障敏感的业务,有一些公司自己实现了HTTP-DNS的功能,即使用HTTP协议实现一个私有的DNS系统针对以上问题。 详情请看:HttpDNS:网络世界的地址簿也会指错路

反向代理负载均衡

定义:用户请求到达数据中心以后,最先到达的就是反向代理服务器。反向代理服务器查找本机是否有请求的资源,如果有就直接返回资源数据,如果没有,就将请求发送给后面的应用服务器集群继续处理。例如:Nginx

缺点:

  1. 性能一般:反向代理服务器工作在 HTTP协议层之上,代理的是HTTP的请求和响应,作为应用层协议,相对来说效率低;

优点:

  1. 简单:买个Linux服务器,装上软件即可;

IP负载均衡

定义:当用户的请求到达负载均衡服务器以后,负载均衡服务器会对网络层的数据包的 IP 地址进行转换,修改 IP 地址,将其修改为应用服务器的 IP 地址,然后把数据包重新发送出去,请求数据就会到达应用服务器。可在系统内核直接修改IP数据包的地址,效率比方向代理高;

缺点:不管请求和响应数据包均要经过负载均衡服务器进行IP地址转换 (针对于数据链路层负载均衡 而言),因此,负载均衡会成为响应数据的流量瓶颈;

架构——负载均衡架构知识点索引_第2张图片

数据链路负载均衡

定义:负载均衡服务器并不修改数据包的 IP 地址,而是修改数据链路层里的网卡 mac 地址,在数据链路层实现负载均衡;

优点:数据链路层负载均衡可以解决响应数据量大而导致的负载均衡服务器输出带宽不足的问题

架构——负载均衡架构知识点索引_第3张图片

Linux上实现IP负载均衡和链路层负载均衡技术是LVS,通过Linux可直接配置实现这两种负载均衡;

硬件负载均衡

定义:硬件负载均衡是通过单独的硬件设备来实现负载均衡功能,这类设备和路由器、交换机类似,可以理解为一个用于负载均衡的基础网络设备。目前业界典型的硬件负载均衡设备有两款:F5和A10。

优点:

  1. 性能强
  2. 功能强大:支持各层级负载均衡,支持全面负载均衡算法;
  3. 支持安全防护:具备防火墙、防DDoS攻击等安全功能;

缺点:

  1. 价格贵
  2. 扩展能力差

负载均衡算法

负载均衡算法主要有以下几种:

  1. 轮询
  2. 加权轮询
  3. 负载最低优先
  4. 性能最优类
  5. Hash类

轮询

定义:负载均衡系统收到请求后,按照顺序轮流分配到服务器上。无须关注服务器本身的状态;

服务器本身状态:只要服务器在运行,运行状态是不关注的。但如果服务器直接宕机了,或者服务器和负载均衡系统断连了,这时负载均衡系统是能够感知的,也需要做出相应的处理。

加权轮询

定义:加权轮询是轮询的一种特殊形式,其主要目的就是为了解决不同服务器处理能力有差异的问题。例如,集群中有新的机器是32核的,老的机器是16核的,那么理论上我们可以假设新机器的处理能力是老机器的2倍,负载均衡系统就可以按照2:1的比例分配更多的任务给新机器,从而充分利用新机器的性能。

优缺点:加权轮询解决了轮询算法中无法根据服务器的配置差异进行任务分配的问题,但同样存在无法根据服务器的状态差异进行任务分配的问题。

负载最低优先

定义:负载均衡系统将任务分配给当前负载最低的服务器,这里的负载根据不同的任务类型和业务场景,可以用不同的指标来衡量。例如:

  1. LVS这种4层网络设备,可以根据“连接数”来判断服务器状态;
  2. Nginx这种7层网络负载系统,可以根据“HTTP请求数”来判断服务器状态;

优缺点:负载最低优先的算法解决了轮询算法中无法感知服务器状态的问题,由此带来的代价是复杂度要增加很多。

性能最优类

定义:负载最低优先类算法是站在服务器的角度来进行分配的,而性能最优优先类算法则是站在客户端的角度来进行分配的,优先将任务分配给处理速度最快的服务器,通过这种方式达到最快响应客户端的目的。性能最优优先类算法本质上也是感知了服务器的状态,只是通过响应时间这个外部标准来衡量服务器状态而已。

优缺点:性能最优优先类算法本质上也是感知了服务器的状态,只是通过响应时间这个外部标准来衡量服务器状态而已。因此性能最优优先类算法存在的问题和
负载最低优先类算法类似,复杂度都很高

Hash类

定义:负载均衡系统根据任务中的某些关键信息进行Hash运算,将相同Hash值的请求分配到同一台服务器上,这样做的目的主要是为了满足特定的业务需求,比如:

  1. 源地址Hash:将来源于同一个源IP地址的任务分配给同一个服务器进行处理,适合于存在事务、会话的业务。
  2. ID Hash:将某个ID标识的业务分配到同一个服务器中进行处理,这里的ID一般是临时性数据的ID(如session id)

参考

  1. 负载均衡架构:如何用10行代码实现一个负载均衡服务?
  2. 高性能负载均衡:分类及架构
  3. 高性能负载均衡:算法
  4. HttpDNS:网络世界的地址簿也会指错路

你可能感兴趣的:(计算机基础知识,负载均衡,架构,nginx)