SpringCloud Alibaba Sentinel服务流控快速入门

简介: SpringCloud Alibaba Sentinel服务流控快速入门

Sentinel

Sentinel是什么

独立于项目外的 服务流量控制台,可以用于熔断 防止服务崩溃无响应,服务重启,流量限制等

1.png


能做什么 针对于什么场景

sentinel给我们带来的服务


Sentinel 独立于项目外,开箱即用

控制台可以可视化的实时监控和服务规则配置

可以无缝配合cloud的注册中心 最佳匹配 nacos,也可以使用其他的如 Eureka apollo zookeeper等

解决了什么场景问题


服务雪崩

服务降级

服务熔断

服务限流

2.png


如何获取

下载地址 :sentinel下载地址

文档地址 :sentinel文档地址


Sentinel 组件由两部分组成


使用sentinel的服务

sentinel的服务控制台

安装环境我们只需要有 java 8 以上就可以了

下载完成之后,直接运行java -jar 启动查看即可

java -jar sentinel-dashboard-1.7.0.jar


我们只需要访问 默认的启动端口就可以看到 sentinel的控制台了

账号和密码均为 :sentinel


演示工程 8401

我们主要以介绍sentinel实战,对于演示工程,选核心部分展示

核心依赖

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <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>

演示项目配置


server:
  port: 8401
spring:
  application:
    name: cloudalibaba-sentinel-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    sentinel:
      transport:
        dashboard: localhost:8080
        port: 8719  #默认8719,假如被占用了会自动从8719开始依次+1扫描。直至找到未被占用的端口
management:
  endpoints:
    web:
      exposure:
        include: '*'

编写一个controller 来演示

@RestController
public class FlowLimitController
{
    @GetMapping("/testA")
    public String testA() {
        return "------testA";
    }
    @GetMapping("/testB")
    public String testB() {
        return "------testB";
    }
}

之后启动nacos和 sentinel 这个时候你访问sentinel 会发现什么也没有

为什么?

应为 sentinel是懒加载的,我们访问其中一个方法,就会在sentinel中看到我们项目

3.png


流控规则

基础流控

我们可以看到面板

4.png


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


针对来源: Sentinel可以针对调用者进行限流,填写微服务名,默认default (不区分来源)阈值类型/单机阈值:


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


是否集群:不需要集群


流控模式:


直接: api达到限流条件时,直接限流

关联:当关联的资源达到阈值时,就限流自己

链路:只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,就进行限流)【api级别的针对来源】

流控效果:


快速失败:直接失败,抛异常

Warm Up:根据codeFactor (冷加载因子,默认3)的值,从阈值codeFactor,经过预热时长,才达到设置的QPS阈值

排队等待:匀速排队,让请求以匀速的速度通过,阈值类型必须设置为QPS,否则无效


直接失败

快速失败,配置如下:

5.png



之后我们快速访问 testa 就会发现 Blocked by Sentinel (flow limiting)

触发了 sentinel的默认提示

6.png


关联

当关联的资源达到阈值时,就限流自己

7.png

只要我们访问b 超过了 qps a就会把自己限流


高级配置

预热 Warm Up

**Warm Up ( RuleConstant.CONTROL_BEHAVIOR_UARM_uP)**方式,即预热/冷启动方式。当系统长期处于低水位的情况下,当流量突然增加时,直接把系统拉升到高水位可能瞬间把系统压垮。通过"冷启动”,让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给冷系统一个预热的时间,避免冷系统被压垮。详细文档可以参考流量控制-Warm Up文档,具体的例子可以参见

WarmUpFlowDemo。


公式:阈值除以coldFactor(默认值为3),经过预热时长后才会达到阈值

默认coldFactor为3,即请求QPS从threshold/3开始,经预热时长逐渐升至设定的QPS阈值。


适合应用场景

大量数据情况 : 如秒杀

8.png5.png


这里设置好之后,我们去访问,会发现,当到了阈值之后,慢慢的还是可以访问,直到10

排队等待

匀速排队

匀速排队( RuleConstant.CONTROL_BEHAVIOR_RATE_LTIMITER)方式会严格控制请求通过的间隔时间,也即是让请求以均匀的速度通过,对应的是漏桶算法。详细文档可以参考流星控制–匀速器模式,具体的例子可以参见PaceFlowDemo。

10.png


11.png

匀速排队,阈值必须设置为QPS

在一定时间内,逐渐处理进入到的请求,而不是第一时间拒绝请求


总结

Sentinel这个控制台,十分到强大,给我们带来了很多很多可以使用的服务规则,我们这里主要介绍了流控,这只是Sentinel的冰山一角,

12.png



Sentinel 可以看到,还有很多模块可以根据不同的场景和需求是了解,


相关文章
|
3月前
|
存储 数据可视化 Java
基于MicrometerTracing门面和Zipkin实现集成springcloud2023的服务追踪
Sleuth将会停止维护,Sleuth最新版本也只支持springboot2。作为替代可以使用MicrometerTracing在微服务中作为服务追踪的工具。
186 1
|
5月前
|
Java UED Sentinel
微服务守护神:Spring Cloud Sentinel,让你的系统在流量洪峰中稳如磐石!
【8月更文挑战第29天】Spring Cloud Sentinel结合了阿里巴巴Sentinel的流控、降级、熔断和热点规则等特性,为微服务架构下的应用提供了一套完整的流量控制解决方案。它能够有效应对突发流量,保护服务稳定性,避免雪崩效应,确保系统在高并发下健康运行。通过简单的配置和注解即可实现高效流量控制,适用于高并发场景、依赖服务不稳定及资源保护等多种情况,显著提升系统健壮性和用户体验。
109 1
|
2月前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
76 3
|
3月前
|
负载均衡 算法 Java
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
40岁老架构师尼恩分享了关于SpringCloud核心组件的底层原理,特别是针对蚂蚁集团面试中常见的面试题进行了详细解析。内容涵盖了Nacos注册中心的AP/CP模式、Distro和Raft分布式协议、Sentinel的高可用组件、负载均衡组件的实现原理等。尼恩强调了系统化学习的重要性,推荐了《尼恩Java面试宝典PDF》等资料,帮助读者更好地准备面试,提高技术实力,最终实现“offer自由”。更多技术资料和指导,可关注公众号【技术自由圈】获取。
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
|
4月前
|
消息中间件 存储 Java
SpringCloud基础9——服务异步通信-高级篇
消息可靠性、死信交换机、惰性队列、MQ集群
SpringCloud基础9——服务异步通信-高级篇
|
4月前
|
Java API 对象存储
微服务魔法启动!Spring Cloud与Netflix OSS联手,零基础也能创造服务奇迹!
这段内容介绍了如何使用Spring Cloud和Netflix OSS构建微服务架构。首先,基于Spring Boot创建项目并添加Spring Cloud依赖项。接着配置Eureka服务器实现服务发现,然后创建REST控制器作为API入口。为提高服务稳定性,利用Hystrix实现断路器模式。最后,在启动类中启用Eureka客户端功能。此外,还可集成其他Netflix OSS组件以增强系统功能。通过这些步骤,开发者可以更高效地构建稳定且可扩展的微服务系统。
79 1
|
4月前
|
监控 Java API
谷粒商城笔记+踩坑(25)——整合Sentinel实现流控和熔断降级
先简单介绍熔断、降级等核心概念,然后阐述SpringBoot整合Sentinel的实现方式,最后介绍Sentinel在本项目中的应用。
谷粒商城笔记+踩坑(25)——整合Sentinel实现流控和熔断降级
|
4月前
|
监控 Java Nacos
SpringCloud基础5——微服务保护、Sentinel
sentinel、雪崩问题、流量控制、隔离和降级、授权规则、规则持久化
SpringCloud基础5——微服务保护、Sentinel
|
5月前
|
运维 Java Nacos
Spring Cloud应用框架:Nacos作为服务注册中心和配置中心
Spring Cloud应用框架:Nacos作为服务注册中心和配置中心
|
5月前
|
存储 Java Spring
【Azure Spring Cloud】Azure Spring Cloud服务,如何获取应用程序日志文件呢?
【Azure Spring Cloud】Azure Spring Cloud服务,如何获取应用程序日志文件呢?