architecture - 每个客户的分布式作业队列
问题描述
要求: - 分布式 - 最多为单个客户处理一项工作 - 在客户之间并行工作 - 支持 10k+ 客户 - JVM 需要有客户端库
我的公司目前使用 Quartz 作为分布式作业存储。它的一个很好的功能是“DisallowConcurrentExecution”的能力,其中每个客户都可以拥有自己的工作,并且它的触发器是接收顺序中的流程。然而,这很好用,随着我们继续增加更多的客户,工作的数量并没有像我们希望的那样扩展(Postgres 支持),而且我们读/写/清理 postgres 石英表的数量增长得太快了。
我们正在做一些研究并试图找到一种架构模式,在这种模式下,我们可以为每个客户设置一个作业队列,其中每个客户一次最多处理一个作业(工作可以跨客户并行处理)。
我们在 RabbitMQ/SQS/Kafka/Distributed Locks 等中探索了不同的方法,但似乎没有一种方法能很好地满足“每个客户一次工作”和可扩展的要求。Akka 是一种可以解决我们需要的架构,但由于我们过去遇到过许多部署/维护问题,我们公司已经避开了它。
不只是在 FIFO 中处理所有作业的一个问题是某些作业可能需要一段时间才能完成(30 多秒),我们不希望其他客户等待其他客户的作业完成。
解决方案
推荐阅读
- angular - 找不到管道 Ionic 6
- html - 粘性条的问题
- javascript - 如何获得按钮到材料 ui 列表的末尾和复选框到列表的开头?
- c - 如何手动将 128 位数字乘以 64 位数字并相加
- oracle-sqldeveloper - 如何在 SQL Developer 中将 BLOB 数据类型上传到 TABLE?
- c# - 自定义中间件以从 HttpClient 响应中注入标头
- r - 使用 str_extract_all 提取花括号之间的字符串
- powershell - Powershell:如何从另一个静态方法调用静态方法
- c - 使用C从http请求中提取post值
- android - 在 Android 中禁用 GPS 背景限制