【发布时间】:2014-02-10 19:25:59
【问题描述】:
我正在寻找一种在集群范围内限制各种进程的方法。这需要某种可以处理任意数量的事件消费者的集中控制。我的想法涉及一个只读队列,它以一定的速率生成令牌,没有积压(所以错过的事件被丢弃)。例如,假设我有一些 Web API 需要限制为每小时 10,000 条消息,但可以从集群中的任意数量的服务器调用。我将配置一个队列以每小时 10k 条消息生成令牌,并且所有服务器都连接到该队列并在继续之前检索令牌。这将引入延迟元素(第一次请求后的 3600/10000 秒),但无论消费者数量如何,都将是平滑且可预测的。我不想有积压,因为我不想在一段安静的时间后匆忙赶路 - 目的不仅仅是限制每小时的事件总数,而是将它们均匀地分布在其中。
我的主要应用是 PHP,它在 linux 上运行。目前我对 beanstalkd 的正常排队非常满意,但它不支持这种操作模式。我过去使用过 RabbitMQ,但相比之下发现它又重又脆弱。如果这可以由队列管理器自己完成,那就太好了,因为它在配置后不需要外部输入。
在没有对此类内容的特定支持的情况下,我可以尝试使用普通队列,并在很短的时间内将令牌推入其中,尽管这看起来很不雅。有更好的想法吗?
【问题讨论】:
标签: queue rabbitmq cluster-computing beanstalkd throttling