说明:SpringCloud系列笔者自学系列,学习来源是周立的博客 http://www.itmuch.com/ 。而此处转载其博客只是为了方便自己以后的学习。
本篇来源 http://www.itmuch.com/spring-cloud-alibaba-migration/spring-cloud-alibaba-2/
本文对Hystrix、Resilience4j、Sentinel进行对比,并探讨如何使用一行代码将Hystrix迁移到Sentinel。
作者:洛夜,校对:周立
在本博客首发,欢迎转载。
前段时间,Netflix宣布Hystrix进入维护模式,详见Hystrix停止开发,我们该何去何从? ,而Spring Cloud亦宣布Spring Cloud Netflix进入维护状态,后续不再进行更新已成为事实。作为开发者的我们,如何使用极简的方式替换Hystrix成为首要解决的问题。
Hystrix宣布停止维护 后,社区推荐了Resilience4j ,而业界还有Alibaba Sentinel可供选择——3款产品各有优势,具体的功能差异参考下表(该表来自 Sentinel Wiki :
隔离策略 | 信号量隔离(并发线程数限流) | 线程池隔离/信号量隔离 | 信号量隔离 |
熔断降级策略 | 基于响应时间、异常比率、异常数 | 基于异常比率 | 基于异常比率、响应时间 |
实时统计实现 | 滑动窗口(LeapArray) | 滑动窗口(基于 RxJava) | Ring Bit Buffer |
动态规则配置 | 支持多种数据源 | 支持多种数据源 | 有限支持 |
扩展性 | 多个扩展点 | 插件的形式 | 接口的形式 |
基于注解的支持 | 支持 | 支持 | 支持 |
限流 | 基于 QPS,支持基于调用关系的限流 | 有限的支持 | Rate Limiter |
流量整形 | 支持预热模式、匀速器模式、预热排队模式 | 不支持 | 简单的 Rate Limiter 模式 |
系统自适应保护 | 支持 | 不支持 | 不支持 |
控制台 | 提供开箱即用的控制台,可配置规则、查看秒级监控、机器发现等 | 简单的监控查看 | 不提供控制台,可对接其它监控系统 |
目前,Sentinel 在 Spring Cloud Alibaba中已适配Spring Cloud体系,完全可用来替代 Hystrix 的功能。不仅如此,阿里内部很多产品线都已使用Sentinel实现限流降级,Sentinel是经过生产流量大规模验证的。
下面来探讨如何从Hystrix迁移至Sentinel——
Spring Cloud Alibaba Sentinel 代替 Hystrix
要想使用Spring Cloud Alibaba Sentinel,需添加如下依赖,并去除Spring Cloud Netflix Hystrix( spring-cloud-starter-netflix-hystrix
)的依赖。
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-alibaba-sentinel</artifactId> <version>0.2.1.RELEASE</version> </dependency> |
0代码修改兼容Feign
加上Feign的依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>${latest.version}</version> </dependency> |
在application.yml
中添加feign.sentinel.enabled=true
即可为Feign启用Sentinel支持:
# 去掉 # feign.hystrix.enabled: true # 改为如下即可 feign.sentinel.enabled: true |
Feign Client无需修改:
"service-provider") (name = public interface EchoService { "/echo/{str}", method = RequestMethod.GET) (value = String echo(@PathVariable("str") String str); "/echo/save", method = RequestMethod.POST) (value = String save(Foo foo); } |
对于这个 EchoService
,echo方法对应的资源名是 GET:http://service-provider/echo/{str}
, save 方法对应的资源名是 POST:http://service-provider/echo/save
。
只需配置这些规则,限流降级操作即可生效。
一行代码支持RestTemplate
Sentinel与Spring生态的 RestTemplate
也进行了整合,可对 RestTemplate
请求过程进行限流和降级,只需在构造 RestTemplate 的时候加上 @SentinelRestTemplate
注解即可,如下所示:
public RestTemplate restTemplate() { return new RestTemplate(); } |
@SentinelRestTemplate
注解还暴露出了对应的属性可进行限流降级后的自定义错误,默认的行为是返回 “RestTemplate request block by sentinel” 信息。关于 @SentinelRestTemplate
的详细信息可以参考 Wiki。
相关文章
- Spring Cloud中,如何解决Feign/Ribbon第一次请求失败的问题?
- 跟我学Spring Cloud(Finchley版)-12-微服务容错三板斧
- 跟我学Spring Cloud(Finchley版)-13-通用方式使用Hystrix
- 跟我学Spring Cloud(Finchley版)-14-Feign使用Hystrix
- 跟我学Spring Cloud(Finchley版)-15-Hystrix监控详解
相关推荐
该分支特别注意的是版本命名规则的变化,新的Spring Cloud Alibaba版本号由Spring Cloud版本号加上一个扩展版本号组成,例如`2022.0.0.0`表示与Spring Cloud 2022.0.0版本兼容的第一个版本。 ##### 2. 2021.x 分支 ...
Spring Cloud Alibaba 是一个由阿里巴巴维护的开源项目,它为开发者提供了在分布式系统(如微服务、云应用)中实现各种经典设计模式的工具集。该项目致力于简化开发过程,使开发者可以快速构建一些常见的分布式系统...
7. **Hystrix**:虽然Spring Cloud Alibaba 2.2.1版本推荐使用Sentinel替代Hystrix,但Hystrix仍然是一个重要的熔断组件。在新版本中,可能仍然支持Hystrix,并提供了向Sentinel迁移的路径。 在"xc-spring-cloud-...
7. **Hystrix**:虽然 SpringCloud Alibaba 引入了 Sentinel 作为默认的熔断降级库,但 Hystrix 仍是一个经典的容错管理工具。它通过隔离请求、降级策略和回退逻辑,帮助服务在面临故障时保持可用性。 8. **Zipkin*...
6. **配置熔断器**:Spring Cloud Alibaba 的 Hystrix 或者 Sentinel 都能作为熔断器来保护微服务。当后端服务不可用或响应时间过长时,熔断器会快速返回一个默认值或错误信息,防止系统过载。 7. **监控和管理**:...
一篇很好的springCloud学习的思维导读,详细的介绍了,springCloud的搭建步骤以及各组件的说明讲解 涵盖 Eureka服务注册与发现 Zookeeper服务注册与发现 Consul服务注册与发现 Ribbon负载均衡服务调用 OpenFeign...
其中,Spring Cloud Netflix Hystrix是一款至关重要的组件,它为企业级应用提供了强大的容错保护,实现了服务间的熔断和降级策略,极大地提升了系统的稳定性和可靠性。 Hystrix的核心概念包括: 1. **熔断器模式**...
5. **熔断与降级**:Hystrix或Sentinel(Spring Cloud Alibaba的一部分)可以用来实现服务间的熔断和降级策略,当服务不可用或者响应超时时,能够保护系统不被单个服务的故障所影响,确保整体服务的稳定性。...
PDF版的手册包含了所有关键组件的介绍、配置指南、最佳实践和示例代码,是学习和查阅Spring Cloud不可或缺的资源。 1. **Eureka**:Spring Cloud Eureka是服务注册与发现的组件,它允许服务提供者向注册中心注册,...
第一课: 服务的注册与发现(Eureka) ... 第十一课:docker部署spring cloud项目 第十二课: 断路器监控(Hystrix Dashboard) 第十三课: 断路器聚合监控(Hystrix Turbine) 第十四课: 服务注册(consul)
Spring Cloud OpenFeign 是一个声明式的服务调用工具,它整合了 Ribbon 和 Hystrix,拥有负载均衡和服务容错功能。Feign 简化了服务调用接口的开发,使得开发者只需创建一个接口并用注解的方式来配置它,就可以实现...
总之,阿里巴巴Spring Cloud全家桶项目提供了一个完整的微服务生态,它涵盖了从服务治理到分布式事务处理,再到API管理等多个方面,为企业构建高可用、高性能的微服务体系提供了强大的支持。掌握并灵活运用这些组件...
在分布式系统中,服务间的调用异常处理是至关重要的,Spring Cloud Hystrix 就是为了解决这一问题而设计的。Hystrix 是 Netflix 开源的一个延迟和容错库,用于隔离服务间的调用,防止因某个服务的不稳定导致整个系统...
《Spring Cloud Alibaba 从入门到实战》是一本深入解析Spring Cloud Alibaba框架的实践指南,它旨在帮助Java开发者快速掌握这一微服务生态中的重要组件。Spring Cloud Alibaba是阿里巴巴为Spring Cloud贡献的一系列...
10. **Spring Cloud Netflix** 和 **Spring Cloud Alibaba**:Netflix提供了许多微服务组件,但随着Netflix自身战略调整,Spring Cloud Alibaba逐渐成为替代方案,包括Nacos(服务发现)、Sentinel(流量控制)等。...
项目中使用了Spring Cloud Alibaba提供的组件,如Nacos、Sentinel、Seata等,以及传统的Spring Cloud组件,如Eureka、Hystrix、Ribbon等。 适用人群 有Java基础的开发者 对微服务架构感兴趣的开发者 希望了解...
《2020最新版SpringCloud(H版&alibaba)框架开发教程》是一套全面而深入的SpringCloud学习资源,涵盖了从基础到高级的各种技术点。这套教程旨在帮助开发者掌握SpringCloud的核心概念和实践技巧,尤其针对H版及阿里...
SpringCloud是中国开发者非常熟悉的一个微服务框架,它基于SpringBoot实现了云应用的开发、配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、配置中心等一系列功能,大大简化了分布式系统开发的...
spring-cloud-config-eureka:配置中心服务化和高可用代码示例 spring-cloud-config-eureka-bus:配置中心和消息总线示例(配置中心终结版) gateway-service-zuul:Spring Cloud Zuul使用初级篇 网关 均衡负载 ...