【发布时间】:2021-08-21 14:59:05
【问题描述】:
我很难为 webhook 调度系统找到一个可靠且可扩展的解决方案。
当前系统使用 RabbitMQ 和 webhook 队列(我们称之为 events),它们被消费和分派。该系统运行了一段时间,但现在出现了一些问题:
- 如果系统用户产生的事件过多,会占用队列,导致其他用户长时间收不到 webhook
- 如果我将所有事件分成多个队列(通过 URL 哈希),它会降低出现第一个问题的可能性,但是当非常忙碌的用户访问同一个队列时,它仍然会不时发生
- 如果我尝试将每个 URL 放入自己的队列中,挑战是动态地创建/分配消费者到这些队列。就
RabbitMQ文档而言,API 在过滤非空队列或未分配消费者的队列方面非常有限。 - 就
Kafka而言,据我了解,通过阅读有关它的所有内容,情况在单个分区的范围内将是相同的。
所以,问题是 - 有没有更好的方法/系统来达到这个目的?也许我错过了一个非常简单的解决方案,允许一个用户不干扰另一个用户?
提前致谢!
【问题讨论】:
-
我觉得散列是正确的解决方案。您可以实施传入速率限制,以防止不良行为者减慢特定队列/分区的速度
-
传入的速率限制不会减慢生产者的速度吗?此外,这意味着“慢”消息无论如何都需要转到其他地方。
-
我不明白如何使用 url hasing 将事件拆分为多个队列。请给个解释好吗?
-
@nsv 每个 webhook 处理程序都有一个唯一的 URL。每个 webhook 处理程序都可以分配多个事件。因此,当一个事件被创建时,它会被放入其各自的 webhook 处理程序的队列中,并且由于每个 webhook 处理程序都有一个唯一的 URL,所以它基本上是相同的。
-
@Arthur 但是当你有这么多网址时,如果每个网址都有一个队列,你如何管理?
标签: apache-kafka rabbitmq webhooks event-dispatching