分布式基础-负载均衡

分布式基础-负载均衡
最新回答
战天傲刃

2020-06-25 13:57:19

负载均衡是分布式系统中将计算或请求任务合理分配到不同节点,以优化资源利用、提升系统性能和可靠性的技术,其核心目标包括性能均衡、业务均衡及高可用性,常见实现方式有DNS、硬件、软件三类,算法涵盖轮询、哈希、随机及资源调度等。具体内容如下:

一、负载均衡的核心概念

负载均衡的“负载”可指数据或请求:

  • 数据负载均衡:将数据分片存储到不同节点,例如分布式存储系统。
  • 计算负载均衡:将请求处理或计算任务分配到不同节点,例如通过Nginx分发HTTP请求,或Spark利用数据本地性原理将程序分发到节点执行。

负载均衡的目标不仅是性能均衡,还需考虑业务均衡,例如不同任务分片算法的目标可能不同。此外,负载均衡不仅存在于分布式系统,任何同时开启多个服务节点的业务场景均可使用。

二、负载均衡的常见实现方式1. DNS负载均衡
  • 原理:依赖DNS服务器配置一个域名对应多个IP,通过负载均衡算法分配请求。

  • 优点

    简单,应用服务器无需调整。

    可根据用户位置返回就近地址,加快访问速度。

  • 缺点

    DNS分级存储可能导致缓存失效延迟,服务器下线时访问可能失败。

    对后台服务器压力无感知,可能造成压力不均。

    扩展性差,难以根据业务特点调整。

2. 硬件负载均衡
  • 原理:使用独立硬件设备(如F5、A10系列)实现负载均衡。
  • 优点

    功能强大,支持4-7层负载均衡及多种协议、加密、状态监控等。

    性能高,并发能力可达100万以上,例如F5部分性能指标:

    每秒L7请求数:1M

    每秒L4连接数:400K

    L4吞吐量:40Gbps

  • 缺点

    价格昂贵(十多万至几十万)。

    功能扩展性受限,不支持的功能无法实现。

3. 软件负载均衡

主流软件包括LVS、Nginx、HAproxy:

  • LVS(Linux Virtual Server)

    原理:通过内核链(PREROUTING、INPUT、POSTROUTING)实现请求转发,支持NAT、DR、tun、full-nat模式。

    优点

    性能高(可达80万/s),资源消耗低。

    稳定性高,支持热备方案Keepalived。

    工作在四层,支持几乎所有协议。

    缺点

    伸缩能力一般,Director可能成为瓶颈。

    无法完全判断节点故障。

  • Nginx

    原理:支持四层和七层负载均衡,可配置多种算法(如轮询、权重、ip_hash、least_conn、fair)。

    优点

    搭建和维护简单,成本低(开源)。

    灵活性强,可根据后台服务器状态调整策略,支持插件开发。

    缺点:性能相对较差。

    Nginx配置示例

# 简单轮询upstream dalaoyang-server { server localhost:10001; server localhost:10002;}# 带权重的轮询upstream dalaoyang-server { server localhost:10001 weight=1; server localhost:10002 weight=2;}# ip_hashupstream dalaoyang-server { ip_hash; server localhost:10001 weight=1; server localhost:10002 weight=2;}# 最少连接upstream dalaoyang-server { least_conn; server localhost:10001 weight=1; server localhost:10002 weight=2;}# 响应时间最短优先upstream dalaoyang-server { server localhost:10001 weight=1; server localhost:10002 weight=2; fair;}三、负载均衡的常见算法1. 轮询算法
  • 原理:按服务器顺序轮流分配请求,带权重轮询可根据机器性能分配不同权重。
  • 优点:算法简单,同构环境下负载均衡。
  • 缺点

    未考虑请求资源差异(如CPU密集型与内存密集型任务)。

    同一客户端的两次请求可能由不同机器处理,导致缓存失效。

  • 适用场景:请求资源需求接近且机器同构的环境。
2. 哈希和一致性哈希策略
  • 原理:通过哈希算法将客户端请求固定分配到同一服务器,一致性哈希可减少机器故障时的缓存失效。
  • 优点:负载均衡且缓存有效。
  • 缺点:未考虑任务资源使用情况。
3. 随机策略
  • 原理:随机选择存活服务器分配任务。
  • 缺点

    不利于缓存数据。

    未考虑服务器性能差异和任务种类。

4. 资源调度
  • 原理:通过资源管理框架(如YARN、Mesos)收集节点资源占用情况,根据任务特点(如CPU或内存消耗)精细化调度。
  • 特点:复杂但可实现更合理的负载均衡。