-
Notifications
You must be signed in to change notification settings - Fork 8.1k
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
[help wanted]关于集群并发流控server端等待队列设计 #1666
Comments
@sczyh30 please cc |
hey @yunfeiyanggzq 这个队列是一个先进先出队列? 从吞吐量考虑非公平队列的性能要好一点。
这里应该是把报获取token超时?
这里如果是加锁 + 超时时间,性能影响可能会很大。
|
|
@Lin-Liang 非常感谢您的建议, |
|
@Lin-Liang 我的理解是对原子类进行操作是可以保证原子性的,但是( 判断能够通过+对原子类操作)这个操作是不能单纯使用原子类保证这个过程的原子性 |
确实在锁里循环等待会导致极大的影响性能,甚至导致死锁,可能次数会好一些 |
判断通过之后,原子性就已经取决于原子类操作了 |
无边界的设计(无超时、无数量上限等)适用性非常有限,且有状态,这种方案我个人不是很认同。 实现上,建议看看是否有可能改造sentinel-cluster使之高抽象地方便地支持多种实现,这样未来可以做更多的独立实现,包括自动成组和其它HA方案。 |
这是为了解决什么问题?没有等待队列会怎样? |
没有这个队列请求被判断为block后直接返回给client,我们希望用这种方式让请求稍微等待一段时间去获取(能够应对突发的请求,类似于削峰),用这种方式能够在保证并发控制的情况下让更多的请求通过,当然这是可配置的,用户可以选择是否采用这种策略 |
目前的进展 https://github.com/yunfeiyanggzq/Sentinel/tree/pr1/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/statistic/concurrent/queue , 基本功能已经完成,主要思路是采用生产者消费者模式,输出结果的方式有两种,一种是通过netty发放给client,一种是通过future的方式发放给server(server嵌入模式)。整个实现可见 #1629 欢迎大家帮忙参考。感谢大家的帮助!!!! |
Issue Description
Type: bug report or feature request
Describe what happened (or what feature you want)
希望大家提出宝贵意见完善方案
我们打算使用token分发的形式进行集群并发流控,详情可见 #1629 如果一个请求被block,我们希望将这个请求加入到队列等待一段时间再进行请求token,且希望结果是一定通过的(等待超时除外)。
目前的设计是在processor中判断如果请求被block了,就将请求打包加入一个阻塞队列中,然后另外设置一个线程去不断的取出请求尝试获取token,直到pas(或者超时退出),然后写入到netty。在客户端则通过netty的异步调用future获得结果
processor代码:
队列代码:
存在问题
The text was updated successfully, but these errors were encountered: