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

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

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

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

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

目前 Sentinel 在 Spring Cloud Alibaba 项目中已经适配了 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,需要加上依赖信息:

<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>

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

# feign.hystrix.enabled: true
feign.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
@SentinelRestTemplate
public RestTemplate restTemplate() {return new RestTemplate();
}

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



本文作者:中间件小哥

阅读原文

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

Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel 1相关推荐

  1. Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel

    自 Spring Cloud 官方宣布 Spring Cloud Netflix 进入维护状态后,我们开始制作<Spring Cloud Alibaba迁移指南>系列文章,向开发者提供更多 ...

  2. Spring Cloud Alibaba迁移指南2:一行代码从Hystrix迁移到Sentinel

    作者:洛夜,校对:周立 在本博客首发,欢迎转载. 前段时间,Netflix宣布Hystrix进入维护模式,详见Hystrix停止开发,我们该何去何从?,而Spring Cloud亦宣布Spring C ...

  3. Spring Cloud Alibaba学习指南

    文章目录 背景 介绍 主要功能 主要组件 参考文档 Spring Cloud Alibaba github Spring Boot & Spring Cloud & Spring Cl ...

  4. Spring Cloud Alibaba 实战 | 第十二篇: 微服务整合Sentinel的流控、熔断降级,赋能拥有降级功能的Feign新技能熔断,实现熔断降级双剑合璧(JMeter模拟测试)

    文章目录 一. Sentinel概念 1. 什么是Sentinel? 2. Sentinel功能特性 3. Sentinel VS Hystrix 二. Docker部署Sentinel Dashbo ...

  5. Spring Cloud Alibaba迁移指南(二):零代码替换 Eureka

    为什么80%的码农都做不了架构师?>>>    自 Spring Cloud 官方宣布 Spring Cloud Netflix 进入维护状态后,我们开始制作<Spring C ...

  6. Spring Cloud Alibaba迁移指南(四):零代码兼容 Api-Gateway

    自 Spring Cloud 官方宣布 Spring Cloud Netflix 进入维护状态后,我们开始制作<Spring Cloud Alibaba迁移指南>系列文章,向开发者提供更多 ...

  7. Spring Cloud Alibaba迁移指南(四):零代码兼容 Api-Gateway 1

    自 Spring Cloud 官方宣布 Spring Cloud Netflix 进入维护状态后,我们开始制作<Spring Cloud Alibaba迁移指南>系列文章,向开发者提供更多 ...

  8. Spring Cloud Alibaba迁移指南(三):极简的 Config

    自 Spring Cloud 官方宣布 Spring Cloud Netflix 进入维护状态后,我们开始制作<Spring Cloud Alibaba迁移指南>系列文章,向开发者提供更多 ...

  9. Spring Cloud Alibaba迁移指南(三):极简的 Config 1

    自 Spring Cloud 官方宣布 Spring Cloud Netflix 进入维护状态后,我们开始制作<Spring Cloud Alibaba迁移指南>系列文章,向开发者提供更多 ...

最新文章

  1. Jdom makes xml easy
  2. 坑爹的PHImageManager和PHImageRequestOptions
  3. 集合框架(List的三个子类的特点)
  4. 字节跳动简历冷却期_干货 | 字节跳动HR是如何挑选简历的?
  5. 2021最新报告:一文洞察智慧金融发展现状
  6. PHP生成静态HTML的源代码及用法
  7. qt 信号多个链接槽_Qt原理窥探信号槽的实现细节
  8. HDU - 6704 K-th occurrence (后缀数组+主席树)
  9. 用vs2011 编译 orchard 源代码
  10. 2018 CCPC 桂林站小结
  11. python数据类型-列表
  12. Atitit.每周计划日程表 流程表 v9 r829.docx
  13. java jbpm工作流_[JAVA] Jbpm工作流引擎原理及Jbpm复杂流程实现视频课程
  14. 基于Android-JavaEE-DB2实现的旧物交易平台
  15. iOS网络协议_HTTP/TCP/IP浅析
  16. 杜立特尔分解法 MATLAB,杜立特分解法.doc
  17. DNS域名解析中A、AAAA、CNAME、MX、NS、TXT、SRV、SOA、PTR各项记录的作用
  18. 西雅图又一家科技公司准备上市!
  19. python随机种子怎么用_python设置随机种子实例讲解
  20. java中switch的用法和逻辑运算符

热门文章

  1. 转:perror和strerror的区别
  2. 好消息,scott的asp.net 2.0数据导航系列全部出版了
  3. lz0-007 读书笔记03
  4. DDD-上下文映射图
  5. TCP与UDP传输协议
  6. 浅谈nodejs中的Crypto模块
  7. memcached在大负载高并发网站上的应用(一)
  8. 第二百零一天 how can I坚持
  9. ASP.net+MVC--2
  10. eclipse中安装flex插件