负载均衡是什么?
负载均衡,就是把请求分配给多台服务器,避免某一台太忙,其他服务器却闲着。 例如:有三台服务器,一台已经处理了800个连接,另外两台各处理100个连接。负载均衡服务可以把新连接优先分配给后两台,从而提高整个系统的处理能力。配合检查,还能绕过故障点。
负载均衡服务器怎样工作:
| 方式 | 工作过程 | 特点 |
|---|---|---|
| 代理转发 | 客户端->负载均衡服务器->业务服务器 | 请求和响应经过代理,客户端使用同一接口 |
| 返回节点地址 | 客户端先检查节点,在直接连接业务服务器 | 调度服务器只选址,客户端需要支持查询与重试 |

注意:这里均衡的是新请求或新连接的分配。已经建立的 TCP 连接不会因为其他节点变空闲而自动迁移。
常见的负载均衡算法?
| 算法 | 描述 | 优点 | 缺点 |
|---|---|---|---|
| 轮询 | 依次将请求分配给每台服务器 | 简单易实现,适用于负载均衡需求较低的场景 | 不考虑服务器的当前负载能力和处理能力,可能导致负载不均衡 |
| 加权轮询 | 为每台服务器分配权重,权重高的接收更多请求 | 考虑了服务器的处理能力,能更好地分配负载 | 权重设置和调整需要根据实际情况优化 |
| 最小连接数 | 将请求分配给当前活动连接数最少的服务器 | 动态调整,适合长连接的场景 | 需要持续跟踪服务器的连接数,计算量较大 |
| 加权最小连接数 | 在最小连接数的基础上引入权重概念 | 结合了权重的和最小连接数的优点,能够精确地分配负载 | 需要实时跟踪服务器状态,增加了一定的复杂性 |
| 源地址哈希 | 根据客户端IP地址的哈希值将请求分配到固定的服务器 | 适合于需要会话保持的场景 | 服务器数量变化时,哈希算法可能导致请求重新分配 |
| 随机 | 随机选择一台服务器处理请求 | 简单适用,适合负载均衡需求较低的场景 | 不考虑服务器的当前负载能力和处理能力,可能导致负载不均衡 |
| 最小响应时间 | 将请求分配给平均响应时间最短的服务器 | 能动态适应服务器的负载情况,适用于对响应时间要求较高的场景 | 需要实时监控和统计服务器的响应时间,增加了实现复杂性 |
如何实现负载均衡服务器?
主要由三个部分组成:
| 部分 | 职责 |
|---|---|
| 负载采集与上报 | 读取内存信息,上报自身地址和内存使用率(登录服务器) |
| 节点信息维护 | 保存各上报连接对应的节点信息(负载均衡服务器) |
| 节点选择 | 按内存使用率升序排序,选择第一个(负载均衡服务器) |
具体流程:
- 登录服务器启动后,连接负载服务的对用端口。
- 立即上报一次状态,并通过定时器每秒上报一次。
- 负载服务器接收状态消息,保存对应IP、端口和内存使用率。
- 客户端发送节点查询请求。
- 负载服务器选择内存使用率最低的节点,将地址返回客户端。
- 客户端连接登录服务器。
需要注意:内存占用低不一定代表处理能力最空闲,CPU、连接数、请求耗时也可能成为瓶颈。
如何构建一个可用的负载均衡服务?
