异构服务器的负载均衡及过载保护

后端的service有可能部署在硬件条件不同的服务器上

1)如果对标最低配的服务器“均匀”分摊负载,高配的服务器的利用率不足;

2)如果对标最高配的服务器“均匀”分摊负载,低配的服务器可能会扛不住;

service层的负载均衡,一般是通过service连接池来实现的,调用方连接池会建立与下游服务多个连接,每次请求“随机”获取连接,来保证service访问的均衡性。

1.通过“静态权重”标识service的处理能力

为每个下游service设置一个“权重”,代表service的处理能力,来调整访问到每个service的概率

优点是:简单,能够快速的实现异构服务器的负载均衡。

缺点也很明显:这个权重是固定的,无法自适应动态调整

2.通过“动态权重”标识service的处理能力

1)用一个动态权重来标识每个service的处理能力,默认初始处理能力相同,即分配给每个service的概率相等;

2)每当service成功处理一个请求,认为service处理能力足够,权重动态+1

3)每当service超时处理一个请求,认为service处理能力可能要跟不上了,权重动态-10(权重下降会更快)

4)为了方便权重的处理,可以把权重的范围限定为[0, 100],把权重的初始值设为60分

3.过载保护

service的过载保护,是指即使系统负载超过一个service的处理能力,service让能保证对外提供有损的稳定服务。

最简单的方式,服务端设定一个负载阈值,超过这个阈值的请求压过来,全部抛弃

4.借助“动态权重”来实施过载保护

如果有连续的请求都超时或某一个service的动态权重降为0,于是设定策略:接下来的若干时间内,例如1秒(或者接下来的若干个请求),请求不再分配给这个service;

 

posted @   慕尘  阅读(329)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
历史上的今天:
2015-09-22 Yii2 radioList设置默认值
点击右上角即可分享
微信分享提示