当前位置: 首页 > news >正文

高并发场景下,系统的保护机制

伴随着分布式,微服务项目的快速发展。各个微服务的调用和通讯难免会出现依赖关系,如果上游服务在依赖下游服务的时候下游服务出现了故障从而导致下游服务的不可用,进一步导致了上游的服务被拖垮,就会发生服务雪崩,故障蔓延。很容易造成严重的业务后果,进而造成不可预估的经济损失。因此我们在分布式架构中引入了系统保护机制。

正常来说我们的服务调用是不会出现什么问题的,但是在网络通讯中,往往会有很多因素去导致服务会出现很多不可用的情况,通常我们处理这种问题有会四种方案。分别是超时,限流,断路器以及仓壁模式。

设置超时时间

例如现在有两个上下游的服务,即服务A要去依赖服务B,如果服务B发生了故障,即服务B已经不可用。当服务A去调用服务B的时候,我们可以给服务A的调用线程设置一个超时时间,若服务B的响应时间超过了我们设置的超时时间。我们就会认为是请求出现了超时的异常,并同时释放掉服务A所对应的线程资源。

限流

因为服务雪崩这个效应一般是由高并发的流量引起的一个现象。因此我们可以在上游服务中增加相对应的限流机制,一旦某个时间的流量超出了我们设置的阈值的时候,服务将不再处理新的请求,从而避免了调用链路的下一个阶段可能会承受到大量的并发导致服务宕机或者瘫痪。

断路器(熔断器)

这里借用Martin Flawer的一篇关于断路器的论文,其中对断路器做了详细的描述。

 

图中显示断路器一共有三种状态,分别是关闭,打开以及半开放。

正常情况下,当我们的服务的请求链路没有出现任何故障的时候,断路器是出于关闭状态的。

当目标服务暂时不可用,新的请求不会打到对应的服务器上,就对应了打开状态。如下图。

 

当服务A去调用服务B时出现了异常,并且异常数量或者异常的比例达到了某个阈值的时候,熔断器的开关就会被打开,如上图所示。即后续服务A的请求将会直接置为失败,将不会再发送到服务B上。

第三个是半开放状态,熔断开关会有一个打开的时间限制,当触发到时间限制的一个阈值的时候,熔断器会尝试让服务A中的请求发送到服务B上,这个时候熔断器开关会属于半开放状态,如果当前这一次的尝试成功的发送给B服务同时满足正常的返回结果,那么熔断器将会把这个开关关闭,如果本次请求依然有问题,那么熔断器会继续出于打开的状态,直到下一个时间窗口再次进行尝试。

仓壁模式

仓壁模式也叫做隔离模式,也就是通过隔离不同的业务处理从而降低故障影响的范围。假设有两个服务,仍然是服务A和服务B,在默认情况下服务B去接收到请求的处理过程都是使用过的Web容器中的线程池,由于所以得业务处理都是公用Web容器中的线程池的,如果在某个服务出现故障的时候就会导致整个线程池的资源被耗尽,从而去影响其他业务的访问。那么在这个过程中,我们可以引用线程池的隔离技术从而解决这个问题。针对不同的业务服务调用,选取不同的线程池,及时某个业务相关的线程池挂了,也不会影响到其他业务的线程池。从而保证了隔离性。

推荐感兴趣的小伙伴可以了解一下Sentinal或者是Hystrix。

http://www.lryc.cn/news/406864.html

相关文章:

  • 服务器构建私有npm库(Docker + Verdaccio)
  • LabVIEW做二次开发时应该注意哪些方面?
  • docker配置上网代理获取镜像
  • SqlSugar删除没有定义主键的实体类对应的数据库表数据
  • 虚拟机复制后网络不可用,报错“network.service - LSB: Bring up/down networking”
  • Redis 7.x 系列【30】集群管理命令
  • 将YOLOv8模型从PyTorch的.pt格式转换为TensorRT的.engine格式
  • Hello SLAM(在Linux中实现第一个C++程序)
  • IPD推行成功的核心要素(十五)项目管理提升IPD相关项目交付效率和用户体验
  • C++ 鼠标轨迹API【神诺科技SDK】
  • 设计模式|观察者模式
  • python自动化运维 通过paramiko库和time库实现服务器自动化管理
  • HTML常用的转义字符——怎么在网页中写“<div></div>”?
  • shell-awk文本处理工具
  • 如何在测试中保护用户隐私!
  • ARCGIS PRO DSK GraphicsLayer创建文本要素
  • 看板项目之vue代码分析
  • lua 游戏架构 之 游戏 AI (七)ai_dead
  • 前端开发知识(一)-html
  • 身份证如何查验真伪?C#身份证二要素、三要素接口集成
  • C++ | Leetcode C++题解之第290题单词规律
  • Pytorch使用教学7-张量的广播
  • 生成式AI:对话系统(Chat)与自主代理(Agent)的和谐共舞
  • 唯众物联网(IOT)全功能综合实训教学解决方案
  • 24证券从业考试报名『个人信息表』填写模板❗
  • 深度学习系列70:模型部署torchserve
  • 算法日记day 20(中序后序遍历序列构造二叉树|最大、合并、搜索二叉树)
  • 【科研】# Taylor Francis 论文 LaTeX template模版 及 Word模版
  • Linux网络配置及常见命令!
  • linux之shell脚本实战