【腾讯云的1001种玩法】 十分钟轻松搞定云架构 · 负载均衡的几种均衡模式
今天,我们来学习一下负载均衡的几种均衡模式。通过了解负载均衡的均衡模式,我们可以更好的利用负载均衡来为我们的应用服务。
首先,我们来看一看腾讯云负载均衡支持哪些均衡模式?
- 按权重轮训
- 按IP Hash
- 加权最小连接数
在按权重轮训模式下,我们需要给每台作为后端的云主机设置权重。负载均衡可以根据权重来分配请求。这种模式比较适合比较简单的架构。使用起来比较简单,设置也比较容易。
我们来简单举个例子:
用户向负载均衡发送14个请求,负载均衡后端一共有三台云主机:云主机1 云主机2 云主机3 。三个云主机的权重分别是3 5 7。负载均衡器在进行请求分发时,优先高权重的云主机分发请求,就会给云主机3分发7个请求,给云主机2分发5个请求,给云主机1 分发2个请求。这样就将用户发送的14个请求分发完成。当下次再有新的请求通过负载均衡进行分发时,也会按照这样的模式来进行分配。
这种模式会又一个很明显的问题,就是权重最低的云主机可能每次都分发较少的请求,一致都处在一个比较低的利用率水平
在这里,我们来穿插一个知识点:会话保持。在我们设置按权重轮训时,会有一个会话保持的选项。
会话保持就是让来自同一个IP或同一个IP段的请求转发到同一台后端服务器上。因为某些应用无法完整的拆分状态,会有一些缓存信息存放在云主机上,所以这个时候,就需要开启会话保持,以保证不会因为请求分发导致状态丢失,出现用户不停登陆的情况。
不过会话保持对于一些应用不能提供很好的均衡,比如微信公众平台的请求处理。更好的方法是将状态提取出来,使用redis、mysql来存储状态,而不是由程序本身存储。
IP Hash 是根据请求的源地址进行处理,来做为 Hash 的 Key ,请求对应的处理。
IP Hash 可以保证同一个IP始终请求同一台云主机,以另外一种模式来实现会话保持。对于一些不支持会话保持的场景,可以使用这种形式来将源IP的请求分发到同一台云主机。
同样,这样准备了一张图,来方便大家理解:
我们假设源站地址的 127.0.0.1 ,他的 Hash Key 为 K31,负载均衡在处理时,就会把请求分发到 Key 同为 K31 的主机上。如果后续这个IP依然发送请求,同样转发到 K31 ,这样就实现了会话保持。
加权最小链接数在将状态抽离云主机时,会是最好的选择。加权最小链接数处理请求会有两个步骤。
- 获取当前后端云主机的活动链接数。
- 读取为每个云主机设置的权值。
- 使用活动链接数和权值计算出新的合理的权值
- 根据计算出的权值分发请求
这种均衡的方式除了传统的权重以外,引入了活动链接数这一个重要的量,通过对活动链接数的加权处理,保证每台云主机的请求分配和其本身的负载相关联,不会出现某些主机处在近乎闲置的状态,其他的主机则承载较高压力。
这种均衡模式非常适合较为复杂的架构,可以根据情况进行具体分析。
拓展阅读:
负载均衡模式:https://www.qcloud.com/document/product/214/6153
会话保持:https://www.qcloud.com/document/product/214/6154
协议支持及端口配置:https://www.qcloud.com/document/product/214/6152
- Kotlin DSL详解
- 大规模异常滥用检测:基于局部敏感哈希算法——来自Uber Engineering的实践
- 事务与一致性:刚性or柔性?
- 文本相似度算法小结
- return的值都去哪了?去哪了,“谁伸手了,return的结果就给谁”
- 面试时对方问你,“xxx需求你是怎么做的”?你可以这样回答
- vue.js的条件渲染,其实就是模板里面写if else
- vue.js的插槽 - slot 是啥?要我说,它就是个“形参”
- Vue2.0,lifeCycle ['laɪfˌsaɪkl] -- 生命周期大白话~
- 什么生命周期,在我看来就是各种回调 &&电商项目作业检查 -- 张xx
- 小知识点 -- nodejs中的console.log打印输出在哪里?
- 学js少看书肯定是不成的,要多看。
- 抽象是啥?就是一群人的特征;js中的call是啥?就是我想用你家的电饭锅
- 从node事件到观察者 -- 学习要有一根线索
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- CentOS7安装PHP7 Redis扩展的方法步骤
- centos7下rsync+crontab定期同步备份
- 你可能不知道的一些linux文件权限管理方法
- 原来SqlSession只是个甩手掌柜?真正干活的是谁?
- Linux下的定时任务和延时任务的详解
- 使用 chkconfig 和 systemctl 命令启用或禁用 Linux 服务的方法
- Packetdrill的简明使用手册
- linux操作系统下配置ssh/sftp和权限设置方法
- linux把php升级到5.6的实操方法
- Linux sudo 漏洞可能导致未经授权的特权访问
- 在Linux中如何轻松删除源安装的软件包
- linux系统 java环境变量的配置方法
- Apache 文件上传与文件下载案例详解
- 前端CLI脚手架思路解析并从0到1搭建
- Linux中搭建完整的samba服务器全攻略(centos版)