Sentinel详细使用步骤

656人浏览 / 0人评论 / 添加收藏

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel是面向分布式服务架构的流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来帮助您保障微服务的稳定性。

sentinel具有以下特征:

丰富的应用场景: Sentinel承接了阿里巴巴近十年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围),消息削峰填谷,集群流量控制,实时熔断下游不可用应用等

完美的实时监控: Sentinel同时提供实时的监控功能,您可以在控制台看到接入应用的单台机器秒级数据,甚至500台一下规模的集群的汇总运行情况

广泛的开源生态: Sentinel提供开箱即用的与其他框架/库的整合模块,例如与SpringCloud,Dubbo,gRPC的整合,您只需要引入响应的依赖并进行简单的配置即可快速接入Sentinel

完美的SPI扩展点: Sentinel提供简单易用的,完美的SPI扩展接口,可以通过实现扩展接口来快速定制逻辑,例如定制规则管理,适配动态数据源等。


所以出现熔断、降级、限流策略解决这类问题。

一、什么是熔断、降级、限流
1.熔断(拒绝调用)
 服务熔断,当某服务出现不可用或响应超时的情况时,为了防止整个系统出现雪崩,暂时停止对该服务的调用。

停止是说,当前服务一旦对下游服务进行熔断,当请求到达时,当前服务不再对下游服务进行调用,而是使用设定好的策略(如构建默认值)直接返回。

暂时是说,熔断后,并不会一直不再调用下游服务,而是以一定的策略(如每分钟调用 10 次,若均返回成功,则增大调用量)试探调用下游服务,当下游服务恢复可用时,自动停止熔断。

2.降级(拒绝非核心请求)
 降级是指当自身服务压力增大时,采取一些手段,增强自身服务的处理能力,以保障服务的持续可用。比如,下线非核心服务以保证核心服务的稳定、降低实时性、降低数据一致性。

 为了预防某些功能出现负荷过载或者响应慢的情况,在其内部暂时舍弃一些非核心接口和数据的请求(如评论、积分),而直接返回一个提前准备好的 fallback(退路) 错误处理信息。释放CPU和内存资源,以保证整个系统的稳定性和可用性。

3.限流(限制请求量)
 限流是指上游服务对本服务请求 QPS 超过阙值时,通过一定的策略(如延迟处理、拒绝处理)对上游服务的请求量进行限制,以保证本服务不被压垮,从而持续提供稳定服务。常见的限流算法有滑动窗口、令牌桶、漏桶等。

二、怎么使用Sentinel?
1.熔断、降级、限流方案对比


2.Sentinel介绍
 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

Sentinel 分为两个部分:

核心库(Java 客户端)不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。
控制台(Dashboard)基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器。
Sentinel 可以简单的分为 Sentinel 核心库和 Dashboard。核心库不依赖 Dashboard,但是结合 Dashboard 可以取得最好的效果。

3. 基本概念及作用
基本概念:

资源:是 Sentinel 的关键概念。它可以是 Java 应用程序中的任何内容,例如,由应用程序提供的服务,或由应用程序调用的其它应用提供的服务,甚至可以是一段代码。在接下来的文档中,我们都会用资源来描述代码块。

只要通过 Sentinel API 定义的代码,就是资源,能够被 Sentinel 保护起来。大部分情况下,可以使用方法签名,URL,甚至服务名称作为资源名来标示资源。

规则:围绕资源的实时状态设定的规则,可以包括流量控制规则、熔断降级规则以及系统保护规则。所有规则可以动态实时调整。

主要作用:

流量控制
熔断降级
系统负载保护
我们说的资源,可以是任何东西,服务,服务里的方法,甚至是一段代码。使用 Sentinel 来进行资源保护,主要分为几个步骤:

定义资源
定义规则
检验规则是否生效
先把可能需要保护的资源定义好,之后再配置规则。也可以理解为,只要有了资源,我们就可以在任何时候灵活地定义各种流量控制规则。在编码的时候,只需要考虑这个代码是否需要保护,如果需要保护,就将之定义为一个资源。

4.Sentinel应用
官方文档:https://github.com/alibaba/spring-cloud-alibaba/wiki/Sentinel

4.1 Sentinel控制台搭建
下载对应的jar包:https://github.com/alibaba/Sentinel/releases 下载适合自己的版本

通过命令行启动:

java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar

启动后需要输入账号密码:sentinel sentinel

登录成功后看到的页面

4.2 服务监控
 如果我们需要把自己的服务被Sentinel监控,那么我们需要添加对应的依赖

       <dependency>
           <groupId>com.alibaba.cloud</groupId>
           <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
       </dependency>

然后需要添加对应的属性信息

然后我们访问请求后,在控制台就可以看到对应的监控信息了

然后我们可以指定简单的限流规则

表示1秒中内只能有一个QPS,超过就限流

测试我们发送请求快一点就会出现限流的处理。

4.3 实时监控
 实时监控这块需要引入Acuator

<dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-actuator</artifactId>
       </dependency>
endpoint端点:

4.4 限流信息自定义
@Component
public class SentinelUrlBlockHandler implements BlockExceptionHandler {
   @Override
   public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, BlockException e) throws Exception {
       R r = R.error(500,"访问太快,稍后再试!");
       httpServletResponse.setContentType("application/json;charset=UTF-8");
       httpServletResponse.getWriter().write(JSON.toJSONString(r));
   }
}


5.sentinel容器安装
 直接在windows中安装Sentinel启动管理还是不太方便,所以我们还是把Sentinel安装在Docker容器中

拉取对应的镜像文件

docker pull bladex/sentinel-dashboard:1.7.2

启动容器

docker run --name sentinel  -d -p 8858:8858 -d  bladex/sentinel-dashboard:tagname

开机自启动

docker update --restart=always sentinel

访问:

对应的客户端的使用:需要调整的配置信息

6.Sentinel监控所有服务
 我们需要对每一个服务都添加Sentinel的配置。

7.熔断降级
https://github.com/alibaba/spring-cloud-alibaba/wiki/Sentinel

1.添加对应的配置

2.添加托底的方法

手动配置:客户端的Sentinel版本需要和服务器的版本要保持一致。

全部评论