alibaba / alibaba/Sentinel

Ideas about improving distributed flow control | 关于集群限流的一些改进想法

Open
#2,589 2 comments 7 reactions 0 assignees View on GitHub
area/cluster-flow kind/discussion
Dominant language
Java
Stars
23.1k
Forks
8.1k
PR merge metrics
No merged PRs in 30d

Description

## Issue Description
当前Sentinel官方提供的TokenServer为单点部署的方案,一台Token Server处理了所有限流请求,单点处理压力过大容易被打垮。
但看了各种issue都提到可以借助其他中间件的能力来做高可用,例如Redis,但个人想法觉得这么做不是很好。Sentinel作为一个产品需要提供通用无差异的能力(定制化的另说),不能因Token Server实现不一致而提供不一样的处理逻辑,如若将原Token Server的逻辑用Lua照搬到Redis上的话,由于Redis处理请求为单线程处理,可能会因Lua脚本过于复杂而增加了Redis压力。
或许我们可以换个思路,使用类似Redis计算key所属槽的机制,在客户端层面做负载均衡,降低单点Token Server的压力,同时TokenServer还能支持水平扩展.

方案思路如下:
Token Server不做任何改造,降低复杂度,在客户端一侧进行扩展,利用注册中心服务发现的特性发现其他Token Server(或是Sentinel Dashboard),在发起requestToken请求时,使用“ **一致性哈希**”算法进行负载均衡调用,哈希参数为“ruleId”,可以将限流请求分散到不同的TokenServer上,每个TokenServer只处理一部分的规则。
优点:无数据同步,无Slave节点的概念,实现简单,不会影响TokenServer原有的处理逻辑。将不同规则的请求分散到各TokenServer上,可以很好的解决TokenServer单点处理压力过大的问题
缺点:无法避免单一规则高频访问的问题,打垮该节点后会出现短时间内退化为实例限流的情况。并且在节点列表变更时也有可能会影响到流控的准确性

以上仅为个人见解,欢迎探讨

Contributor guide

Open the contributing guide

Research direction

Review the existing TokenServer and Sentinel Dashboard requestToken flow, along with how service discovery exposes available servers. Evaluate whether ruleId-based consistent-hash routing can be added without changing TokenServer logic, and document the effects of node changes and hot rules. Done should be a concrete, agreed design rather than an open-ended discussion.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
distributed-systems
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.