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客户端调用并发控制 的相关文章

  • 标签获取 href 值

    我有以下 html div class threeimages a img alt Australia src Images Services 20button tcm7 9688 gif a div class text h2 a hre
  • Pycharm 在 os.path 连接上出现“未解析的引用”

    将pycharm升级到2018 1 并将python升级到3 6 5后 pycharm报告 未解析的引用 join 最新版本的 pycharm 不会显示以下行的任何警告 from os path import join expanduser
  • 如何将 Google Charts 与 Vue.js 库一起使用?

    我正在尝试使用 Vue js 库使用 Google Charts 制作图表 但我不知道如何添加到 div 这是我尝试做的 这是如何使用普通 javascript 添加图表 这是文档的代码示例 https developers google
  • 矩形函数的数值傅里叶变换

    本文的目的是通过一个众所周知的分析傅里叶变换示例来正确理解 Python 或 Matlab 上的数值傅里叶变换 为此 我选择矩形函数 这里报告了它的解析表达式及其傅立叶变换https en wikipedia org wiki Rectan
  • 如何将特定范围内的标量添加到 numpy 数组?

    有没有一种更简单 更节省内存的方法可以单独在 numpy 中执行以下操作 import numpy as np ar np array a l r ar c a a 0 l ar tolist a r 它可能看起来很原始 但它涉及获取给定数
  • 将div设置为隐藏,延时后可见

    我试图在 X 时间后 也许甚至在随机时间之后 但现在我们只做固定时间 在黑色背景上出现一个黄色方块 function initialSetup if document getElementById yellow null document
  • 如何在使用页面锚点导航时设置“激活”类以在 Angular 2 中引导导航栏?

    我正在使用 Angular 2 和 Bootstrap 4 创建一个单页网站 我创建了一个始终位于页面顶部的导航栏组件 并且我正在使用页面锚点导航 id 请注意 我还没有创建路由模块 到目前为止还没有必要这样做 导航栏代码如下
  • 导入错误:没有名为flask.ext.login的模块

    我的flask login 模块有问题 我已经成功安装了flask login模块 另外 从命令提示符我可以轻松运行此脚本 不会出现错误 Python 2 7 r27 82525 Jul 4 2010 07 43 08 MSC v 1500
  • python的shutil.move()在linux上是原子的吗?

    我想知道python的shutil move在linux上是否是原子的 如果源文件和目标文件位于两个不同的分区上 行为是否不同 或者与它们存在于同一分区上时的行为相同吗 我更关心的是如果源文件和目标文件位于同一分区上 shutil move
  • 提交表单并重定向页面

    我在 SO 上看到了很多与此相关的其他问题 但没有一个对我有用 我正在尝试提交POST表单 然后将用户重定向到另一个页面 但我无法同时实现这两种情况 我可以获取重定向或帖子 但不能同时获取两者 这是我现在所拥有的
  • pandas - 包含时间序列数据的堆积条形图

    我正在尝试使用时间序列数据在 pandas 中创建堆积条形图 DATE TYPE VOL 0 2010 01 01 Heavy 932 612903 1 2010 01 01 Light 370 612903 2 2010 01 01 Me
  • 将 Matlab 的 datenum 格式转换为 Python

    我刚刚开始从 Matlab 迁移到 Python 2 7 在读取 mat 文件时遇到一些问题 时间信息以 Matlab 的日期数字格式存储 对于那些不熟悉它的人 日期序列号将日历日期表示为自固定基准日期以来已经过去的天数 在 MATLAB
  • Python:Goslate 翻译请求返回“503:服务不可用”[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们不允许提出寻求书籍 工具 软件库等推荐的问题 您可以编辑问题 以便用事实和引文来回答 这个问题似乎不是关于主要由程序员使用的特定编程问
  • 如何在jquery中以相反的顺序迭代元素? [复制]

    这个问题在这里已经有答案了 我是jquery的新手 我想知道如何使用each 在jquery中以相反的顺序迭代表单元素 任何帮助 将不胜感激 尝试这个 input get reverse each function
  • 等待子进程使用 os.system

    我用了很多os system在 for 循环内调用创建后台进程 如何等待所有后台进程结束 os wait告诉我没有子进程 ps 我使用的是Solaris 这是我的代码 usr bin python import subprocess imp
  • 在virtualenv中下载sqlite3

    我正在尝试使用命令创建应用程序python3 manage py startapp webapp但我收到一条错误消息 django core exceptions ImproperlyConfigured 加载时出错 pysqlite2 或
  • JSON:TypeError:Decimal('34.3')不是JSON可序列化的[重复]

    这个问题在这里已经有答案了 我正在运行一个 SQL 查询 它返回一个小数列表 当我尝试将其转换为 JSON 时 出现类型错误 查询 res db execute SELECT CAST SUM r SalesVolume 1000 0 AS
  • NLTK:查找单词大小为 2k 的上下文

    我有一个语料库 我有一个词 对于语料库中该单词的每次出现 我想获取一个包含该单词之前的 k 个单词和该单词之后的 k 个单词的列表 我在算法上做得很好 见下文 但我想知道 NLTK 是否提供了一些我错过的功能来满足我的需求 def size
  • 如何在Python脚本中从youtube-dl中提取文件大小?

    我是 python 编程新手 我想在下载之前提取视频 音频大小 任何 YouTube 视频 gt gt gt from youtube dl import YoutubeDL gt gt gt url https www youtube c
  • FireFox 中的“contenteditable = true”高度问题

    当有空的时候div with contenteditable true CSS contenteditable true border 1px dashed dedede padding 3px HTML div div 在 IE 和 Ch

随机推荐

  • 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