Kubernetes 什么';对于复杂的作业队列,建议采用哪种方法? 问题

Kubernetes 什么';对于复杂的作业队列,建议采用哪种方法? 问题,kubernetes,job-queue,Kubernetes,Job Queue,我需要一个比标准FIFO或优先级队列复杂得多的作业队列系统。队列主要需要像标准的FIFO队列一样工作,但是围绕作业的释放和运行有更复杂的逻辑。在我的例子中,只有在不超过特定用户和系统并发限制的情况下,才应该将作业出列(例如,用户只能有10个特定类型的并发作业,整个系统只能有100个特定类型的并发作业,等等) 目标是让kubernetes集群成为该队列的使用者,如果满足所有必要条件,k8将退出作业队列,并启动一个新容器来运行它。我不是k8的专家,但我不认为我们能够让k8在取消给定作业之前运行这些并

我需要一个比标准FIFO或优先级队列复杂得多的作业队列系统。队列主要需要像标准的FIFO队列一样工作,但是围绕作业的释放和运行有更复杂的逻辑。在我的例子中,只有在不超过特定用户和系统并发限制的情况下,才应该将作业出列(例如,用户只能有10个特定类型的并发作业,整个系统只能有100个特定类型的并发作业,等等)

目标是让kubernetes集群成为该队列的使用者,如果满足所有必要条件,k8将退出作业队列,并启动一个新容器来运行它。我不是k8的专家,但我不认为我们能够让k8在取消给定作业之前运行这些并发性检查。因此,我认为我需要的是一个作业队列系统,它通过只允许通过某些检查的作业退出队列,将这些检查烘焙到队列中

我们试过的 我们已经使用sql数据库实现了自己的作业队列系统。此数据库中有一个主作业队列表,其中包含每个作业的信息。然后,我们创建了自己的应用程序,该应用程序定期(每隔10秒左右)在此表上运行复杂查询,以确定哪些作业应该排队并运行。然后,该应用程序启动辅助进程来运行这些作业(不是在容器中,只是在标准进程中)

这种方法有几个问题。首先,查找准备运行的作业的查询非常复杂且缓慢。此外,当系统上有大量活动时,作业队列表可能成为整个系统的巨大瓶颈。此外,由于我们希望开始在自己的docker容器中运行这些工作进程,因此如果可能,我们希望kubernetes集群成为队列的直接使用者,而不是让我们自己的应用程序作为中介

问题 对于复杂的工作队列,有哪些流行的方法?我无法想象我们是唯一需要施加并发限制的作业队列的人,我也无法想象我们的SQL方法是实现我们需要的最好方法。在这种情况下,我们可以做些什么来尽可能提高作业队列系统的性能