Dhr*_*aya 14 distributed-computing rate-limiting guava apache-zookeeper apache-curator
比方说,我让P进程在N台物理机上运行一些业务逻辑.例如,这些进程调用了一些Web服务S. 我想确保所有P进程组合的每秒服务S的调用不超过10次.
如何实施这样的解决方案?
Google Guava的速率限制器适用于在单个机箱上运行的进程,但不适用于分布式设置.
JAVA有哪些标准的,随时可用的解决方案?[可能基于zookeeper]
谢谢!
我一直在致力于解决此类问题的开源解决方案。
Limitd 是限制的“服务器”。这些限制是使用令牌桶算法实现的。
基本上,您在服务配置中定义限制,如下所示:
buckets:
"request to service a":
per_minute: 10
"request to service b":
per_minute: 5
Run Code Online (Sandbox Code Playgroud)
该服务作为监听 TCP/IP 端口的守护进程运行。
然后您的应用程序会执行以下操作:
var limitd = new Limitd('limitd://my-limitd-address');
limitd.take('request to service a', 'app1' 1, function (err, result) {
if (result.conformant) {
console.log('everything is okay - this should be allowed');
} else {
console.error('too many calls to this thing');
}
});
Run Code Online (Sandbox Code Playgroud)
我们目前正在使用它来限制速率并消除某些应用程序事件的抖动。
服务器已开启:
https://github.com/auth0/limitd
我们计划开发多个 SDK,但目前我们只有 node.js 和部分实现的 go:
| 归档时间: |
|
| 查看次数: |
7162 次 |
| 最近记录: |