Skip to content

概念

负载均衡:将用户请求分摊到不同的服务器上处理,以提高系统整体的并发处理能力以及可靠性。

  • 服务器负载均衡:
    • 硬件,如 F5,性能高,成本高
    • 软件:Nginx(7 层负载均衡) 或者 LVS(4 层负载均衡)
      • 这里的层级对应 OSI 模型
  • 客户端负载均衡
    • 维护服务器地址列表,发送请求前,服务器通过算法选择某一台服务器
    • 很少用

负载均衡常见的算法有哪些?

随机法

随机法 :最简单的算法,可以配置权重设置不同的概率,可能出现部分机器在一段时间之内无法被随机到。

轮询法

轮询法:挨个轮询服务器处理,也可以设置权重。

在加权轮询的基础上,还有进一步改进得到的负载均衡算法,比如平滑的加权轮训算法。https://github.com/phusion/nginx/commit/27e94984486058d73157038f7950a0a36ecc6e35

哈希法

将请求的参数信息通过哈希函数转换成一个哈希值,然后根据哈希值来决定请求被哪一台服务器处理。

在服务器数量不变的情况下,相同参数的请求总是发到同一台服务器处理,比如同个 IP 的请求、同一个用户的请求。

如果机器数量变化,需要进行较多数据的迁移

一致性 Hash 法

一致性 Hash 法也可以让相同参数的请求总是发到同一台服务器处理。核心思想是将数据和节点都映射到一个哈希环上,然后根据哈希值的顺序来确定数据属于哪个节点。

当服务器增加或删除时,只影响该服务器的哈希,而不会导致整个服务集群的哈希键值重新分布。

七层负载均衡可以怎么做?

DNS 解析

  • 在 DNS 服务器中为同一个主机记录配置多个 IP 地址,这些 IP 地址对应不同的服务器。当用户请求域名的时候,DNS 服务器采用轮询算法返回 IP 地址,这样就实现了轮询版负载均衡。
  • 现在的DNS解析基本都可以进行权重配置

反向代理

  • 客户端将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器,获取数据后再返回给客户端。对外暴露的是反向代理服务器地址,隐藏了真实服务器 IP 地址。反向代理“代理”的是目标服务器,这一个过程对于客户端而言是透明的。
  • Nginx 就是最常用的反向代理服务器,它可以将接收到的客户端请求以一定的规则(负载均衡策略)均匀地分配到这个服务器集群中所有的服务器上。

HTTP重定向

  • 使用较少

客户端负载均衡通常是怎么做的?

  • Netflix Ribbon

  • Spring Cloud Load Balancer

  • Spring Cloud Alibaba

正在精进