Spring Cloud Alibaba之 Sentinel

推荐阅读:重磅来袭!微服务的里程碑 , SpringCloudAlibaba电子版教程已问世
Sentinel 介绍随着微服务的流行 , 服务和服务之间的稳定性变得越来越重要 。Sentinel 以流量为切入点 , 从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性 。
Sentinel 具有以下特征:

  • 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景 , 例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、实时熔断下游不可用应用等 。
  • 完备的实时监控:Sentinel 同时提供实时的监控功能 。 您可以在控制台中看到接入应用的单台机器秒级数据 , 甚至 500 台以下规模的集群的汇总运行情况 。
  • 广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块 , 例如与 Spring Cloud、Dubbo、gRPC 的整合 。 您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel 。
  • 完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展点 。 您可以通过实现扩展点 , 快速的定制逻辑 。 例如定制规则管理、适配数据源等 。
如何使用 Sentinel如果要在您的项目中引入 Sentinel , 使用 group ID 为 com.alibaba.cloud 和 artifact ID 为 spring-cloud-starter-alibaba-sentinel 的 starter 。
[source,yaml]com.alibaba.cloudspring-cloud-starter-alibaba-sentinel下面这个例子就是一个最简单的使用 Sentinel 的例子:
@SpringBootApplicationpublic class Application {public static void main(String[] args) {SpringApplication.run(ServiceApplication.class, args);}}@RestControllerpublic class TestController {@GetMapping(value = "http://kandian.youth.cn/hello")@SentinelResource("hello")public String hello() {return "Hello Sentinel";}}@SentinelResource 注解用来标识资源是否被限流、降级 。 上述例子上该注解的属性 'hello' 表示资源名 。
@SentinelResource 还提供了其它额外的属性如 blockHandler , blockHandlerClass , fallback 用于表示限流或降级的操作 , 更多内容可以参考 Sentinel注解支持 。
以上例子都是在 WebServlet 环境下使用的 , Sentinel 目前已经支持 WebFlux , 需要配合 spring-boot-starter-webflux 依赖触发 sentinel-starter 中 WebFlux 相关的自动化配置 。
@SpringBootApplicationpublic class Application {public static void main(String[] args) {SpringApplication.run(ServiceApplication.class, args);}}@RestControllerpublic class TestController {@GetMapping("/mono")@SentinelResource("hello")public Mono mono() { return Mono.just("simple string").transform(new SentinelReactorTransformer<>("otherResourceName"));}}Sentinel 控制台Sentinel 控制台提供一个轻量级的控制台 , 它提供机器发现、单机资源实时监控、集群资源汇总 , 以及规则管理的功能 。 您只需要对应用进行简单的配置 , 就可以使用这些功能 。
注意: 集群资源汇总仅支持 500 台以下的应用集群 , 有大概 1 - 2 秒的延时 。
Spring Cloud Alibaba之 Sentinel文章插图
Figure 3. Sentinel Dashboard
开启该功能需要3个步骤:
获取控制台您可以从 release 页面 下载最新版本的控制台 jar 包 。
您也可以从最新版本的源码自行构建 Sentinel 控制台: