Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP]cluster concurrent flow control #1629

Closed
wants to merge 13 commits into from

Conversation

yunfeiyanggzq
Copy link
Contributor

@yunfeiyanggzq yunfeiyanggzq commented Jul 24, 2020

Describe what this PR does / why we need it

目前这个pr是集群并发流控的整体实现代码,基本功能已经实现,pr会拆分成多个提交,目前仅用于感兴趣的朋友测试,一起讨论完善方案,欢迎大家提出宝贵意见

Does this pull request fix one issue?

Fixes #1477

Describe how you did it

为了实现集群并发流控,我们必须存储每个调用的信息,发现并清除那些不正常的资源调用。具体的讲,当token client发起调用时会获得token Server颁发的身份标识tokenId, token server会存储这个tokenId值和相关的信息。当调用结束时,token client会携带着该次调用被分配的tokenId前往token server请求释放资源,token server会删除这个调用对应的 tokenId。通过这样的操作,我们能够实时的统计当前正在进行的调用数量,即并发量。如果出现资源调用超时或者token client掉线的情况,token server会尝试着去发现删除对应调用并清除存储的tokenId,从而获得准确的并发量nowCalls。

图片
图片

具体请见:
中文提案.pdf

English proposal .pdf

Describe how to verify it

演示视频: https://www.yuque.com/docs/share/4238f458-7bdf-4689-91e3-3c5527698731?# 《集群并发控制演示视频》

可以查看单元测试,也可以demo演示。
可以通过这两个demo进行测试,测试server端并发请求,client端并发请求,client端掉线,client端调用超时等情况, 需要在nacos配置动态规则
图片

demo类如下:
sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-server-alone/src/main/java/com/alibaba/csp/sentinel/demo/cluster/ClusterClientDemo.java
sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-server-alone/src/main/java/com/alibaba/csp/sentinel/demo/cluster/ClusterServerDemo.java
动态规则如下:

[
    {
      "clusterConfig":{
      "acquireRefuseStrategy":0, // 当优先级请求block执行的策略,0:忽略直接block,1:client再次请求,2:client多次请求直到成功,3.server阻塞队列等待获取,最大等待时间是maxQueueingTimeMs参数,队列最大大小为1000
      "clientOfflineTime":3000,   // server端保存掉线client持有token的最长时间
      "fallbackToLocalWhenFail": true,
      "flowId":111,
      "resourceTimeout":2000,  // client端资源调用超过这个时间后执行resourceTimeoutStrategy策略
      "resourceTimeoutStrategy":1,// 0: 由server释放超时token,1:由client释放超时token
      "sampleCount":10,
      "strategy":0,
      "thresholdType":1,
      "windowIntervalMs":1000
    },
    "clusterMode":true,
    "controlBehavior":0,
    "count":100.0,
    "grade":0,
    "limitApp":"default",
    "maxQueueingTimeMs":500, // 在并发控制是服务端阻塞队列的最大等待时间。
    "resource":"cluster-resource",
    "strategy":0,
    "warmUpPeriodSec":10
   }
]

流控效果大致如图所示,纵轴为并发数,横轴为请求顺序
图片

Special notes for reviews

Signed-off-by: yunfeiyanggzq <yunfeiyang@buaa.edu.cn>
Signed-off-by: yunfeiyanggzq <yunfeiyang@buaa.edu.cn>
Signed-off-by: yunfeiyanggzq <yunfeiyang@buaa.edu.cn>
Signed-off-by: yunfeiyanggzq <yunfeiyang@buaa.edu.cn>
Signed-off-by: yunfeiyanggzq <yunfeiyang@buaa.edu.cn>
Signed-off-by: yunfeiyanggzq <yunfeiyang@buaa.edu.cn>
Signed-off-by: yunfeiyanggzq <yunfeiyang@buaa.edu.cn>
Signed-off-by: yunfeiyanggzq <yunfeiyang@buaa.edu.cn>
@yunfeiyanggzq
Copy link
Contributor Author

yunfeiyanggzq commented Aug 16, 2020

@sczyh30 @cdfive @jasonjoo2010 现在基本功能已经完成,各位前辈如果有空可以帮忙测试一下性能和功能,代码优化和规范化的问题我会分批提交pr并优化

Signed-off-by: yunfeiyanggzq <yunfeiyang@buaa.edu.cn>
Signed-off-by: yunfeiyanggzq <yunfeiyang@buaa.edu.cn>
Signed-off-by: yunfeiyanggzq <yunfeiyang@buaa.edu.cn>
Signed-off-by: yunfeiyanggzq <yunfeiyang@buaa.edu.cn>
Signed-off-by: yunfeiyanggzq <yunfeiyang@buaa.edu.cn>
CST11021 pushed a commit to CST11021/Sentinel that referenced this pull request Nov 3, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/cluster-flow Issues or PRs related to cluster flow control
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[RFC] Distributed concurrency control
2 participants