前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringCloud Alibaba Sentinel服务流控快速入门

SpringCloud Alibaba Sentinel服务流控快速入门

作者头像
冷环渊
发布2021-11-03 11:57:26
4460
发布2021-11-03 11:57:26
举报

Sentinel

Sentinel是什么

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

在这里插入图片描述
在这里插入图片描述

能做什么 针对于什么场景

sentinel给我们带来的服务

  • Sentinel 独立于项目外,开箱即用
  • 控制台可以可视化的实时监控和服务规则配置
  • 可以无缝配合cloud的注册中心 最佳匹配 nacos,也可以使用其他的如 Eureka apollo zookeeper等

解决了什么场景问题

  • 服务雪崩
  • 服务降级
  • 服务熔断
  • 服务限流
在这里插入图片描述
在这里插入图片描述

如何获取

下载地址 :sentinel下载地址 文档地址 :sentinel文档地址

Sentinel 组件由两部分组成

  • 使用sentinel的服务
  • sentinel的服务控制台

安装环境我们只需要有 java 8 以上就可以了 下载完成之后,直接运行java -jar 启动查看即可 java -jar sentinel-dashboard-1.7.0.jar

我们只需要访问 默认的启动端口就可以看到 sentinel的控制台了 账号和密码均为 :sentinel

演示工程 8401

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

代码语言:javascript
复制
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
        dependency>

        <dependency>
            <groupId>com.alibaba.cspgroupId>
            <artifactId>sentinel-datasource-nacosartifactId>
        dependency>

        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-sentinelartifactId>
        dependency>

演示项目配置

代码语言:javascript
复制
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 来演示

代码语言:javascript
复制
@RestController
public class FlowLimitController
{
    @GetMapping("/testA")
    public String testA() {
        return "------testA";
    }

    @GetMapping("/testB")
    public String testB() {

        return "------testB";
    }
}

之后启动nacos和 sentinel 这个时候你访问sentinel 会发现什么也没有 为什么? 应为 sentinel是懒加载的,我们访问其中一个方法,就会在sentinel中看到我们项目

在这里插入图片描述
在这里插入图片描述

流控规则

基础流控

我们可以看到面板

在这里插入图片描述
在这里插入图片描述
  • 资源名:唯一名称,默认请求路径
  • 针对来源: Sentinel可以针对调用者进行限流,填写微服务名,默认default (不区分来源)阈值类型/单机阈值:
  • QPs(每秒钟的请求数量):当调用该api的QPS达到阈值的时候,进行限流。线程数:当调用该api的线程数达到阈值的时候,进行限流
  • 是否集群:不需要集群
  • 流控模式:
    • 直接: api达到限流条件时,直接限流
    • 关联:当关联的资源达到阈值时,就限流自己
    • 链路:只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,就进行限流)【api级别的针对来源】
  • 流控效果:
    • 快速失败:直接失败,抛异常
    • Warm Up:根据codeFactor (冷加载因子,默认3)的值,从阈值codeFactor,经过预热时长,才达到设置的QPS阈值
    • 排队等待:匀速排队,让请求以匀速的速度通过,阈值类型必须设置为QPS,否则无效

直接失败

快速失败,配置如下:

在这里插入图片描述
在这里插入图片描述

之后我们快速访问 testa 就会发现 Blocked by Sentinel (flow limiting) 触发了 sentinel的默认提示

在这里插入图片描述
在这里插入图片描述

关联

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

在这里插入图片描述
在这里插入图片描述

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

高级配置

预热 Warm Up

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

公式:阈值除以coldFactor(默认值为3),经过预热时长后才会达到阈值 默认coldFactor为3,即请求QPS从threshold/3开始,经预热时长逐渐升至设定的QPS阈值。

适合应用场景 大量数据情况 : 如秒杀

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

排队等待

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

匀速排队,阈值必须设置为QPS 在一定时间内,逐渐处理进入到的请求,而不是第一时间拒绝请求

总结

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

在这里插入图片描述
在这里插入图片描述

Sentinel 可以看到,还有很多模块可以根据不同的场景和需求是了解, 天道酬勤,我们一起进步吧

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Sentinel
    • Sentinel是什么
      • 能做什么 针对于什么场景
        • 如何获取
          • 演示工程 8401
            • 流控规则
              • 基础流控
              • 直接失败
              • 关联
            • 高级配置
              • 排队等待
            • 总结
            相关产品与服务
            微服务引擎 TSE
            微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档