当前位置: 首页 > 知识库问答 >
问题:

sentinel - Sentinel的漏桶算法限流实现是不是不太准?

黄跃
2023-12-05

https://blog.csdn.net/xiaoyi5224765/article/details/115706271
为什么这个Sentinel的 漏桶算法 限流 RateLimiterController 的实现中:

 if (expectedTime <= currentTime) {//@5        // Contention may exist here, but it's okay.        latestPassedTime.set(currentTime);        return true;    } else {   }

期望时间小于当前时间 则放行, 这个代码存在并发的情况,怎么他还 is ok? 这玩意是不是不准?
没保证只有一个线程成功更新latestPassedTime。

b

共有1个答案

许兴文
2023-12-05

这个问题涉及到并发编程和限流算法的实现。首先,漏桶算法是一种常见的限流算法,用于控制流量速率。在Sentinel的RateLimiterController实现中,使用了漏桶算法来限制流量。

关于你的问题,代码中的expectedTime代表的是某个时间点,在这个时间点内,如果有请求到达,那么会判断这个请求是否应该被放行。如果expectedTime小于等于currentTime,即请求到达的时间早于或等于期望的时间点,那么这个请求会被放行。这里的并发情况确实存在,但是这是漏桶算法的一种特性,可以允许一定程度的并发执行。

漏桶算法本身并不是完美的,它并不能完全保证只有一个线程成功更新latestPassedTime。但是,在实际应用中,这种并发执行的情况并不会对限流的效果产生太大影响。因为漏桶算法的主要目的是控制流量速率,而不是精确地限制每个请求的执行时间。在实际情况中,由于操作系统的调度和网络延迟等因素,很难做到精确的时间控制。

另外,Sentinel 作为一款分布式系统流量控制框架,其设计目标是为了提供一种可扩展、可配置的限流方案,以满足不同场景下的限流需求。在Sentinel中,RateLimiterController的实现是基于漏桶算法的,该算法本身已经考虑了并发执行的情况,并且在实际应用中得到了广泛的验证和认可。

因此,尽管代码中存在并发执行的情况,但是这并不会对限流的效果产生太大影响。在实际应用中,需要根据具体场景和需求来选择合适的限流算法和配置方案。

 类似资料:
  • 概述 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 Sentinel 具有以下特征: 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。 完备的实时

  • 目前只看了滑动窗口的实现,但是如果有热点参数限流的话,想看一下怎么实现的 有大佬看过的,请教一下 或者有哪有这块限流算法的源码解析的文档,可以推荐推荐推荐

  • 本文向大家介绍spring cloud gateway整合sentinel实现网关限流,包括了spring cloud gateway整合sentinel实现网关限流的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了spring cloud gateway整合sentinel实现网关限流,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 说

  • Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。 Sentinel 具有以下特性: 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等

  • Note 本文档翻译自: http://redis.io/topics/sentinel 。 Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务: 监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。 提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, S

  • Redis-sentinel是Redis的作者antirez完成的,因为Redis实例在各个大公司的应用,每个公司都需要一个Redis集群的管理工具,被迫都自己写管理工具来管理Redis集群,antirez考虑到社区的急迫需要(详情),花了几个星期写出了Redis-sentinel。 Redis-sentinel的三大功能: * 监测 * 通知 * 自动故障恢复 首先Redis-sentinel要