spring cloud alibaba小白教程系列之(三)Sentinel的搭建与使用

·  阅读 1139

spring cloud alibaba小白教程系列之(三)Sentinel的搭建与使用

先扯两句,不知道掘友们有没有发现,在掘金社区里全都大神,而且有意思的是,通过观察每个大神的头像,我才惊奇的发现,现在在社区里缺少师傅二师兄沙师弟。求组队一起升级打怪兽。哈哈!!!!!!

声明:本人不是大神,还占用了大师兄真是惭愧。我就是技术界的小白,希望能成为技术大神,梦想还是要有的,万一实现了那,哈哈哈!!!

前言

先简单说一下sentinel是什么,能干些什么。这里引用 sentinel官网

Sentinel是分布式系统的流量防卫兵。

Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

sentinel其实就是相当于spring cloud中的Hystrix。

sentinel分为两个部分:

  • 核心库(java客户端):不依赖任何框架/库,能够运行于所有的java运行的环境,同时对Dubbo、spring cloud等框架也有较好的支持。
  • 控制台(Dashboard):基于spring boot开发,打包后可以直接运行,不需要额外的Tomcat等应用容器。

下载与安装

下载

下载地址:sentinel 1.7.2 版本

sentinel的下载与nacos一样,下载后的都是可以直接运行的jar包,都是基于spring boot开发。

安装

注意:sentinel默认会使用8080端口,如果想使用其它端口可以使用命令:

  • java -Dserver.port=8081 -jar sentinel-dashboard-1.7.2.jar 来指定端口。

运行启动sentinel,然后输入http://loalhost:8080 我这里使用的是默认端口,启动成功会看到如下截图,用户名和密码都是snetienl

image-20200607163008125
image-20200607163008125

登陆成功后会显示:

image-20200607163048598
image-20200607163048598

到这里就证明sentinel安装成功了。接下来我们来搭建项目来使用sentinel。

说明:页面上什么也没有,也说明这个页面是实时收集数据的。

新建module

本文之直接新建module,方便演示,也为了和其它demo区分开。如果是真实项目可以直接在项目中改造。创建module就不多说了,如果还不会的小伙伴可以看我之前的写的教程。

修改pom

修改pom.xml文件,增加配置,如下:

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

<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-alibaba-sentinel</artifactId>
</dependency>
复制代码

改yaml配置

修改application.yml配置文件,如下:

server:
  port: 8801

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

    sentinel:
      transport:
        dashboard: 127.0.0.1:8080 # sentinel地址
        port: 8179 # 默认8179 如果被占用会自动加1依次开始扫描,直到找到未注册端口
  application:
    name: sentinel-server

management:
  endpoints:
    web:
      exposure:
        include: '*'
复制代码

修改启动类

启动类增加@EnableDiscoveryClient注解

增加业务测试类

创建业务测试类TestController。随便写两个测试方法。

/**
 * @author fujie.feng
 * @Date 2020-05-25
 */
@RestController
public class TestController {

 @GetMapping("/test")
 public String test() {
  return "success";
 }

 @GetMapping("/app")
 public String testApp() {
  return "app";
 }
 
}
复制代码

测试验证

启动新建的module,前提是先启动nacos和sentinel。

访问新增的业务类测试地址,http://localhost:8801/test 和 http://localhost:8801/app, 然后我们刷新sentinel的页面就可以看到如下截图,

image-20200607223350643
image-20200607223350643

到此,sentinel就搭建完成了。

简单使用sentinel

流控规则

先简单说明一下流控规则:

资源名:唯一名称,默认请求路径。

针对来源:sentinel可以针对调用者进行限流,填写微服务名称,默认default(不区分来源)。

阈值类型/单机阈值:

  • QPS:每秒钟的请求数量,当调用该api的QPS达到阈值的时候,进行限流
  • 线程数:当调用该api的线程数达到阈值的时候,进行限流。

是否集群:不需要集群

流控模式:

  • 直接:api达到限流条件时,直接限流。
  • 关联:当关联的资源达到阈值时,就限流自己
  • 链路:只记录指定链路上的限流(指定资源从入口资源进来的流量,如果达到阈值,就进行限流)(api级别的针对来源)

流控效果:

  • 快速失败:直接失败,抛异常。
  • Warm Up:根据codeFactor(冷加载因子,默认3)的值,从阈值/codeFactor,经过预热时长,才达到设置的QPS阈值。

新建流控规则

增加流控规则有两种方式,一种是在簇点联路中列出来的列表信息中直接编辑,另一种是在流控规则中直接添加,这里采用第二种方式,在流控规则中直接增加,如果所示:

image-20200607230032029
image-20200607230032029

可以按照截图中的顺序依次操作。

我这里流控的是/test 请求,阈值类型选择的是QPS,单机阈值是1。

image-20200607230348662
image-20200607230348662

流控规则说明:/test每次只能请求一次

验证规则

这时,我们可以访问http://localhost:8801/test,结果如下图所示

image-20200607230534468

然后我们可以快速刷新这个页面,来看一下流控效果,如下图所示:

image-20200607230714253

页面返回了Blocked by Sentinel(flow limiting),意思就是说,请求被sentinel阻止。说明我们设置的流控规则已经生效了。

我们这个时候也可以访问http://localhost:8801/app (没有设置流控规则),然后多刷新页面几次,会看到每次请求都是成功的。

这里就不过多演示其它功能,操作还是比较简单,小伙伴可以自行操作。

对比Hystrix

这里简单对比一下hystrix:

Hystrix

  1. 需要我们自己手工搭建监控平台
  2. 没有一套web界面可以给我们进行更加细粒化配置流空,速率控制、服务熔断、服务降级等。

Sentinel

  1. 单独组件,可以独立出来。
  2. 直接界面化细粒度的统一配置。

总结

本文简单介绍了sentinel的使用和搭建过程,总体来说还是很简单的。

源码地址


spring cloud alibaba小白系列搭建教程:

分类:
阅读
标签:
分类:
阅读
标签:
收藏成功!
已添加到「」, 点击更改