Spring实现Sentinel简单实例
简介
Sentinel是阿里开源的项目,提供了流量控制、熔断降级、系统负载保护等多个维度来保障服务之间的稳定性。
官网:https://github.com/alibaba/Sentinel/wiki
特征
丰富的应用场景 :Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
完备的实时监控 :Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
广泛的开源生态 :Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 SpringCloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入Sentinel。
完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。
特性
与Hystrix区别
总体来说:
Hystrix常用的线程池隔离会造成线程上下切换的overhead比较大;Hystrix使用的信号量隔离对某个资源调用的并发数进行控制,效果不错,但是无法对慢调用进行自动降级;Sentinel通过并发线程数的流量控制提供信号量隔离的功能。
此外,Sentinel支持的熔断降级维度更多,可对多种指标进行流控、熔断,且提供了实时监控和控制面板,功能更为强大。
关于Sentinel与Hystrix的区别详见:https://developer.aliyun.com/article/633786
Sentinel 使用
Sentinel 的使用可以分为两个部分:
- 控制台(Dashboard):控制台主要负责管理推送规则、监控、集群限流分配管理、机器发现等。
- 核心库(Java 客户端):不依赖任何框架/库,能够运行于 Java 7 及以上的版本的运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。
Sentinel管理控制台
获取 Sentinel 控制台
release 页面 下载最新版本的控制台 jar 包。
sentinel服务启动
1 | java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.1.jar |
登录
默认用户名和密码都是 sentinel
Sentinel客户端
引入依赖
1 | // https://mvnrepository.com/artifact/com.alibaba.csp/sentinel-core |
SentinelAspectConfig
1 | import com.alibaba.csp.sentinel.annotation.aspectj.SentinelResourceAspect; |
OrderQueryService
1 | import com.alibaba.csp.sentinel.annotation.SentinelResource; |
OrderController
1 | import org.springframework.beans.factory.annotation.Autowired; |
测试
API访问速度超过设置的QPS,执行限流方法。
客户端接入控制台
引入依赖
1 | // https://mvnrepository.com/artifact/com.alibaba.csp/sentinel-transport-simple-http |
application.yml
1 | spring: |
注意
为所有的 HTTP 服务提供限流埋点的是 CommonFilter
。
有时候,需要多次访问应用中暴露的url,控制台dashboard中才会有对应的数据。