Sentinel最全详解(图文全面总结)

Sentinel最全详解(图文全面总结)Sentinel 是构建微服务的核心 也是 SpringCloudA 核心组件 下面我就全面来详解 Sentinel mikechen 本篇已收于 mikechen 原创超 30 万字 阿里架构师进阶专题合集 里面

大家好,欢迎来到IT知识分享网。

Sentinel最全详解(图文全面总结)

Sentinel是构建微服务的核心,也是SpringCloudAlibaba核心组件,下面我就全面来详解Sentinel@mikechen

本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。

Sentinel最全详解(图文全面总结)

Sentinel

Sentinel 是一个由阿里开发的流量控制组件,主要用于:分布式系统中的流量控制、和熔断降级。

其主要目标:保护分布式系统的稳定性、和可用性,通过对应用的实时流量进行监控、和控制,防止服务过载、和异常传播。

Sentinel最全详解(图文全面总结)

Sentinel 功能

Sentinel 的核心功能,包含:流量控制(限流)、熔断(降级)、实时监控、和保护等等。

如下图所示:

Sentinel最全详解(图文全面总结)

流量控制

限流:是指对系统的请求进行限制,以防止过载、和确保系统的稳定性。

Sentinel 提供了多种限流策略,比如:基于 QPS(每秒请求数)限制、基于线程数限制、和基于调用关系的热点参数限流………等。

如下图所示:

Sentinel最全详解(图文全面总结)

常见的限流算法:有计数器、滑动时间窗口、和漏桶算法…….等等。

计数器算法(Fixed Window Counter)

计数器算法是最简单的一种限流算法,它将时间分割成固定的时间窗口,每个窗口内记录请求数,如果请求数超过了设定的阈值,则进行限流。

实现原理:

  • 将时间分为固定的窗口,例如 :1 分钟;
  • 在每个时间窗口内维护一个计数器,记录请求数;
  • 如果在当前窗口内的请求数超过了设定的阈值,则拒绝请求。

滑动时间窗口算法(Sliding Window Log)

滑动时间窗口算法:通过记录每个请求的时间戳,并根据时间戳判断当前窗口内的请求数是否超过限制。

实现原理:

  • 首先,记录每个请求的时间戳;
  • 其次,定期清理超出窗口时间的请求记录;
  • 计算当前窗口内的请求数,如果超过设定的阈值,则拒绝请求。

漏桶算法(Leaky Bucket)

漏桶算法将请求放入一个漏桶中,以固定的速率处理请求,当漏桶满时,新请求会被丢弃。

如下图所示:

Sentinel最全详解(图文全面总结)

大致流程,如下:

实现原理:

  • 请求到达时,如果漏桶未满,则将请求放入漏桶中;
  • 漏桶以固定速率处理请求;
  • 如果漏桶满了,则新请求被丢弃。

示例:

public class LeakyBucket { private int water = 0; // 当前漏桶中的水量 private final int capacity; // 漏桶容量 private final int leakRate; // 漏水速率(每毫秒漏多少) private long lastLeakTime = System.currentTimeMillis(); public LeakyBucket(int capacity, int leakRate) { this.capacity = capacity; this.leakRate = leakRate; } public synchronized boolean allowRequest() { long now = System.currentTimeMillis(); // 计算漏掉的水 long leakedWater = (now - lastLeakTime) * leakRate; water = Math.max(0, water - (int)leakedWater); lastLeakTime = now; if (water < capacity) { water++; return true; } else { return false; } } } 

最后,总结下:

  • 计数器算法 :简单易实现,但存在窗口边界问题;
  • 滑动时间窗口算法 :解决了窗口边界问题,但内存开销较大;
  • 漏桶算法:可以平滑请求流量,但实现稍复杂。

熔断降级

熔断(降级):当某个资源出现不稳定、或不可用时,可以通过熔断机制暂时停止对该资源的调用,防止故障扩散。

如下图所示:

Sentinel最全详解(图文全面总结)

Sentinel 提供常见的熔断降级规则,如下:

响应时间(RT)熔断

当资源的平均响应时间超过阈值,且持续超过设定的时间窗口时,触发熔断;

比如:当资源的平均响应时间超过 500ms ,且在 1 分钟内持续出现,则熔断该资源。

异常比例(Exception Ratio)熔断

当资源的异常比例,超过阈值且持续超过设定的时间窗口时,触发熔断;

比如:当资源的异常比例超过 50% ,且在 1 分钟内持续出现,则熔断该资源。

异常数(Exception Count)熔断

当资源在单位时间窗口内的异常数超过阈值时,触发熔断。

比如:当资源在 1 分钟内的异常数超过 100 次,则熔断该资源。

实时监控和统计

除此之外,Sentinel 还提供详细的实时监控、和统计信息,帮助开发者了解系统运行状况。

Sentinel最全详解(图文全面总结)

Sentinel 控制台是一个可视化的工具,用于展示实时监控数据、管理规则、和查看系统的整体健康状况。

Sentinel使用

1.加入Maven 依赖pom

在 Maven 项目,中引入 Sentinel 依赖:

<dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-core</artifactId> <version>版本号</version> </dependency> 

2.配置规则

可以通过代码,配置:

DegradeRule rule = new DegradeRule(); rule.setResource("someResource"); rule.setGrade(RuleConstant.DEGRADE_GRADE_RT); rule.setCount(500); // 平均响应时间阈值(ms) rule.setTimeWindow(60); // 熔断持续时间(秒) DegradeRuleManager.loadRules(Collections.singletonList(rule)); 

也可以,通过注解配置:

@SentinelResource(value = "someResource", blockHandler = "handleBlock", fallback = "fallback") public String someMethod() { // 业务逻辑 return "success"; } public String handleBlock(BlockException ex) { return "请求被熔断"; } public String fallback(Throwable ex) { return "服务降级处理"; } 

3.运行监控

Sentinel最全详解(图文全面总结)

通过 Sentinel 控制台监控,实时流量数据和系统状态,及时发现、和解决问题。

本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。

Sentinel最全详解(图文全面总结)

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/168459.html

(0)
上一篇 2025-01-25 14:15
下一篇 2025-01-25 14:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信