SpringCloudAlibaba-服务容错Sentinel(入门)

一:高并发带来的问题?

在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用,但是由于网络原因或者自身的原因,服务并不能保证服务的100%可用,如果单个服务出现问题,调用这个服务就会

出现网络延迟,此时若有大量的网络涌入,会形成任务堆积,最终导致服务瘫痪。

由于服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的 “雪崩效应” 。

雪崩发生的原因多种多样,有不合理的容量设计,或者是高并发下某一个方法响应变慢,亦或是某台机器的资源耗尽。我们无法完全杜绝雪崩源头的发生,只有做好足够的容错,保证在一个服务发生问
题,不会影响到其它服务的正常运行。也就是"雪落而不雪崩"。

二:解决方式引入服务容错机制

常见的容错思路有隔离、超时、限流、熔断、降级这几种,下面分别介绍一下。

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

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

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

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

三:常见的容错组件

Hystrix:由Netflix开源的一个延迟和容错库,用于隔离访问远程系统、服务或者第三方库,防止级联失败,从而提升系统的可用性与容错性。

Resilience4J:一款非常轻量、简单,并且文档非常清晰、丰富的熔断工具,这也是Hystrix官方推荐的替代产品。不仅如此,Resilicence4j还原生支持Spring Boot 1.x/2.x,而且监控也支持和prometheus等多款主流产品进行整合

Sentinel: 是阿里巴巴开源的一款断路器实现,本身在阿里内部已经被大规模采用,非常稳定。

三者之间的区别     Sentinel   Hystrix   resilience4j  
隔离策略   信号量隔离(并发线程数限流)  

线程池隔离/信号量隔离

  信号量隔离  

熔断降级策略

  基于响应时间、异常比率、异常数   基于异常比率  

基于异常比率、响应时间

 

实时统计实现

  滑动窗口(LeapArray)  

滑动窗口(基于 RxJava)

  Ring Bit Buffer  

动态规则配置

  支持多种数据源   支持多种数据源   有限支持  
扩展性   多个扩展点   插件的形式   接口的形式  
基于注解的支持   支持   支持   支持  
限流   基于 QPS,支持基于调用关系的限流   有限的支持   Rate Limiter  
流量整形  

支持预热模式、匀速器模式、预热排队模式

  不支持  

简单的 Rate Limiter模式

 
系统自适应保护   支持   不支持   不支持  
控制台  

提供开箱即用的控制台,可配置规则、查看秒级监控、机器发现等

 

简单的监控查看

 

不提供控制台,可对接其它监控系统

 
四:Sentinel入门

Sentinel (分布式系统的流量防卫兵) 是阿里开源的一套用于服务容错的综合性解决方案。它以流量为切入点, 从流量控制、熔断降级、系统负载保护等多个维度来保护服务的稳定性。

Sentinel 具有以下特征:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwygwp.html