负载均衡

本文介绍了负载均衡,即任务平均分配,目的是均分任务、减少个体压力。阐述了不同层次负载均衡的实现,如客户端层到反向代理层用“DNS轮询”,反向代理层到站点层编辑nginx配置文件等。还介绍了实现负载均衡的策略,包括均匀派发、加权派发等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.负载均衡(load balance)是什么

负载均衡:就是任务平均分配。
任务具体而言是:请求的处理。数据存储的分配。
目的:均分任务,减少个体压力;个体出错,他人顶替。
常见互联网分布式架构如下图,分为客户端层、反向代理nginx层、站点层、服务层、数据层。因此相邻两层间就涉及负载均衡问题。从图上看,负载均衡实现的是:相邻的两层,上层能均匀的"调用"下层。
在这里插入图片描述

二.不同层次负载均衡的实现

  1. 客户端层->反向代理层的负载均衡
    在这里插入图片描述
    实现方式:“DNS轮询”。客户端的请求首先需要域名解析。DNS服务器以相同概率把域名解析成一组IP,这些IP就是nginx的外网IP.

补充知识
用户通过浏览器访问一个网址(域名)www.apsapp.com,会先向DNS服务器请求域名解析,DNS服务器返回IP地址,用户通过此IP地址访问服务器。由于DNS服务器可以把同一个网址解析成不同的ip(对应服务器集群),那么DNS服务器将同一域名轮流的解析成不同的IP,就可以实现负载均衡。

在这里插入图片描述


  1. 反向代理层->站点层
    在这里插入图片描述

实现方式:编辑nginx的配置文件(nginx.conf)。列举几种负载均衡策略:

  • 请求轮询:类似DNS轮询。请求依次路由到个web服务器。
  • 最少连接路由:路由到连接最少的web服务器上
  • ip哈希:按照访问用户的ip哈希值来路由web-server,只要用户的ip分布是均匀的,请求理论上也是均匀的,ip哈希均衡方法可以做到,同一个用户的请求固定落到同一台web-server上,此策略适合有状态服务,例如session(不建议)
  1. 站点层->服务层
    在这里插入图片描述
    实现方式:服务连接池。
    上游连接池会建立与下游服务多个连接,每次请求会“随机”选取连接来访问下游服务。

  2. 数据层的负载均衡------包含数据,请求的均衡(数据的水平切分)。

  • 数据的均衡是指:水平切分后的每个服务(database,cache),数据量是差不多的。

  • 请求的均衡是指:水平切分后的每个服务(database,cache),请求量是差不多的。
    水平切分方式有:

    • 按范围水平切分
      在这里插入图片描述
      每一个数据服务,存储一定范围的数据,上图为例:
      user0服务,存储uid范围1-1kw
      user1服务,存储uid范围1kw-2kw
      优点:简单,数据均衡性好,容易扩展(添加uid方便)
      缺点:请求的负载不一定均衡,一般来说,新注册的用户会比老用户更活跃,大范围的服务请求压力会更大
    • 按id哈希水平切分
      在这里插入图片描述
      每一个数据服务,存储某个key值hash后的部分数据,上图为例:
      user0服务,存储偶数uid数据
      user1服务,存储奇数uid数据
      优:请求均匀性好。
      缺:不容易扩展,扩展一个数据服务,hash方法改变时候,可能需要进行数据迁移

三.实现负载均衡的策略

  1. 均匀派发(Even Task Distribution Scheme)
    负载均衡器均匀的派发任务给服务器。分为随机派发或者轮流派发(Round Robin),DNS域名解析使用的是轮流派发。(这假设服务器处理能力一样)
  2. 加权派发(Weighted Task Distribution Scheme)
    服务器处理能力不同,给能力强的权重大点,就相应的多分配任务。
  3. 粘滞会话(Sticky Session Scheme)
    在实际中,后面的任务处理常常会依赖于前面的任务。例如,对于同一个登录的用户的请求,用户购买的请求依赖于用户登录的请求,如果用户的登录信息保存在进程1中,那么,如果购买请求被分派到进程2或者进程3,那么购买请求将不能正确处理。这种请求间的依赖关系也称为粘滞会话(Sticky Session)
    此策略把属于同一个会话的任务将会被分派到同一个进程中
  4. 均匀任务队列派发Even Size Task Queue Distribution Scheme)
    类似加权派发策略。先为每个服务器设以任务队列,负载均衡器开始派相同的任务量。后面处理能力强的就多派任务。
  5. 单一队列(Autonomous Queue Scheme)
    无负载均衡器存在。服务器从唯一的一个队列领任务,处理能力强的领任务的速度也块。

参考文章:
1.https://blog.csdn.net/lihao21/article/details/53900447
2.https://www.oschina.net/news/77156/load-balance

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值