做的比较好的美食网站,摄影建设网站,米拓建站下载,国外设计欣赏伴随着分布式#xff0c;微服务项目的快速发展。各个微服务的调用和通讯难免会出现依赖关系#xff0c;如果上游服务在依赖下游服务的时候下游服务出现了故障从而导致下游服务的不可用#xff0c;进一步导致了上游的服务被拖垮#xff0c;就会发生服务雪崩#xff0c;故障…伴随着分布式微服务项目的快速发展。各个微服务的调用和通讯难免会出现依赖关系如果上游服务在依赖下游服务的时候下游服务出现了故障从而导致下游服务的不可用进一步导致了上游的服务被拖垮就会发生服务雪崩故障蔓延。很容易造成严重的业务后果进而造成不可预估的经济损失。因此我们在分布式架构中引入了系统保护机制。
正常来说我们的服务调用是不会出现什么问题的但是在网络通讯中往往会有很多因素去导致服务会出现很多不可用的情况通常我们处理这种问题有会四种方案。分别是超时限流断路器以及仓壁模式。
设置超时时间 例如现在有两个上下游的服务即服务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。