1.安装

1.1 docker安装

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

1.2 jar 安装

java -jar sentinel-dashboard-1.8.4.jar

1.3 登录

账号和密码都是sentinel

2.集成

Sentinel控制台修改规则:仅存在于服务的内存中,不会修改Nacos中配置值,重启后恢复原来的值 Nacos控制台修改规则:Nacos持久化规则,服务的内存也同步更新

2.1 pom 配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>cloud2020</artifactId><groupId>com.lys.springcloud</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>cloud-sentinel-service</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><!--<version>2.2.1.RELEASE</version>--></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!--  web组件      --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- SpringCloud alibaba sentinel-datasource-nacos,后续做持久化用到 --><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency></dependencies>
</project>

2.2 bootstrap.yml

规则没有持久化,需要自行配置

server:port: 8002nacos:config:bootstrap:log:enable: truespring:application:name: nacos-sentinel-servicecloud:nacos:discovery:server-addr: 10.6.8.238:8848 #Nacos作为服务注册中心地址config:server-addr: 10.6.8.238:8848 #Nacos作为配置中心地址file-extension: yaml #指定yaml格式的配置group: DEFAULT_GROUP #指定在哪个group里namespace:
# {spring.application.name}-{spring.profiles.active}.{spring.cloud.nacos.config.file-extension}
# 实际访问的配置nacos-payment-provider.yamlsentinel:filter:url-patterns: /**transport:#配置sentinel,dashboard地址dashboard: 10.6.8.238:8858#默认8719端口,假如被占用会自动从8719开始依次+1扫描,直至找到未被占用的端口port: 8719#clientIp: 10.7.0.25

规则持久化配置

server:port: 8002nacos:config:bootstrap:log:enable: truespring:application:name: nacos-sentinel-servicecloud:nacos:discovery:server-addr: 10.6.8.238:8848 #Nacos作为服务注册中心地址config:server-addr: 10.6.8.238:8848 #Nacos作为配置中心地址file-extension: yaml #指定yaml格式的配置group: DEFAULT_GROUP #指定在哪个group里namespace:
# {spring.application.name}-{spring.profiles.active}.{spring.cloud.nacos.config.file-extension}
# 实际访问的配置nacos-payment-provider.yamlsentinel:filter:url-patterns: /**transport:#配置sentinel,dashboard地址dashboard: 10.6.8.238:8858#默认8719端口,假如被占用会自动从8719开始依次+1扫描,直至找到未被占用的端口port: 8719#clientIp: 10.7.0.25# 下面为持久化到nacosdatasource:# 这里的flow名字随便取   流控规则flow:nacos:server-addr: ${spring.cloud.nacos.discovery.server-addr}groupId: DEFAULT_GROUPdataId: ${spring.application.name}-flow-rulesrule-type: flowdata-type: json# 授权规则authority:nacos:server-addr: ${spring.cloud.nacos.config.server-addr}dataId: ${spring.application.name}-authority-rulesgroupId: DEFAULT_GROUPdata-type: jsonrule-type: authority# 降级规则degrade:nacos:server-addr: ${spring.cloud.nacos.config.server-addr}dataId: ${spring.application.name}-degrade-rulesgroupId: DEFAULT_GROUPdata-type: jsonrule-type: degrade# 热点规则param-flow:nacos:server-addr: ${spring.cloud.nacos.config.server-addr}dataId: ${spring.application.name}-param-flow-rulesgroupId: DEFAULT_GROUPdata-type: jsonrule-type: param-flow# 系统规则system:nacos:server-addr: ${spring.cloud.nacos.config.server-addr}dataId: ${spring.application.name}-system-rulesgroupId: DEFAULT_GROUPdata-type: jsonrule-type: system

nacos 增加对应的规则如:nacos-sentinel-service-flow-rules.json

[{"resource": "/testA","limitApp": "default","grade": 1,"count": 1,"strategy": 0,"controlBehavior": 0,"clusterMode": false},{"resource": "/testB","limitApp": "default","grade": 1,"count": 1,"strategy": 0,"controlBehavior": 0,"clusterMode": false}
]

resource:资源名称;
IimitApp:来源应用;
grade:國值类型,0表示线程数,1表示QPS;
count:单机阈值
strategy:流控模式,0表示直接,1表示关联,2表示链路
controlbehavior:流控效果,0表示快速失败,1表示 Warm Up,2表示排队等待;
cluster Mode:是否集群。

2.3 FlowLimitController

package com.lys.controller;import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.concurrent.TimeUnit;/*** @Auther: liuysh* @Date: 2022/7/20 21:55* @Description:*/
@RestController
@Slf4j
public class FlowLimitController {@GetMapping("/testA")public String testA() {return "testA";}@GetMapping("/testB")public String testB() {return "testB";}@GetMapping("/testC")public String testC() {try {TimeUnit.SECONDS.sleep(1);}catch(InterruptedException e) {e.printStackTrace();}log.info("testC,测试RT");return "testC";}@GetMapping("/testD")public String testD() {log.info("testD测试,异常比例");int age = 10/0;return "testD";}@GetMapping("/testE")public String testE() {log.info("testE测试,异常数");int age = 10/0;return "testE";}@GetMapping("/testHotKey")@SentinelResource(value = "testHotKey",blockHandler = "deal_testHotKey")public String testHotKey(@RequestParam(value = "p1",required = false) String p1,@RequestParam(value = "p2",required = false) String p2) {return "testHotKey";}public String deal_testHotKey(String p1, String p2, BlockException exception) {return "testHotKey的兜底方法deal_testHotKey执行";}
}

3.sentinel与hystrix对比

功能 Sentinel Hystrix 总结
隔离策略 信号量隔离(并发线程数限流)(模拟信号量) 线程池隔离/信号量隔离 Sentinel不创建线程依赖tomcat或jetty容器的线程池,存在的问题就是运行容器的线程数量限制了sentinel设置值的上限可能设置不准。比如tomcat线程池为10,sentinel设置100是没有意义的,同时隔离性不好hystrix使用自己创建的线程池,隔离性会更好
熔断降级策略 基于响应时间、异常比率、异常数 基于异常比率 快速失败的本质功能
实时统计实现 滑动窗口(LeapArray) 滑动窗口(基于 RxJava)
动态规则配置 支持多种数据源 支持多种数据源
扩展性 多个扩展点 插件的形式
基于注解的支持 支持 支持
限流 基于 QPS,支持基于调用关系的限流 有限的支持(并发线程数或信号量大小) 快速失败的本质功能
流量整形 支持预热模式、匀速器模式、预热排队模式 不支持(排队) 支持排队好吧
系统自适应保护 支持(仅对linux生效) 不支持 所谓的自适应就是设置一个服务器最大允许处理量的阈值。(有比没有强,但是要知道最大负载量是多少。)
控制台 提供开箱即用的控制台,可配置规则、查看秒级监控、机器发现等 简单的监控查看接近实时数据 控制台是非常有竞争力的功能,因为能集中配置限制数据更方便,但是展示数据和实时性没有hystrix直观。
配置持久化 ZooKeeper, Apollo, Nacos Git/svn/本地文件 Sentinel客户端采用直接链接持久化存储,应用客户端引用了更多的依赖,同样的存储链接可能有多个配置
动态配置 支持 支持 hystrix可能需要手动触发,sentinel增加了额外的端口进行配置文件控制,应该也支持spring boot动态配置
黑白名单 支持 不支持 个人觉得这个功能用的不是很多
springcloud集成 非常高 Spring boot使用hystrix会更方便
整体优势 集中配置设置及监控+更细的控制规则 漂亮的界面+接近实时的统计结果 集中配置可能更有吸引力,但是配置值是多少以及让谁控制依然是很头疼的事情。运维控制可能不知道哪个应该优先哪个不优先,应该调整到多大。什么时候更适合使用sentinel?个人认为docker容器化部署之后sentinel可能更会发挥作用,但是会有另外的竞品出现做选型。
  • sentinel本身支持qps(qps:每秒可以进来的请求数,只是进来,不管是否进来之后服务走完。只管进来不管出去。),不会创建线程池,比较轻;而远程调用服务的时候,hystrix调用一个方法就会创建一个线程池,所以hystrix特别重;

  • sentinel本身支持有qps,远程调用不会创建线程池,如果qps大,后面的服务处理不过来,所以就要进行限流降级处理;信号量隔离

  • hystrix远程调用会创建线程池,并且该线程池是依赖tomcat的,不会比tomcat线程多,即使多了也没意义。线程池隔离

  • 限流方案:qps 、线程数

springcloud集成sentinel 《微服务》相关推荐

  1. docker容器 eureka 集成_微服务:基于 Docker 的微服务架构之分布式企业级实践参考...

    编者按:本文分享自CSDN技术博客,作者为 FlyWine,所有权归原著者.若有不妥,联系本头条号以做必要处理. 目录 Microservice 和 Docker 服务发现模式 客户端发现模式 Net ...

  2. springboot springcloud区别_SpringCloud微服务全家桶-第一篇!为什么要用微服务

    从今天开始,学习SpringCloud微服务全家桶. 一.引导 1.什么是微服务? 2.微服务之间是如何独立通讯的 3.springCloud和Dubbo有哪些区别? 4.什么是服务熔断?什么是服务降 ...

  3. java框架之SpringCloud(2)-Rest微服务案例

    在上一章节已经对微服务与 SpringCloud 做了介绍,为方便后面学习,下面以 Dept 部门模块为例做一个微服务通用 Demo -- Consumer 消费者(Client) 通过 REST 调 ...

  4. 【学习日记2023.6.9】之 SpringCloud入门(认识微服务_服务拆分和远程调用RestTemplate_Eureka注册中心_Ribbon负载均衡_Nacos注册中心)

    文章目录 SpringCloud 1. 认识微服务 1.1 单体架构 1.2 分布式架构 1.3 微服务 1.4 SpringCloud 1.5 总结 2. 服务拆分和远程调用 2.1 服务拆分原则 ...

  5. SpringCloud(若依微服务版)读取Nacos中的配置以及多个服务共享Nacos配置的使用

    场景 若依微服务版手把手教你本地搭建环境并运行前后端项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/109363303 在上 ...

  6. springcloud Hystrix Dashboard微服务监控

    springcloud  Hystrix Dashboard微服务监控简介 Hystrix监控 除了隔离依赖服务的调用以外,Hystrix还提供了近实时的监控,Hystrix会实时.累加地记录所有关于 ...

  7. 给老板解释解释,为什么要用SpringCloud alibaba作为微服务开发框架???

    什么是微服务 提到微服务不得不提Martin Fowler在2014年3月25日发表的文章 Microservices,里面给出了微服务的定义.后续国内所有关于微服务的介绍都是基于这篇文章的翻译,或加 ...

  8. 为什么要用SpringCloud alibaba作为微服务开发框架?

    作者 | 飘渺Jam      责编 | 欧阳姝黎 什么是微服务 提到微服务不得不提Martin Fowler在2014年3月25日发表的文章 Microservices,里面给出了微服务的定义.后续 ...

  9. 你给我解释解释,为什么TMD非得选择SpringCloud alibaba作为微服务开发框架?

    什么是微服务 提到微服务不得不提Martin Fowler在2014年3月25日发表的文章 Microservices,里面给出了微服务的定义.后续国内所有关于微服务的介绍都是基于这篇文章的翻译,或加 ...

最新文章

  1. java接收数据_java 如何接收数据集参数
  2. mfc将文件内容引入编辑框_南开大学黄津辉教授团队联合加拿大麦克马斯特大学Ravi教授团队发表微型MFC水质传感器实际废水检测适用性的研究...
  3. python项目部署失败的原因_python项目环境部署(一)
  4. 在cmd环境下操作Oracle11g数据库
  5. 监控 WebBrowser 控件内容的改变
  6. 生产问题:一个线程罢工的诡异事件
  7. 工作中常用的但是又容易忽略的问题
  8. 【代码笔记】iOS-清除图片缓存UIActionSheet
  9. equal_range
  10. 在sqlserver中使用事务的注意事项
  11. linux c创建文件错误的是,在linux下创建一个类怎么出现会出现这种错误,我感觉是没有错误的,那位高手过来看看...
  12. jsp框架html,GUI构建:[jsp风格的框架通常]对由模板生成的HTML代
  13. 51单片机延时与按钮响应时间答复:模拟发动机工作http://www.51hei.com/bbs/dpj-163192-1.html
  14. Java设计模式之工厂模式最详解(类图+源码)
  15. 三坐标检测之报告查看T值
  16. 计算机管理的显卡驱动,显卡驱动,教您显卡驱动怎么安装
  17. mac支持fat32格式吗 mac支持什么格式的移动硬盘
  18. python切片练习(League of Legends)
  19. jQuery 遍历 - closest() 方法 is()方法
  20. 事务四大特征:(原子性、一致性、隔离性、持久性)

热门文章

  1. execjs 调用js出现找不到windows对象
  2. Java方法反射的实现原理
  3. Java反射原理和实际用法
  4. Java 中的反射原理
  5. 实时操作系统与分时操作系统(或称非实时操作系统)的区别
  6. Adobe Flashplayer orHTML5 Browser with WebGL or CSS3D support required 解决方案
  7. 数据结构:递归算法时间复杂度与空间复杂度计算方法
  8. python 的math函数库
  9. [读书笔记]多线程学习笔记
  10. win10彻底关闭windows defender,解决无故占用大量CPU问题