当前位置: 首页 > news >正文

Sentinel全面实战指南

Sentinel全面实战指南

一、请求限流

1️⃣在簇点链路后面点击流控按钮,即可对其做限流配置:
在这里插入图片描述
2️⃣在弹出的菜单中这样填写:
把查询购物车列表这个簇点资源的流量限制在了每秒6个,也就是最大QPS为6
在这里插入图片描述
3️⃣最终监控结果如下:
在这里插入图片描述
可以看出GET:/carts这个接口的通过QPS稳定在6附近,而拒绝的QPS在4附近,符合我们的预期。

二、线程隔离

  • 限流可以降低服务器压力,尽量减少因并发流量引起的服务故障的概率,但并不能完全避免服务故障。
  • 一旦某个服务出现故障,我们必须隔离对这个服务的调用,避免发生雪崩。

比如,查询购物车的时候需要查询商品,为了避免因商品服务出现故障导致购物车服务级联失败,我们可以把购物车业务中查询商品的部分隔离起来,限制可用的线程资源:
在这里插入图片描述
这样,即便商品服务出现故障,最多导致查询购物车业务故障,并且可用的线程资源也被限定在一定范围,不会导致整个购物车服务崩溃。

对查询商品的FeignClient接口做线程隔离:
1️⃣OpenFeign整合Sentinel

  • 配置yml
feign:sentinel:enabled: true # 开启feign对sentinel的支持server:port: 8082tomcat:threads:max: 50 # 允许的最大线程数accept-count: 50 # 最大排队等待数量max-connections: 100 # 允许的最大连接

然后重启cart-service服务,可以看到查询商品的FeignClient自动变成了一个簇点资源:
在这里插入图片描述
2️⃣配置线程隔离

  • 点击查询商品的FeignClient对应的簇点资源后面的流控按钮
    在这里插入图片描述
  • 在弹出的表单中填写下面内容:
    在这里插入图片描述
    并发线程数限制:这个查询功能最多使用5个线程,而不是5QPS
    如果查询商品的接口每秒处理2个请求,则5个线程的实际QPS在10左右,而超出的请求自然会被拒绝。
    在这里插入图片描述

在这里插入图片描述

三、服务熔断

  • 通过线程隔离对查询购物车业务进行隔离,但由于查询商品功能耗时高且线程数有限,导致接口吞吐量低,QPS仅为10左右。
  • 为了解决超QPS上限请求导致查询失败的问题,应设置降级处理逻辑,保证购物车展示。
  • 同时,针对商品查询延迟高的问题,应采取熔断机制,避免影响购物车服务和用户体验。

1️⃣编写降级逻辑
触发限流或熔断后的请求不一定要直接报错,也可以返回一些默认数据或者友好提示,用户体验会更好。

给FeignClient编写失败后的降级逻辑有两种方式:

  • 方式一:FallbackClass(简单降级),无法对远程调用的异常做处理
    使用 @FeignClientfallback 属性指定降级类,例如:
@FeignClient(name = "product-service", fallback = ProductClientFallback.class)
public interface ProductClient {@GetMapping("/product/{id}")Product getProduct(@PathVariable("id") Long id);
}
@Component
public class ProductClientFallback implements ProductClient {@Overridepublic Product getProduct(Long id) {// 返回默认商品信息return new Product(id, "默认商品", 0.0);}
}
  • 方式二:FallbackFactory(推荐方式),可以对远程调用的异常做处理,我们一般选择这种方式。
@FeignClient(name = "product-service", fallbackFactory = ProductClientFallbackFactory.class)
public interface ProductClient {@GetMapping("/product/{id}")Product getProduct(@PathVariable("id") Long id);
}
@Component
public class ProductClientFallbackFactory implements FallbackFactory<ProductClient> {@Overridepublic ProductClient create(Throwable cause) {return id -> {log.error("商品服务调用失败,原因: {}", cause.getMessage());return new Product(id, "默认商品", 0.0);};}
}

2️⃣ 服务熔断机制

  • 商品查询接口RT过高导致购物车服务RT变长,影响用户体验并消耗更多资源。
  • 建议对不健康的商品服务接口进行熔断,直接走降级逻辑,避免影响当前服务。
  • Sentinel断路器可以统计慢请求和异常请求比例,超出阈值时熔断接口,拦截访问请求并降级处理;接口恢复正常后,再放行请求。
  • 断路器通过状态机控制工作状态切换
    在这里插入图片描述
    状态机包括三个状态:
  • closed:关闭状态,断路器放行所有请求,并开始统计异常比例、慢请求比例。超过阈值则切换到open状态
  • open:打开状态,服务调用被熔断,访问被熔断服务的请求会被拒绝,快速失败,直接走降级逻辑。Open状态持续一段时间后会进入half-open状态
  • half-open:半开状态,放行一次请求,根据执行结果来判断接下来的操作。
    • 请求成功:则切换到closed状态
    • 请求失败:则切换到open状态

在这里插入图片描述
在这里插入图片描述
含义:

  • RT超过200毫秒的请求调用就是慢调用
  • 统计最近1000ms内的最少5次请求,如果慢调用比例不低于0.5,则触发熔断
  • 熔断持续时长20s
    在这里插入图片描述
http://www.lryc.cn/news/610630.html

相关文章:

  • 剑指offer第2版:字符串
  • Day34 GPU训练及类的call方法
  • Android audio之 AudioDeviceInventory
  • PCBA电子产品复制全攻略:从入门到精通
  • 【音视频】WebRTC 一对一通话-信令服
  • 强化学习_Paper_1991_Reinforcement learning is direct adaptive optimal control
  • 自然语言处理×第三卷:文本数据分析——她不再只是贴着你听,而开始学会分析你语言的结构
  • python+MySQL组合实现生成销售财务报告
  • 游戏画面总是卡顿怎么办 告别延迟畅玩游戏
  • 电脑搜索不到公司无线网络
  • 基于ARM+FPGA多通道超声信号采集与传输系统设计
  • NuGet03-私有仓库搭建
  • mac前端环境安装
  • 【ARM】CMSIS6 介绍
  • Mac上pnpm的安装与使用
  • AIDL学习
  • 《算法导论》第 2 章 - 算法基础
  • 朴素贝叶斯(Naive Bayes)算法详解
  • pipeline方法关系抽取--课堂笔记
  • 神坛上的transformer
  • VUE2 学习笔记18 路由守卫
  • 无人机 × 巡检 × AI识别:一套可复制的超低延迟低空视频感知系统搭建实践
  • 人月神话:软件工程的永恒智慧
  • Android 之 Kotlin中的协程(Dispatchers.IO)
  • 研发团队看板协作中的自动化实践:集成CI/CD与任务流转
  • Goby 漏洞安全通告| NestJS DevTools /inspector/graph/interact 命令执行漏洞(CVE-2025-54782)
  • Linux内核参数调优:为K8s节点优化网络性能
  • 【功能测试】软件功能上线测试经验总结
  • K8S健康检查巡检清单
  • K8s Master状态NotReady