ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] ## 分布式系统中的流量卫兵 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 ## 限流控制、熔断降级场景 十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。 ## alibaba Sentinel Sentinel是一个轻量级的流量控制、熔断降级 Java 库。 [中文文挡](https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D) ## Sentinel生态 ![Sentinel生态](https://box.kancloud.cn/d85a8f333b2f8c47c0b1d8045a22c801_2516x1256.png) 从上面的生态图来说,Sentinel支持多种网关,比如zuul等。 数据源也可以为多种,比如使用nacos配置动态的限流数据源。 微服务支持Spring Cloud、Istio ## Sentinel 对比 Hystrix | | Sentinel | Hystrix | | --- | --- | --- | | 隔离策略 | 基于并发数 | 线程池隔离/信号量隔离 | | 熔断降级策略 | 基于响应时间或失败比率 | 基于失败比率 | | 实时指标实现 | 滑动窗口 | 滑动窗口(基于 RxJava) | | 规则配置 | 支持多种数据源 | 支持多种数据源 | | 扩展性 | 多个扩展点 | 插件的形式 | | 基于注解的支持 | 即将发布 | 支持 | | 调用链路信息 | 支持同步调用 | 不支持 | | 限流 | 基于 QPS / 并发数,支持基于调用关系的限流 | 不支持 | | 流量整形 | 支持慢启动、匀速器模式 | 不支持 | | 系统负载保护 | 支持 | 不支持 | | 实时监控 API | 各式各样 | 较为简单 | | 控制台 | 开箱即用,可配置规则、查看秒级监控、机器发现等 | 不完善 | | 常见框架的适配 | Servlet、Spring Cloud、Dubbo、gRPC 等 | Servlet、Spring Cloud Netflix | ## 开始使用 这里使用的是[v1.6.2](https://github.com/alibaba/Sentinel/releases/tag/1.6.2)这个版本。 Sentinel 可以简单的分为 Sentinel 核心库和 Dashboard。核心库不依赖 Dashboard,但是结合 Dashboard 可以取得最好的效果。 ### Sentinel 核心库的使用 为了减少开发的复杂程度,我们对大部分的主流框架,例如 Web Servlet、Dubbo、Spring Cloud、gRPC、Spring WebFlux、Reactor 等都做了适配。您只需要引入对应的依赖即可方便地整合 Sentinel。可以参见:[主流框架的适配](https://github.com/alibaba/Sentinel/wiki/%E4%B8%BB%E6%B5%81%E6%A1%86%E6%9E%B6%E7%9A%84%E9%80%82%E9%85%8D)。 ### Sentinel 与 Spring Cloud 的整合 #### 应用依赖配置 ~~~ <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> ~~~ #### 获取控制台 您可以从[release 页面](https://github.com/alibaba/Sentinel/releases)下载最新版本的控制台 jar 包。 您也可以从最新版本的源码自行构建 Sentinel 控制台: * 下载[控制台](https://github.com/alibaba/Sentinel/tree/master/sentinel-dashboard)工程 * 使用以下命令将代码打包成一个 fat jar:`mvn clean package` Sentinel 控制台是一个标准的 SpringBoot 应用,以 SpringBoot 的方式运行 jar 包即可。 ~~~shell java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar ~~~ 如若8080端口冲突,可使用`-Dserver.port=新端口`进行设置。 #### 应用接入 application.yml ~~~ spring: cloud: sentinel: transport: port: 8719 dashboard: localhost:8080 ~~~ #### 运行截图 ![](https://box.kancloud.cn/b50b562b8ae21239e10c92024d172ae4_2428x1586.png) ## 更多资料 [Github]([https://github.com/alibaba/Sentinel](https://github.com/alibaba/Sentinel)) [中文文档](https://github.com/alibaba/Sentinel/wiki/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8) [Spring Cloud Alibaba Sentinel]([https://github.com/alibaba/spring-cloud-alibaba/wiki/Sentinel](https://github.com/alibaba/spring-cloud-alibaba/wiki/Sentinel))