微服务架构 —— 服务雪崩与容错方案

女爷i 2022-09-12 09:55 344阅读 0赞

导航

  • 一、什么是服务雪崩
  • 二、雪崩效应的三个核心原因
  • 三、容错
  • 四、业界常见容错思路
  • 五、常见容错组件

一、什么是服务雪崩

服务雪崩 指的是微服务架构中,微服务各节点之间由于网络通信异常或微服务自身故障等问题,导致请求堆积、任务堆积,消耗和占用容器线程,并由此而影响其他正常业务流程以及其他微服务节点,局部故障扩散为整体故障的一种现象,严重时可能导致整个系统瘫痪,就行“雪崩”一样。

在这里插入图片描述

二、雪崩效应的三个核心原因

  1. 被上游服务压垮
    tomcat 在处理请求时会分配线程资源,但这个资源是有限的,默认的 tomcat 线程数是 200,可以通过 server.tomcat.max-threads 参数设置。但如果上游服务在某一时刻发来大量的请求,一度超过当前节点可以处理的请求数量,就可能会导致节点故障,引发雪崩。常见的解决办法是限流
  2. 被下游服务拖垮
    由于下游服务的响应过慢,导致服务堆积,从而拖慢了当前节点的处理节奏,积小成多,造成雪崩。
    常见的解决办法是增加超时机制、熔断、降级等。
  3. 外部环境影响
    当前节点所处的服务器环境,如内存、cpu等,同样可能影响当前节点的处理速度。

三、容错

服务故障不可避免,但是决不能因为局部故障导致大面积的服务瘫痪,容错是为了通过某些手段尽可能的减小发生故障的概率,以及就算发生了故障也不至于扩散开来,目的是提高整体微服务架构的可用性,做到“雪落而不雪崩”。

上面提到的 限流、熔断、降级等,都是容错的常见措施。

四、业界常见容错思路

  1. 隔离
    指的是在服务内部,对一些业务进行划分,尽量减少故障线程耗尽所有服务线程资源。
    常见的隔离手段有:线程池隔离、信号量隔离
    在这里插入图片描述
  2. 超时
    设置最大响应时间,避免线程资源占用过久。
  3. 限流
    限制请求的数量,一旦达到阈值,就拒绝额外的请求进入服务,保护服务节点的正常、平稳的运行。
  4. 熔断
    当下游服务因为访问压力过大而响应变慢或失败,上游服务为了保护系统整体可用性,可以暂时切断对下游服务的调用,即牺牲局部,保全整体
    熔断分为三种状态:关闭、开启、半熔断。关闭:服务没有故障时熔断器所处的状态,对调用方的调用无任何限制;开启:后续对该接口的调用不再经过网络,直接执行本地的 fallback 方法;半熔断:尝试恢复服务调用,允许有限的流量调用该服务,并监控调用成功率,如果达到预期,进入熔断关闭状态,若未达预期,则重新进入开启状态。
  5. 降级
    托底方案,如果微服务调用失败,如超时,就执行降级方案。

五、常见容错组件

Sentinel、Hystrix、Resilience4j
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,344人围观)

还没有评论,来说两句吧...

相关阅读

    相关 服务服务容错模式。

    在使用微服务架构以后,整体的业务流程被拆分成小的微服务,并组合在一起对外提供服务,微服务之间使用轻量级的网络协议通信,通常是RESTful风格的远程调用。由于服务与服务的调用不

    相关 服务服务架构

    什么是微服务? > 微服务的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事,从技术角度看就是

    相关 服务服务容错

    一 容错方案 要防止雪崩的扩散,我们就要做好服务的容错:保护自己不被猪队友拖垮的一些措施。 常见的容错方案:隔离、超时、限流、熔断、降级 1 隔离 将系统按照一