负载均衡架构设计技巧

负载均衡算法

轮询&随机

在这里插入图片描述

基本原理

轮询:将请求依次发给服务器

随机:将请求随机发给服务器

适用场景

通用,无状态的负载均衡

优缺点

  1. 实现简单
  2. 不会判断服务器状态,除非服务器连接丢失

问题场景

  1. 某个服务器当前因为触发了程序Bug进入了死循环导致CPU负载很高,负载均衡系统是不感知的,还是会继续将请求源源不断发给它
  2. 集群中有新的机器是32核的,老的机器是16核的,负载均衡系统也是不关注的,新老机器分配的任务数是一样的

加权轮询

在这里插入图片描述

基本原理

按照预先配置的权重,将请求按照权重比例发送给不同的服务器

适用场景

服务器的处理能力有差异,例如新老服务器搭配使用

优缺点

  1. 实现复杂,按照权重计算
  2. 不会判断服务器状态,除非服务器连接丢失
  3. 权重配置不合理可能导致过载

问题场景

2020年采购的机器CPU核数是2019年采购的机器的1倍,运维直接配置了2倍权重,结果导致新机器全部过载

具体算法

算法1:权重=请求数量

例如:给服务器1发送40个请求,然后再给服务器2发送40个请求,然后再给服务器3发送20个请求

实现简单,但服务器资源利用可能不均衡,会出现毛刺现象,例如配置了[200,50, 20],但如果配置[2, 2, 1]的话,这种算法运行良好

算法2:权重概率

将所有服务器的权重加起来,然后计算各个服务器的分配概率,用随机数区间来做分配

例如:服务器[0~39],服务器2[40~79],服务器3[80~99],生成0~99的随机数,落入哪个区间就用那个服务器

算法3:权重动态调整

Nginx 的实现,兼顾服务器故障后的慢启动

负载优先

在这里插入图片描述

基本原理

负载均衡系统将任务分配给当前负载最低的服务器,这里的负载根据不同的任务类型和业务场景,可以用不同的指标来衡量

适用场景

  1. LVS 这种4层网络负载均衡设备,可以以“连接数”来判断服务器的状态,服务器连接数越大,表明服务器压力越大
  2. Nginx 这种7层网络负载系统,可以以“HTTP 请求数” 来判断服务器状态(Nginx 内置的负载均衡算法不支持这种方式,需要进行扩展)

优缺点

  1. 实现复杂,需要管理或者获取服务器状态
  2. 可以根据服务器状态进行负载均衡

性能优先

在这里插入图片描述

基本原理

负载均衡系统将任务分配给当前性能最好的服务器,主要是以响应时间作为性能衡量标准

适用场景

Nginx 这种7层网络负载系统,可以以“HTTP 响应时间” 来判断服务器状态(Nginx 内置的负载均衡算法不支持这种方式,需要进行扩展)

优缺点

  1. 实现复杂,需要统计请求处理时间,需要耗费一定的CPU运算资源
  2. 可以根据性能进行负载均衡
  3. 如果服务器响应不经过负载均衡器,则不能应用这种算法

Hash

在这里插入图片描述

基本原理

基于某个参数计算Hash值,将其映射到具体的服务器

适用场景

  1. 有状态的任务,例如购物车
  2. 任务是分片的,例如某个用户的请求只能在某台服务器处理

优缺点

  1. 实现简单
  2. 不会判断服务器状态,除非服务器连接丢失

常见Hash健

  1. 用户IP地址(session场景)
  2. URL(缓存场景)

业务级别负载均衡

介绍

在这里插入图片描述

通用负载均衡算法是基于请求的,业务级别的负载均衡是基于业务内容的,更灵活

例如蚂蚁的 LDC 架构,腾讯的 SET 单元化架构

案例:蚂蚁LDC架构

一次路由

箭头1:对于应该在本 IDC 处理的请求,直接映射到对应的 RZ 即可;

箭头2:不在本 IDC 处理的请求,Spanner 可以转发至其他 IDC 的Spanner。

二次路由

对于有些场景,A 用户的一个请求可能关联了对 B 用户数据的访问,比如 A转账给 B,A 扣完钱后要调用账务系统去增加 B 的余额。这时候就涉及到:

箭头3:跳转到其他 IDC 的 RZone;

箭头4:跳转到本 IDC 的其他 RZone。

数据路由

RZ 访问哪个数据库,是可以配置的,对应图中箭头5

技巧

Cookie

在这里插入图片描述

应用场景

一般用于session保持、购物车、下单等场景

自定义HTTP Header

在这里插入图片描述

可以通过X-来自定义HTTP header,可以服务器下发,也可以直接带上本地信息。这种用法被IETF在2012年6月发布的RFC5548中明确不推荐,虽然RFC已经不推荐使用带X前缀的http头部,但是不推荐不代表禁止,目前应用广泛

应用场景

一般用于精细化的地址位置、机房级别、版本、平台、渠道等负载均衡,例如:

  1. 如果客户端位于加利福尼亚州山景城,则负载平衡器会添加 Header:X-Client-Geo-Location:US,Mountain View
  2. X-Client-Version: 3.0.0, X-Client-Platform:iOS 11, X-Client-Channel:Huawei

HTTP query string

在这里插入图片描述

基本实现

query string包含负载均衡信息

优缺点
  1. 实现简单
  2. 对业务侵入较大,不如用Cookie

服务器性能估算

接口性能
  1. 线上业务服务器接口处理时间分布为20~100ms
  2. 平均大约为50ms
  3. 访问存储或者其他系统接口是主要的性能消耗点
服务器性能

线上单个服务器(32核)性能大约是300~1000 TPS/QPS

服务器数量

服务器数量=(总TPS+QPS)/单个服务器性能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值