请教各位,我现在有个系统,想由原来的单个 worker 处理任务扩展成多个 worker ,有些问题没考虑明白,希望能够得到指点。
场景
用户请求对应一个作业 job ,存放在 Mysql 的 job 表中,通过 status 字段判断状态( pending :待处理, finished :已完成,等等),后台有多个 worker 轮询 job 表,读取 pending 状态的 job ,然后进行处理
问题
- worker 轮询的条件仅仅是根据 job 的状态,如何保证多个 worker 不会读到同一条记录?读到后立即 job 状态吗?
- 因为不限制的话, worker 会把当前所有 pending job 读取出来,假如让 worker 每次只读取一条记录,如何实现?需要什么判断条件?
- 有没有必要使用 redis 来实现任务队列?
- 不知道还有没有其他更好的方案