【腾讯云的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
- 关于Golang语言数组索引的有趣现象
- 使用SQL来分析数据库参数(二)(r10笔记第82天)
- Golang不定参数
- [go语言]利用缓冲信道来实现网游帐号验证消息的分发和等待
- 转--Golang语言版 ssh口令破解工具
- cubieboard(树莓派)安装Ubuntu+Apache+PHP+Mysql
- Oracle 12c里的几点补充(一)(r11笔记第7天)
- Oracle备库的PDB无法连接的问题(r11笔记第6天)
- Golang语言社区--模板的使用
- Golang语言写Web 应用程序
- 强制wordpress后台HTTPS
- Golang语言 Cookie的使用
- Golang 语言调用动态库实现OpenGL及windows的API编程
- MySQL中的Online DDL(第一篇)(r11笔记第3天)
- 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 数组属性和方法
- Js中Symbol对象
- 责任链模式
- Android Studio升级到3.0后遇到的坑
- Android原生项目集成React Native的方法
- Android编程之光线传感器用法详解
- Android Studio 3.0 新功能全面解析和旧项目适配问题
- Android开发中使用外部应用获取SD卡状态的方法
- Android编程使用光线传感器获取光线强弱的方法【LightSensorManager封装类】
- Android开发中的重力传感器用法实例详解
- 腾讯云TKE-Ingress案例: Nginx-Ingress 实现grpc转发
- 机器人软件中间层 yarp-Yet Another Robot Platforms
- 3分钟短文:Laravel写个命令行,你就是下一个Geek!
- Android开发多年每天Crud不清楚自己的技术?来刷刷大厂的高端技术面试题就知道了
- MySQL案例:count(*)效率优化
- MUI进行APP混合开发实现下拉刷新和上拉加载 原创