博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
阅读量:6160 次
发布时间:2019-06-21

本文共 2665 字,大约阅读时间需要 8 分钟。

  hot3.png

摘要: 本文对Hystrix、Resilience4j、Sentinel进行对比,并探讨如何使用一行代码这种极简的方式,将Hystrix迁移到Sentinel。 Hystrix 自从前段时间 宣布停止维护之后,社区推荐了 resilience4j。

自 Spring Cloud 官方宣布 Spring Cloud Netflix 进入维护状态后,我们开始制作《Spring Cloud Alibaba迁移指南》系列文章,向开发者提供更多的技术选型方案,并降低迁移过程中的技术难度。

第一篇,我们对Hystrix、Resilience4j 和 Sentinel 三个开源项目进行对比,并探讨如何使用一行代码这种极简的方式,将Hystrix迁移到Sentinel。

Hystrix 自从前段时间 之后,社区推荐了 。这 3 款产品各有优劣势,具体的功能差异参考下表(该表来源 ):

  Sentinel Hystrix resilience4j
隔离策略 信号量隔离(并发线程数限流) 线程池隔离/信号量隔离 信号量隔离
熔断降级策略 基于响应时间、异常比率、异常数 基于异常比率 基于异常比率、响应时间
实时统计实现 滑动窗口(LeapArray) 滑动窗口(基于 RxJava) Ring Bit Buffer
动态规则配置 支持多种数据源 支持多种数据源 有限支持
扩展性 多个扩展点 插件的形式 接口的形式
基于注解的支持 支持 支持 支持
限流 基于 QPS,支持基于调用关系的限流 有限的支持 Rate Limiter
流量整形 支持预热模式、匀速器模式、预热排队模式 不支持 简单的 Rate Limiter 模式
系统自适应保护 支持 不支持 不支持
控制台 提供开箱即用的控制台,可配置规则、查看秒级监控、机器发现等 简单的监控查看 不提供控制台,可对接其它监控系统

目前 Sentinel 在 中已经适配了 Spring Cloud 体系,可以用来完全替代 Hystrix 的功能了。

Spring Cloud Alibaba Sentinel 功能介绍

Spring Cloud Alibaba Sentinel 主要是为了整合 Sentinel 和 Spring Boot/Cloud 技术栈。目前完成了如下功能:

  1. 自动适配 Servlet 容器。只需要配置 url-pattern(默认拦截所有请求),即可对拦截的这些 url 进行限流降级操作
  2. 整合了 RestTemplate,使用 RestTemplate 进行操作的时候会被限流降级
  3. 整合了 Feign,兼容了原先的 Hystrix 支持 Feign 的编程模型
  4. 数据源可配置化,只需在配置文件中配置数据源信息,即可动态加载规则
  5. Endpoint 暴露各种元数据,比如配置信息,规则数据
  6. HealthIndicator 检查 Sentinel 健康状态 (整合中)
  7. 支持 Spring Cloud Gateway 和 Zuul (整合中)

Spring Cloud Alibaba Sentinel 代替 Hystrix

想要使用 Spring Cloud Alibaba Sentinel,需要加上依赖信息:

org.springframework.cloud
spring-cloud-alibaba-sentinel
0.2.1.RELEASE

0代码修改兼容 Feign

加上 Feign 的依赖:

org.springframework.cloud
spring-cloud-starter-openfeign
${latest.version}

把 hystrix 的配置改成 sentinel 的即可使用 Sentinel 的限流降级功能:

# feign.hystrix.enabled: truefeign.sentinel.enabled: true
@FeignClient(name = "service-provider")public interface EchoService {    @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)    String echo(@PathVariable("str") String str);        @RequestMapping(value = "/echo/save", method = RequestMethod.POST)    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 注解即可:

@Bean@SentinelRestTemplatepublic RestTemplate restTemplate() {    return new RestTemplate();}

@SentinelRestTemplate 注解还暴露出了对应的属性可进行限流降级后的自定义错误,默认的行为是返回 "RestTemplate request block by sentinel" 信息。关于 @SentinelRestTemplate 的详细信息可以参考 。

作者:

本文为云栖社区原创内容,未经允许不得转载。

转载于:https://my.oschina.net/yunqi/blog/3015532

你可能感兴趣的文章
oracle 去掉空格
查看>>
6.13心得
查看>>
Runtime类
查看>>
eclipse decompiler
查看>>
记一个搜索网盘资源的网站
查看>>
jdk1.7和jdk1.8的String的getByte方法的差异
查看>>
java父子进程通信
查看>>
Android ADB server didn't ACK * failed to start daemon * 简单有效的解决方案
查看>>
Olap学习笔记
查看>>
Codeforces Round #431 (Div. 1)
查看>>
如何进行数组去重
查看>>
将标题空格替换为 '_' , 并自动复制到剪切板上
查看>>
List Collections sort
查看>>
Mysql -- You can't specify target table 'address' for update in FROM clause
查看>>
使用局部标准差实现图像的局部对比度增强算法。
查看>>
2017-2018-1 20165313 《信息安全系统设计基础》第八周学习总结
查看>>
《代码敲不队》第四次作业:项目需求调研与分析
查看>>
菜鸡互啄队—— 团队合作
查看>>
HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的解决办法...
查看>>
SparseArray
查看>>