我已经编写了一个基于pheanstalk(beanstalkd)的队列管理器,我正在决定通过这个系统进行哪些类型的操作。队列管理器可以发送和读取3个不同的优先级管:快速,中速,慢速。
优先级的差异是执行时间。快速队列中的操作将具有最多的工作进程,并且应该在添加到队列后几乎立即执行。中等将减少工人数量,减少甚至更少。
我们的群众行动毫无疑问会在中速或慢速通道中排队。但是我们对单个记录(由一个到几个快速查询组成)也有单一操作,用户需要立即反馈。
初始非队列方法很简单:
队列的方式是:
我可以增加快速队列的工作人员,以便管中永远不会有任何待处理的操作,但我永远无法保证在刷新数据之前完成操作。
这个问题有哪些常见的解决方案/模式?我宁愿在队列中运行所有内容。
答案 0 :(得分:0)
使用Beanstalkd这非常简单 - 它有优先权。越接近0,优先级越高。
给定来自多个管/队列之一的两个作业,除非其他条件相同,否则将保留最接近0的优先级,并首先给出。
大多数工作人员都可以观看所有管子,无论如何他们总能获得最重要的工作。一小部分只监视fast
管,因此总是有最重要的工作人员可用。如果没有足够的快速'工作,他们会得到中等或慢的工作。
我倾向于将优先级放在快速排队的工作中,例如500,中:1000,慢5000.我喜欢留下大的空白,知道其他东西可以插入如果需要就到位。