Sentinel(流量控制平台)限流熔断应用实践

Sentinel简介

背景:在系统负载过高时,采用限流、降级和熔断,三种措施来保护系统,由此一些流量控制中间件诞生。例如Sentinel。

1)Sentinel是什么?(阿里推出一个流量控制平台,防卫兵)
2)类似Sentinel的产品你知道有什么?(hystrix-一代微服务产品)
3)Sentinel是如何对请求进行限流的?(基于sentinel依赖提供的拦截器)
4)你了解哪些限流算法?(滑动窗口算法、计数器、令牌桶、漏斗算法…)
5)Sentinel 默认的限流算法是什么?(滑动窗口算法)

6)何为降级熔断?(让外部应用停止对服务的访问,生活中跳闸,路障设置-此路不通)
7)为什么要进行熔断呢?(平均响应速度越来越慢或经常出现异常,这样可能会导致调用链堆积,最终系统崩溃)
8)Sentinel中限流,降级的异常父类是谁?(BlockException)
9)Sentinel 出现降级熔断时,系统底层抛出的异常是谁?(DegradeException)
10)Sentinel中异常处理接口是谁?(BlockExceptionHandler)
11)Sentinel中异常处理接口下默认的实现类为? (DefaultBlockExceptionHandler)
12)假如Sentinel中默认的异常处理规则不满足我们的需求怎么办?(自己定义)
13)我们如何自己定义Sentinel中异常处理呢?(直接或间接实现BlockExceptionHandler )
14)Sentinel熔断降级策略有哪些?(慢调用比例、异常比例、异常数)

Sentinel概述

       Sentinel (分布式系统的流量防卫兵) 是阿里开源的一套用于服务容错的综合性解决方案。它以流量为切入点, 从流量控制、熔断降级、系统负载保护等多个维度来保护服务的稳定性。 

Sentinel核心分为两个部分:

核心库(Java 客户端):能够运行于所有 Java 运行时环境,同时对Dubbo /Spring Cloud 等框架也有较好的支持。
控制台(Dashboard):基于 Spring Boot 开发,打包后可以直接运行。
 

安装Sentinel服务

java -Dserver.port=8180 -Dcsp.sentinel.dashboard.server=localhost:8180 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.1.jar

或者在 idea 启动

注:把前缀 java 删除,-jar后边加 sentinel 的全路径

-Dserver.port=8180 -Dcsp.sentinel.dashboard.server=localhost:8180 -Dproject.name=sentinel-dashboard -jar D:\tools\CGB\AAA\CGBIV\TOOLS\sentinel\sentinel-dashboard-1.8.1.jar

http://localhost:8180

用户/密码一样:sentinel

登录成功

一、限流

1.添加依赖

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

2.打开服务提供方配置文件bootstrap.yml,添加sentinel配置,代码如下:

#服务的端口
server:
  port: 8081
#服务名
spring:
  application:
    name: sca-provider #进行服务注册必须配置服务名
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8180 # 指定sentinel控制台地址。
      web-context-unify: false
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        server-addr: localhost:8848
        file-extension: yml
        namespace: 980ba7ac-4f94-417c-ad49-b1714d85d04d
        #group: DEFAULT_GROUP_51
        shared-configs[0]:
          data-id: app-public.yml
          refresh: true

3.创建一个用于演示限流操作的Controller对象,例如:

package com.jt.provider.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/provider")
public class ProviderSentinelController {
       @GetMapping("/sentinel01")
       public String doSentinel01(){
           return "sentinel 01 test  ...";
       }
}

4.启动sca-provider服务,然后对指定服务进行访问,如图所示:

 5.刷新sentinel 控制台,实时监控信息,如图所示:

 6. 在簇点链路中,设置一下指定接口的流控(流量控制),即选择 流控选项,设置阈值类型(QPS-每秒请求次数),单击阈值为1(表示每秒允许的请求次数为1)代表每秒请求不能超出1次,要不然就做限流处理,处理方式直接调用失败。

7.反复刷新访问消费端端服务,检测是否有限流信息输出,如图所示:

Sentinel-流控规则

阈值类型(QPS,线程数)

  • QPS(Queries Per Second):当调用相关url对应的资源时,QPS达到单机阈值时,就会限流。
  • 线程数:当调用相关url对应的资源时,线程数达到单机阈值时,就会限流。

流控模式(直接,关联,链路)

Sentinel的流控模式代表的流控的方式,默认【直接】,还有关联,链路。

流控效果(快速失败,Warm Up 预热,排队等待)

二、降级

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值