[TOC]
## 分布式系统中的流量卫兵
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
## 限流控制、熔断降级场景
十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
## alibaba Sentinel
Sentinel是一个轻量级的流量控制、熔断降级 Java 库。
[中文文挡](https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D)
## Sentinel生态

从上面的生态图来说,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
~~~
#### 运行截图

## 更多资料
[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))