Spring Cloud Alibaba教程之Sentinel的使用

什么是Sentinel

Sentinel,中文翻译为哨兵,是为微服务提供流量控制、熔断降级的功能,它和Hystrix提供的功能一样,可以有效的解决微服务调用产生的“雪崩”效应,为微服务系统提供了稳定性的解决方案。随着Hytrxi进入了维护期,不再提供新功能,Sentinel是一个不错的替代方案。通常情况,Hystrix采用线程池对服务的调用进行隔离,Sentinel才用了用户线程对接口进行隔离,二者相比,Hystrxi是服务级别的隔离,Sentinel提供了接口级别的隔离,Sentinel隔离级别更加精细,另外Sentinel直接使用用户线程进行限制,相比Hystrix的线程池隔离,减少了线程切换的开销。另外Sentinel的DashBoard提供了在线更改限流规则的配置,也更加的优化。

从官方文档的介绍,Sentinel 具有以下特征:

  • 丰富的应用场景: Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、实时熔断下游不可用应用等。
  • 完备的实时监控: Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
  • 广泛的开源生态: Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
  • 完善的 SPI 扩展点: Sentinel 提供简单易用、完善的 SPI 扩展点。您可以通过实现扩展点,快速的定制逻辑。例如定制规则管理、适配数据源等。

如何在Spring Cloud中使用Sentinel

Sentinel作为Spring Cloud Alibaba的组件之一,在Spring Cloud项目中使用它非常的简单。现在以案例的形式来讲解如何在Spring Cloud项目中使用Sentinel。本项目是在之前nacos教程的案例基础上进行改造。在工程的pom文件加上sentinel的Spring Cloud起步依赖,代码如下:

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
  <version>0.9.0.RELEASE</version>
</dependency>

在工程的配置文件application.yml文件中配置,需要新增2个配置:

  • spring.cloud.sentinel.transport.port: 8719 ,这个端口配置会在应用对应的机器上启动一个 Http Server,该 Server 会与 Sentinel 控制台做交互。比如 Sentinel 控制台添加了1个限流规则,会把规则数据 push 给这个 Http Server 接收,Http Server 再将规则注册到 Sentinel 中。
  • spring.cloud.sentinel.transport.dashboard: 8080,这个是Sentinel DashBoard的地址。
server:
 port: 8762
spring:
 application:
 name: nacos-provider
 cloud:
 nacos:
  discovery:
  server-addr: 127.0.0.1:8848
 sentinel:
  transport:
  port: 8719
  dashboard: localhost:8080

写一个RestController,在接口上加上SentinelResource注解就可以了。

@RestController
public class ProviderController {

 @GetMapping("/hi")
 @SentinelResource(value="hi")
 public String hi(@RequestParam(value = "name",defaultValue = "forezp",required = false)String name){

  return "hi "+name;
 }

}

关于@SentinelResource 注解,有以下的属性:

  • value:资源名称,必需项(不能为空)
  • entryType:entry 类型,可选项(默认为 EntryType.OUT)
  • blockHandler / blockHandlerClass: blockHandler 对应处理 BlockException 的函数名称,可选项
  • fallback:fallback 函数名称,可选项,用于在抛出异常的时候提供 fallback 处理逻辑。

启动Nacos,并启动nacos-provider项目。文末有源码下载链接。

Sentinel DashBoard

Sentinel 控制台提供一个轻量级的控制台,它提供机器发现、单机资源实时监控、集群资源汇总,以及规则管理的功能.
Sentinel DashBoard下载地址:https://github.com/alibaba/Sentinel/releases

下载完成后,以以下的命令启动

java -jar sentinel-dashboard-1.6.1.jar

默认启动端口为8080,可以-Dserver.port=8081的形式改变默认端口。启动成功后,在浏览器上访问localhost:8080,就可以显示Sentinel的登陆界面,登陆名为sentinel,密码为sentinel。

登陆sentinel dashboard成功后,并多次访问nacos-provider的localhost:8080/hi接口,在nacos访问信息如下:

sentinel dashboard显示了nacos-provider的接口资源信息。

在/hi资源处设置接口的限流功能,在“+流控”按钮点击开设置界面如下,设置阈值类型为 qps,单机阈值为2。

设置成功后可以在流控规则这一栏进行查看,如图所示:

测试

多次快速访问nacos-provider的接口资源http://localhost:8762/hi,可以发现偶尔出现以下的信息:

Blocked by Sentinel (flow limiting)

正常的返回逻辑为

hi forezp

由以上可只,接口资源/hi的限流规则起到了作用。

在FeignClient中使用Sentinel

Hystrix默认集成在Spring Cloud 的Feign Client组件中,Sentinel也可以提供这样的功能。现以案例的形式来讲解如何在FeignClient中使用Sentinel,z本案例是在之前的nacos教程案例的nacos-consumer工程上进行改造,除了引入spring-cloud-starter-alibaba-sentinel,还需要引入spring-cloud-starter-openfeign,代码如下:

	<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-openfeign</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
			<version>0.9.0.RELEASE</version>
		</dependency>

在配置文件中需要加上sentinel.transport. dashboard配置外,还需要加上feign.sentinel.enabled的配置,代码如下:

server:
 port: 8763
spring:
 application:
 name: nacos-consumer
 cloud:
 nacos:
  discovery:
  server-addr: 127.0.0.1:8848
 sentinel:
  transport:
  port: 8719
  dashboard: localhost:8080

feign.sentinel.enabled: true

写一个FeignClient,调用nacos-provider的/hi接口:

@FeignClient("nacos-provider")
public interface ProviderClient {

 @GetMapping("/hi")
 String hi(@RequestParam(value = "name", defaultValue = "forezp", required = false) String name);
}

写一个RestController调用ProviderClient,代码如下:

@RestController
public class ConsumerController {

 @Autowired
 ProviderClient providerClient;

 @GetMapping("/hi-feign")
 public String hiFeign(){
  return providerClient.hi("feign");
 }
}

在FeignClient中,Sentinel为Feign调用生成了资源名策略定义,定义规则为httpmethod:protocol://requesturl。启动nacos-consumer工程,在Sentinel DashBoard生成了如下的资源信息:

添加流控,QPS为2,在浏览器上快速多次点击访问http://localhost:8763/hi-feign,浏览器在正常情况下是能够正常返回如下的信息:

hi feign

在被限流的时候返回错误信息。

需要注意的是,被限流的时候FeignClient并不会调用nacos-provider的接口,而是在nacos-consumer工程里直接报错。

源码下载

https://github.com/forezp/SpringCloudLearning/tree/master/springcloud-alibaba/nacos-discovery-sentinel

参考资料

https://github.com/alibaba/Sentinel/releases

https://github.com/alibaba/Sentinel/tree/master/sentinel-dashboard

https://github.com/spring-cloud-incubator/spring-cloud-alibaba/wiki/Sentinel

https://github.com/alibaba/Sentinel/wiki/控制台

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Spring Cloud Alibaba使用Sentinel实现接口限流

    最近管点闲事浪费了不少时间,感谢网友 libinwalan 的留言提醒.及时纠正路线,继续跟大家一起学习Spring Cloud Alibaba. Nacos作为注册中心和配置中心的基础教程,到这里先告一段落,后续与其他结合的内容等讲到的时候再一起拿出来说,不然内容会有点跳跃.接下来我们就来一起学习一下Spring Cloud Alibaba下的另外一个重要组件:Sentinel. Sentinel是什么 Sentinel的官方标题是:分布式系统的流量防卫兵.从名字上来看,很容易就能猜到它是用来

  • 简单了解Spring Cloud Alibaba相关知识

    这篇文章主要介绍了简单了解Spring Cloud Alibaba相关知识,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 官方github地址 Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案.此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务. 主要功能 服务限流降级:默认支持 WebServlet.WebFlux, OpenFeign

  • Spring Cloud Alibaba Nacos 入门详解

    概览 阿里巴巴在2018年7月份发布Nacos, Nacos是一个更易于构建云原生应用的动态服务发现.配置管理和服务管理平台.并表示在6-8个月完成到生产可用的0.8版本,目前版本是0.9版本. Nacos提供四大功能 服务发现和服务健康检查 Nacos使服务更容易注册自己并通过DNS或HTTP接口发现其他服务.Nacos还提供服务的实时健康检查,以防止向不健康的主机或服务实例发送请求. 动态配置管理 动态配置服务允许您在所有环境中以集中和动态的方式管理所有服务的配置.Nacos消除了在更新配置

  • 详解Spring Cloud微服务架构下的WebSocket解决方案

    WebSocket在现代浏览器中的应用已经算是比较普遍了,在某些业务场景下,要求必须能够在服务器端推送消息至客户端.在没有WebSocket的年代,我们使用过dwr,在那个时候dwr真实一个非常棒的方案.但是在WebSocket兴起之后,我们更愿意使用标准实现来解决问题. 首先交代一下,本篇文章不讲解WebSocket的配置,主要讲的是针对在微服务架构集群模式下解决方案的选择. 微服务架构大家应该都不陌生了,在微服务架构下,服务是分布式的,而且为了保证业务的可用性,每个服务都是以集群的形式存在.

  • spring cloud alibaba Nacos 注册中心搭建过程详解

    这篇文章主要介绍了spring cloud alibaba Nacos 注册中心搭建过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 nacos下载地址 什么是 Nacos? nacos主要起到俩个作用一个是注册中心,另外一个是配置中心. 下面图 是nacos的功能结构图 运行环境 JDK 1.8+: Maven 3.2.x+: 下载 你可以通过源码和发行包两种方式来获取 Nacos. nacos发行包下载地址 选择版本解压 unzip

  • Spring Cloud Gateway 服务网关快速实现解析

    Spring Cloud Gateway 服务网关 API 主流网关有NGINX.ZUUL.Spring Cloud Gateway.Linkerd等:Spring Cloud Gateway构建于 Spring 5+,基于 Spring Boot 2.x 响应式的.非阻塞式的 API.同时,它支持 websockets,和 Spring 框架紧密集成,用来代替服务网关Zuul,开发体验相对来说十分不错. Spring Cloud Gateway 是 Spring Cloud 微服务平台的一个子

  • Spring Cloud Ribbon的踩坑记录与原理详析

    简介 Spring Cloud Ribbon 是一个基于Http和TCP的客服端负载均衡工具,它是基于Netflix Ribbon实现的.它不像服务注册中心.配置中心.API网关那样独立部署,但是它几乎存在于每个微服务的基础设施中.包括前面的提供的声明式服务调用也是基于该Ribbon实现的.理解Ribbon对于我们使用Spring Cloud来讲非常的重要,因为负载均衡是对系统的高可用.网络压力的缓解和处理能力扩容的重要手段之一.在上节的例子中,我们采用了声明式的方式来实现负载均衡.实际上,内部

  • JavaScript 图片切换展示效果alibaba拓展版第1/3页

    首先需要一个容器,设置它的overflow为hidden,position为relative: 容器里面还要一个滑动对象,设置它的position为absolute: 在initialize()函数里初始化一些属性. 在切换之前先执行Start()函数,进行相关设置, 主要是设置Index属性(索引)和_target属性(目标值): 复制代码 代码如下: if(this.Index < 0){ this.Index = this._count - 1; } else if (this.Index

  • Spring Cloud Alibaba教程之Sentinel的使用

    什么是Sentinel Sentinel,中文翻译为哨兵,是为微服务提供流量控制.熔断降级的功能,它和Hystrix提供的功能一样,可以有效的解决微服务调用产生的"雪崩"效应,为微服务系统提供了稳定性的解决方案.随着Hytrxi进入了维护期,不再提供新功能,Sentinel是一个不错的替代方案.通常情况,Hystrix采用线程池对服务的调用进行隔离,Sentinel才用了用户线程对接口进行隔离,二者相比,Hystrxi是服务级别的隔离,Sentinel提供了接口级别的隔离,Sentin

  • Spring Cloud Alibaba 使用 Feign+Sentinel 完成熔断的示例

    Feign的使用 Feign也是网飞开发的,SpringCloud 使用 Feign 非常简单,我下边演示一下: 首先 服务消费者这边肯定需要一个对应的依赖: compile("org.springframework.cloud:spring-cloud-starter-openfeign") 需要启用Feign的话,也得在启动类上面加个注解 @EnableFeignClients 然后,创建一个 Feign 的接口,像这样子 package com.skypyb.sc.feign;

  • spring cloud学习教程之config修改配置详解

    之前我们讲过了spring cloud之config配置的相关内容,那么在Git端修改配置后如何让客户端生效?下面来一起看看详细的介绍吧. 访问接口修改 refresh post方式执行http://localhost/refresh 会刷新env中的配置 restart 如果配置信息已经注入到bean中,由于bean是单例的,不会去加载修改后的配置 需要通过post方式去执行http://localhost/restart, 需要通过application.properties中配置endpo

  • Spring Cloud学习教程之Zuul统一异常处理与回退

    前言 Zuul 是Netflix 提供的一个开源组件,致力于在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架.也有很多公司使用它来作为网关的重要组成部分,碰巧今年公司的架构组决定自研一个网关产品,集动态路由,动态权限,限流配额等功能为一体,为其他部门的项目提供统一的外网调用管理,最终形成产品(这方面阿里其实已经有成熟的网关产品了,但是不太适用于个性化的配置,也没有集成权限和限流降级). 本文主要给大家介绍了关于Spring Cloud Zuul统一异常处理与回退的相关内容,分享出来供大家

  • Spring Cloud学习教程之DiscoveryClient的深入探究

    前言 当我们使用@DiscoveryClient注解的时候,会不会有如下疑问:它为什么会进行注册服务的操作,它不是应该用作服务发现的吗?下面我们就来深入的探究一下其源码. 一.Springframework的LifeCycle接口 要搞明白这个问题我们需要了解一下这个重要的接口: /* * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (

  • Spring Cloud入门教程之Zuul实现API网关与请求过滤

    简介 Zuul是Netflix基于JVM的路由器和服务器端负载均衡器.最常用的场景是替换Nginx反向代理后台微服务供前端UI访问. Zuul使用Ribbon来定位一个通过发现转发的实例,所有请求都以hystrix命令执行,所以故障将显示在Hystrix指标中. 注:Zuul不包括发现客户端,因此对于基于服务ID的路由,需要在类路径中提供其中一个路由 Zuul是Spring Cloud提供的api网关和过滤组件,它提供如下功能: 认证 过滤 压力测试 Canary测试 动态路由 服务迁移 负载均

  • Spring Cloud Alibaba整合Sentinel的实现步骤

    一.需求 实现一个简单的 整合 sentinel,不涉及sentinel的用法 二.实现步骤 1.下载 sentinel dashboard https://github.com/alibaba/Sentinel/releases 注意: 默认会启动8080端口,如果端口冲突,可以在启动命令上加入 -Dserver.port=新端口 默认用户名和密码[sentinel/sentinel] 启动控制台可用的配置项 2.服务提供者和消费者引入sentinel依赖 <dependency> <

  • Spring Cloud Alibaba之Sentinel实现熔断限流功能

    微服务中为了防止某个服务出现问题,导致影响整个服务集群无法提供服务的情况,我们在系统访问量和业务量高起来了后非常有必要对服务进行熔断限流处理. 其中熔断即服务发生异常时能够更好的处理:限流是限制每个服务的资源(比如说访问量). spring-cloud中很多使用的是Hystrix组件来进行限流的,现在我们这里使用阿里的sentinel来实现熔断限流功能. sentinel简介 这个在阿里云有企业级的商用版本 应用高可用服务 AHAS:现在有免费的入门级可以先体验下,之后再决定是否使用付费的专业版

  • 浅谈如何在项目中使用Spring Cloud Alibaba Sentinel组件

    目录 Sentinel 是什么 Sentinel与Hystrix的区别 Sentinel分为两大部分: 一.控制台(Dashboard) 二.搭建客户端 1.在自己的项目中引入依赖 2.编辑项目中的 application.yml或者bootstrap.yml文件 3.资源是 Sentinel 中的一个关键概念.它可以是任何东西,例如服务.方法,甚至是代码片段. 三.查看接口的流量的详情 1.实时监控 2.簇点链路 3.等等:其他使用方法有待发掘 Sentinel 是什么 随着微服务的流行,服务

随机推荐