负载均衡是什么?

负载均衡,就是把请求分配给多台服务器,避免某一台太忙,其他服务器却闲着。 例如:有三台服务器,一台已经处理了800个连接,另外两台各处理100个连接。负载均衡服务可以把新连接优先分配给后两台,从而提高整个系统的处理能力。配合检查,还能绕过故障点。

负载均衡服务器怎样工作:

方式工作过程特点
代理转发客户端->负载均衡服务器->业务服务器请求和响应经过代理,客户端使用同一接口
返回节点地址客户端先检查节点,在直接连接业务服务器调度服务器只选址,客户端需要支持查询与重试

流程图

注意:这里均衡的是新请求或新连接的分配。已经建立的 TCP 连接不会因为其他节点变空闲而自动迁移。

常见的负载均衡算法?

算法描述优点缺点
轮询依次将请求分配给每台服务器简单易实现,适用于负载均衡需求较低的场景不考虑服务器的当前负载能力和处理能力,可能导致负载不均衡
加权轮询为每台服务器分配权重,权重高的接收更多请求考虑了服务器的处理能力,能更好地分配负载权重设置和调整需要根据实际情况优化
最小连接数将请求分配给当前活动连接数最少的服务器动态调整,适合长连接的场景需要持续跟踪服务器的连接数,计算量较大
加权最小连接数在最小连接数的基础上引入权重概念结合了权重的和最小连接数的优点,能够精确地分配负载需要实时跟踪服务器状态,增加了一定的复杂性
源地址哈希根据客户端IP地址的哈希值将请求分配到固定的服务器适合于需要会话保持的场景服务器数量变化时,哈希算法可能导致请求重新分配
随机随机选择一台服务器处理请求简单适用,适合负载均衡需求较低的场景不考虑服务器的当前负载能力和处理能力,可能导致负载不均衡
最小响应时间将请求分配给平均响应时间最短的服务器能动态适应服务器的负载情况,适用于对响应时间要求较高的场景需要实时监控和统计服务器的响应时间,增加了实现复杂性

如何实现负载均衡服务器?

主要由三个部分组成:

部分职责
负载采集与上报读取内存信息,上报自身地址和内存使用率(登录服务器)
节点信息维护保存各上报连接对应的节点信息(负载均衡服务器)
节点选择按内存使用率升序排序,选择第一个(负载均衡服务器)

具体流程:

  1. 登录服务器启动后,连接负载服务的对用端口。
  2. 立即上报一次状态,并通过定时器每秒上报一次。
  3. 负载服务器接收状态消息,保存对应IP、端口和内存使用率。
  4. 客户端发送节点查询请求。
  5. 负载服务器选择内存使用率最低的节点,将地址返回客户端。
  6. 客户端连接登录服务器。

需要注意:内存占用低不一定代表处理能力最空闲,CPU、连接数、请求耗时也可能成为瓶颈。

如何构建一个可用的负载均衡服务?

负载均衡服务构建流程图