服务容错

67 阅读3分钟


服务雪崩效应:

在分布式系统中,由于网络原因或者自身的原因,服务一般无法保证100%可用。如果一个服务出现了问题, 调用这个服务就会出现线程阻塞情况,此时若有大量的请求涌来,就会出现多条线程阻塞等待,进而导致服务瘫痪,由于服务之间又有依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩效应”


服务容错:

在微服务当中,一个请求经常会涉及到调用几个服务,如果其中某个服务不可用,没有做服务容错的话,极有可能会造成一连串的服务不可用,这就是雪崩效应。雪崩效应无法预防,只能尽量做好容错,容错的三个核心思想:1.不被外界环境影响 2. 不被上游请求压垮  3. 不被下游响应拖垮。不被上游服务压垮用限流,不被下游服务拖垮用熔断


常见容错方案

● 隔离:指系统按照一定的原则划分为若干个服务模块,各个模块相互独立,无强依赖。当有故障发生时,能将问题和影响隔离在某个模块内部,而不扩散风险,不波及其他模块,不影响整体系统服务。常见的隔离方式有:线程池隔离和信号量隔离

● 超时:在上游服务调用下游服务的时候,设置一个最大响应时间,如果超过这个时间,下游未作出反应,就断开请求,释放掉线程

● 限流:限制系统的输入和输出流量已达到保护系统的目的。为了保证系统的稳固运行,一旦达到需要限制的阈值,就需要限制流量并采取少量措施以完成限制流量的目的

● 熔断:当下游服务访问压力过大而响应变慢或失败,上游服务为了保护系统整体的可用性,可以暂时切断对下游服务的调用。这种牺牲局部,保全整体的措施就叫熔断。熔断有三种状态。

  ○ 熔断关闭:服务没有故障时,熔断器所处的状态,对调用方的调用不做任何限制

  ○ 熔断开启:后续对该服务接口的调用不再经过网络,直接执行本地的托底方法

  ○ 尝试恢复服务调用,允许有限的流量调用该服务,并监控调用成功率。如果成功率达到预期,则说明服务已恢复,进入熔断关闭状态,如果成功率仍然很低,则重新进入熔断开启状态

● 降级:其实就是为服务提供一个托底方法,一旦服务无法正常调用,就使用托底方法,和熔断是一套的,熔断开始后,就调用托底方法