Sentinel客户端调用并发控制

2023-11-14

前言

当链路中某个应用出现不稳定,导致整个链路调用变慢,如果不加控制可能导致雪崩。这种情况如何处理呢? 

一、慢调用现象分析 

在分布式链路中调用中,调用关系如下,methodA1与methodA2在同一个应用中。

链路标号

调用链 

链路1 

methodX->methodA1->methodB 

链路2 

methodY->methodA2->methodC 

链路3 

methodZ->methodA2->methodC 

下游服务MethodB由于不稳定导致慢调用时,如下图所示: 

慢调用可能导致如下情况:

  • 链路1线程数增多对methodA1所在的APP资源造成挤压

  • 对APP资源的过度挤压对链路2和链路3造成不稳定

  • 极端情况导致整个APP服务不可用

  • APP服务的不可用导致整个链路出现故障引发雪崩 

二、线程池隔离解决方案 

为了消除某条链路慢调用挤压其他链路,以及APP服务不可用导致雪崩情况。通过对methodA1和methodA2分别配置不同的线程池进行隔离,这样链路1不稳定不会波及到链路2和链路3。

线程池隔离方案优缺点

优点
隔离性好、链路之间不会互相干扰
缺点
  • 线程池大小不好估算
    设置线程池过小处理能力不足

         设置线程池过大业务低点造成大量线程空转

  • 线程池造成上下文切换成本增加 

三、Sentinel并发控制解决方案 

Sentinel在流控控制规则中有提供FlowRule提供基于线程的并发控制。FlowRule中将grade设置为0表示并发线程控制,设置1表示QPS。 

1.实现原理

 

Sentinel不对线程总数控制,只对线程进行统计,通过统计的线程数与用户设置的阈值进行比较,如果小于阈值则放行;大于阈值抛出BlockException,禁止通行。统计的模型还是基于滑动时间口,详细源码分析见前面文章。 

2.模拟并发控制效果

 

下面的FlowThreadDemo示例中,模拟methodA调用methodB,methodB发生了慢调用(sleep 2秒),过了一会(40秒)后,methodB的慢调用解除(sleep 20毫秒)。 

代码截图

运行效果

小结:通过Sentinel中FlowRule的线程并发控制,可以有效地对不同分布式RPC链路进行隔离,对出现慢调用的链路起到保护作用。 

作者丨梁勇
来源丨瓜农老梁
欢迎关注公众号「瓜农老梁」


「瓜农老梁  学习同行」    

       

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Sentinel客户端调用并发控制 的相关文章

随机推荐

  • Qt如何画圆或椭圆 QPainter

    paint gt drawEllipse 20 20 210 160 将圆或椭圆框在一个矩形中 括号中的四个参数指定矩形的参数 左上角坐标 20 20 宽高为 210 160 更新 这里的paint类型为QPainter 画椭圆 该椭圆内切
  • 字符设备驱动框架及测试程序

    字符设备驱动框架及测试程序 1 驱动框架 1 1 驱动文件 my cdev c 1 2 Makefile 2 驱动测试程序 2 1 测试文件 my cdev test c 2 2 Makefile 3 测试结果 全程打开dmesg 3 0
  • 新技术前沿-2023-基于Stable Difussion体验AI绘画

    Stable Diffusion 入门简明教程 耗时80小时 超详细的胎教级Stable Diffusion使用教程 看这一篇就够 基于ChatGPT Stable Diffusion实现AI绘画 1 简介 近年来 AI生成内容 AIGC
  • vue的优缺点

    Vue js是一个流行的前端JavaScript框架 它具有许多优点和一些缺点 下面是Vue js的优缺点 优点 1 易学易用 Vue js具有简洁的API和清晰的文档 使得学习和使用它非常容易 尤其对于有一定JavaScript和HTML
  • 用公网ip能访问,用域名不能访问

    用公网ip能访问 用域名不能访问 是缓存导致的吗 现象 如果您遇到这种现象 1 域名解析正确 通过花生壳动态域名客户端的域名诊断 看到自己的域名解析是正确的 或者通过Oray网站的域名管理界面 看到域名的A记录和服务器实际的公网ip一致 下
  • 谁看见我的猫照片了

    今天分享一个可自由拖得动的图片效果样式 先看效果 谁看见我猫的照片了 再上源码
  • python 分支结构编程 请用一行代码,编写一个回声程序,将用户输入的内容直接打印出来。

    python 分支结构编程 第一题 请用一行代码 编写一个回声程序 将用户输入的内容直接打印出来 示例 代码 print input 运行结果
  • MA模型简介及其相关性质

    文章目录 1 概述 1 1 定义 1 2 限制条件 1 3 中心化 M A q
  • 课时 16 自测题

    以下说法错误的是 单选题 A etcd 是一个商业软件 B etcd 使用 go 语言编写 C etcd 是一个分布式系统 通常由多个 server 组成一个集群 关于 etcd 重要时间节点 以下说法错误的是 单选题 A etcd 最初由
  • react 初级基础

    react基本使用 项目创建 项目的创建命令 npx create react app react basic 创建一个基本元素进行渲染 1 导入react 和 react dom import React from react impor
  • 竞赛 交通目标检测-行人车辆检测流量计数 - 竞赛

    文章目录 0 前言 1 目标检测概况 1 1 什么是目标检测 1 2 发展阶段 2 行人检测 2 1 行人检测简介 2 2 行人检测技术难点 2 3 行人检测实现效果 2 4 关键代码 训练过程 最后 0 前言 优质竞赛项目系列 今天要分享
  • 函数或变量 x 无法识别。_这个变量陷阱,连高手都躲不开

    点击上方 Python小白集训营 选 星标 公众号 重磅干货 第一时间送达 图 Pexels 日期 2021 1 2 你可能会好奇 是什么样的陷阱 连高段位的python选手也会频繁踩坑 讲这个topic前 先来讲一个例子 这是我前几个月在
  • 【华为OD考试真题】报数游戏(Python实现)

    前言 考试题目大同小异 练习真题是通过考试的捷径 思路仅供参考 如果有更好的思路 欢迎一起交流学习 创作不易 文章若对你有帮助 点个关注 谢谢 题目描述 100个人围成一圈 每个人有一个编码 编号从1开始到100 他们从1开始依次报数 报到
  • 利用LSB算法隐藏图片信息的MATLAB实现

    前一篇博客中介绍了利用LSB算法隐藏文字信息的MATLAB实现 http blog csdn net csdn moming article details 50936687 在此基础上 下面介绍利用LSB算法隐藏图片信息的MATLAB实现
  • Mt2015 lfsr

    Taken from 2015 midterm question 5 See also the first part of this question mt2015 muxdff Write the Verilog code for thi
  • python:使用unquote对url解码

    参考 python之urlencode quote 及unquote wf592523813的博客 CSDN博客 python unquote
  • 企业架构成功之道读书笔记

    企业架构成功之道读书笔记 原文 https www leanix net en enterprise architecture 企业架构成功之道 理解下一代企业架构的价值 降低成本 应用合理化 速赢 10 软件授权优化 项目合理化 应用下线
  • 图形视图(17):【类】QGraphicsWidget[官翻]

    文章目录 详述 公共类型 enum anonymous 属性 autoFillBackground bool focusPolicy Qt FocusPolicy font QFont geometry QRectF layout QGra
  • final定义类、方法、属性以及多态性

    1 在Java中final称为终结期 在java里面可以使用 不能有子类 2 使用final定义的方法不能被子类覆写 3 使用final定义的变量就成了常量 常量必须在定义的时候设置 多态性基本概念以及相关的使用限制 多态性的依赖 转载于
  • Sentinel客户端调用并发控制

    前言 当链路中某个应用出现不稳定 导致整个链路调用变慢 如果不加控制可能导致雪崩 这种情况如何处理呢 一 慢调用现象分析 在分布式链路中调用中 调用关系如下 methodA1与methodA2在同一个应用中 链路标号 调用链 链路1 met