首页 > 解决方案 > 每个客户的分布式作业队列

问题描述

要求: - 分布式 - 最多为单个客户处理一项工作 - 在客户之间并行工作 - 支持 10k+ 客户 - JVM 需要有客户端库

我的公司目前使用 Quartz 作为分布式作业存储。它的一个很好的功能是“DisallowConcurrentExecution”的能力,其中每个客户都可以拥有自己的工作,并且它的触发器是接收顺序中的流程。然而,这很好用,随着我们继续增加更多的客户,工作的数量并没有像我们希望的那样扩展(Postgres 支持),而且我们读/写/清理 postgres 石英表的数量增长得太快了。

我们正在做一些研究并试图找到一种架构模式,在这种模式下,我们可以为每个客户设置一个作业队列,其中每个客户一次最多处理一个作业(工作可以跨客户并行处理)。

我们在 RabbitMQ/SQS/Kafka/Distributed Locks 等中探索了不同的方法,但似乎没有一种方法能很好地满足“每个客户一次工作”和可扩展的要求。Akka 是一种可以解决我们需要的架构,但由于我们过去遇到过许多部署/维护问题,我们公司已经避开了它。

不只是在 FIFO 中处理所有作业的一个问题是某些作业可能需要一段时间才能完成(30 多秒),我们不希望其他客户等待其他客户的作业完成。

标签: architecturerabbitmqqueuequartz-schedulerjob-scheduling

解决方案


推荐阅读