Sentinel控制台的功能主要包括:流量控制、降级控制、热点配置、系统规则和授权规则等

# 安装sentinel的控制台

## 下载地址
Sentinel控制台下载地址:

  https://github.com/alibaba/Sentinel/releases
  版本自己选择

# 启动控制台
到sentinel所在的目录运行下面的命令:
  java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-版本号.jar
启动之后访问localhost:8080;登录即可用户名和密码默认是sentinel

登录之后看到左侧的菜单只有默认的一个;因为现在sentinel还没有发现其他机器

# 客户端搭建--sc

基于spring-cloud的项目来搭建一个sentinel客户端

1、加入spring-cloud的sentinel依赖

  1. ```
  2. <dependency>
  3. <groupId>com.alibaba.cloud</groupId>
  4. <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
  5. </dependency>
  6. ```

2、建立一个controller

  1. package com.shadow.web;
  2.  
  3. import org.springframework.web.bind.annotation.GetMapping;
  4. import org.springframework.web.bind.annotation.RestController;
  5.  
  6. @RestController
  7. public class UserController {
  8.  
  9. @GetMapping("login")
  10. public String login() throws InterruptedException {
  11. System.out.println("login----");
  12. return "success";
  13. }
  14.  
  15. @GetMapping("log")
  16. public String log(){
  17. System.out.println("log----");
  18. return "success";
  19. }
  20.  
  21. }

3、yml配置

  1. ```
  2. server:
  3. port: 9000
  4. spring:
  5. application:
  6. name: register-server
  7. sentinel:
  8. transport:
  9. port: 8719 #如果加了客户端他就会开启一个 http server 为了dashboard 能够发过来
  10. dashboard: localhost:8080
  11. ```

spring.cloud.sentinel.transport.dashboard——sentinel控制台的ip和端口地址

spring.cloud.sentinel.transport.port——sentinel客户端和控制台通信的端口

然后启动项目;继而访问localhost:8080/login;跟着刷新sentinel的控制台可以看到sentinel已经发现了我们的项目server-register

并且可以在簇点链路中看到刚刚那个请求

接下来就对这个请求进行流控、降级、授权、热点等配置等等配置了;先来介绍如何添加流控吧;点击+流控的按钮

怎么配置呢?首先了解这概念吧

# sentinel 术语
1、资源:标识资源的唯一名称,springboot项目默认为controller当中的请求路径,也可以在客户端中使用SentinelResource配置;比如你有个service当中的xx方法;你想对这个xx方法进行流控那么这个xx方法必须是一个资源;

2、针对来源:Sentinel可以针对服务调用者进行限流,填写微服务名称即spring.application.name,默认为default,不区分来源

3、阈值类型、单机阈值

QPS——每秒钟的请求数量,当调用该资源的QPS达到阈值的时候,进行限流;
线程数——当调用该资源的线程数达到阈值的时候,进行限流

4、是否集群:默认不集群;

5、流控模式:

直接:当资源调用达到限流条件的时,直接限流;
关联:当关联的资源请求达到阈值的时候,限流自己;
链路:下节课说

6、流控效果:

快速失败:直接失败;
Warm Up:根据冷加载因子默认值为3的值,从阈值/3,经过预热时长,才达到设置的QPS阈值;
排队等待:匀速排队,让请求匀速通过,阈值类型必须设置为QPS,否则无效

# QPS直接失败

上面设置的效果是,1秒钟内请求/login资源的次数达到1次以上的时候,进行限流

## 效果演示
首先一秒请求一次login没有问题;然后发挥你手速;一秒超过一次之后页面返回Blocked by Sentinel (flow limiting);如果手速不够多练练吧——总归有办法的

....

# 线程数直接失败

把login方法让其睡眠一秒;因为无论你单身多少年;你的手速不可能超过计算机;所以在刷新的情况下永远只有一个线程;如果让他睡眠1秒;这样就能模拟出来服务器这边开多个线程来处理的场景了;

  1. ```
  2. @GetMapping("login")
  3. public String login() throws InterruptedException {
  4. System.out.println("login----");
  5. Thread.sleep(1000);
  6. return "success";
  7. }
  8. ```

改完之后重启你的项目,然后先访问一次login;因为你重启之后sentinel控制台这边就检测不到了;需要重新访问一次;跟着添加流控规则

## 效果演示
首先慢慢刷新login请求;——等睡眠时间过;服务器永远只有一个线程,发觉没问题;但是你疯狂在地址栏里面点击回车(注意不要去刷新,因为刷新是会等到服务器返回之后才能点击;所以效果演示不出来,最好是点击回车在地址栏)就会失败

...

# 流控模式关联

首先把login方法当中的睡眠删除;然后重启项目,访问一下login;继而去配置流控规则

上述配置当1秒内访问/log的次数大于2的时候,限流/login

效果演示使用postman来密集访问/log(QPS=3),然后我们手动浏览器请求/login,看看效果...。postman的如下图

## 效果演示

在外面没有启动postman的时候 访问login没有问题;当我们启动postman之后 log的qps达到了阈值;这个时候再去访问login 被限流了、、、

# 预热Warm Up

Warm Up——预热/冷启动方式。当系统长期处于低访问量的情况下,流量突然增加时,可能瞬间把系统压垮。通过warm up方式,让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给冷系统一个预热的时间,避免问题

即请求QPS从 阈值 10/ 3 开始,经预热时长(10s)逐渐升至设定的QPS阈值(10)

## 效果演示
假设一开始我们疯狂刷新(让QPS大于3) 讲道理一般人的手速可以达到;你会看到被限流了;但是经过10s之后再也不会出错了;因为人的极限不可能1秒点到10次;如果哪位兄弟10s之后还能点击出现限流;请你私聊我。。。

限流效果图:

Sentinel使用的更多相关文章

  1. Redis集群~windows下搭建Sentinel环境及它对主从模式的实际意义

    回到目录 关于redis-sentinel出现的原因 Redis集群的主从模式有个最大的弊端,就是当主master挂了之前,它的slave从服务器无法提升为主,而在redis-sentinel出现之后 ...

  2. Redis Sentinel集群配置中的一些细节

    今天在配置Redis集群,用作Tomcat集群的缓存共享.关于Redis集群的配置网上有很多文章,这里只是记录一下我在配置过程中遇到的一些小的细节问题. 1. 关于Protected Mode的问题 ...

  3. redis 集群热备自动切换sentinel配置实战

    ---恢复内容开始--- Redis SentinelSentinel(哨兵)是用于监控redis集群中Master状态的工具,其已经被集成在redis2.4+的版本中一.Sentinel作用:1): ...

  4. Redis Sentinel 高可用实现说明

    背景:      前面介绍了Redis 复制.Sentinel的搭建和原理说明,通过这篇文章大致能了解Sentinel的原理和实现方法以及相关的搭建.这篇文章就针对Redis Sentinel的搭建做 ...

  5. Redis 复制、Sentinel的搭建和原理说明

    背景: Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端) ...

  6. Redis Sentinel机制与用法说明【转】

    本文来自:https://segmentfault.com/a/1190000002680804 概述 Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Ma ...

  7. 24.Redis2.8主从集群sentinel

    0.集群架构(此处只说两种;本文2种,避免sentinel成为单节点) 第一种: 第二种: 1.下载redis2.8.x版本,2.8.x都是稳定版 redis-2.8.24.tar.gz 2.解压,安 ...

  8. 基于sentinel 的redis集群环境搭建

    环境信息,三台机器,一台master,两台slave,每台机器上启动一个sentinel master 192.168.1.106 slave1 192.168.1.102 slave2 192.16 ...

  9. redis sentinel基本命令与参数

    1.redis基本命令1)获取sentinel的状态(1)info查看sentinel的状态(2)sentinel masters 获取sentinel中监控的所有master的节点(3)sentin ...

  10. Redis多机常用架构-sentinel

    哨兵经典架构 sentinel结构 哨兵工作原理 Sentinel 通过配置文件发现Master,如下: Sentinel 通过向Master发送 INFO 命令来自动获得所有Slave的地址 跟Ma ...

随机推荐

  1. linux7手动添加systemctl启动程序

    1.路径 [root@angrymushrooms01 system]# pwd /usr/lib/systemd/system 2.脚本内容 vim xxx.service ------------ ...

  2. 关于手机数码圈KOL的一两点感想

    复工以来,高峰时段9号线地铁上的人依旧不少,安全距离啥的肯定是不用想了,只是从原来的4G手机换成5G手机以后在某些站能接收到5G信号,我终于能在一些原来根本没信号的站里愉快的刷一刷微博和酷安了. 但是 ...

  3. Java—转换流、字符缓冲流

    转换流 OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节.它的作用的就是,将字符串按照指定的编码表转成字节,在使用字节流将这些字节写 ...

  4. NeuralCoref: python的共指消解工具教程

    转载地址 https://blog.csdn.net/blmoistawinde/article/details/81782971 共指消解 首先简要地说说共指消解是什么,有什么用处.假设机器正在阅读 ...

  5. SSRF 跨站请求伪造学习笔记

    参考文章: 了解SSRF,这一篇就足够了 SSRF 学习之路 SSRF绕过方法总结 Weblogic SSRF漏洞 What-是什么 SSRF(Server-Side Request Forgery) ...

  6. 如何去除List集合中的重复元素?

    一.问题由来 在实际开发的时候,我们经常会碰到这么一个问题:一个集合容器里面有很多重复的对象,里面的对象没有主键,或者说忽略主键,根据业务的需求,我们需要根据条件筛选出没有重复的对象. 二.去重操作 ...

  7. linux下的scp传输文件

    转载于:http://moyu2010.blog.163.com/blog/static/177439041201112710243064/,再次谢谢作者. 1.功能说明scp就是security c ...

  8. 使用VS开发的一个开机自启动启动、可接收指定数据关闭电脑或打开其他程序

    使用VS开发的一个开机自启动启动.可接收指定数据关闭电脑或打开其他程序需要注意的几点 为了能够在其他电脑上运行自己写的程序,需要在VS改一下编译的运行库.(项目->属性->配置属性-> ...

  9. edge 修改链接打开方式

    我目前的edge版本是 Version 84.0.522.63 (Official build) (64-bit) 每次点击链接, 都是默认在原页面打开新标签, 不符合过往习惯. 修改方式 打开控制面 ...

  10. Java中一个普通的循环为何从10开始到99连续相乘会得到0?

    这是一块非常简单的Java代码片段: public class HelloWorld{ public static void main(String []args){ int product = 1; ...