概念
负载均衡:将用户请求分摊到不同的服务器上处理,以提高系统整体的并发处理能力以及可靠性。
- 服务器负载均衡:
- 硬件,如 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
