使用Redis时,在Celery中进行可靠的任务处理需要什么?

时间:2019-07-10 21:22:03

标签: python redis celery

我们希望在kubenetes集群中运行Celery / Redis,并且当前未启用Redis持久性(所有内容均在内存中)。我担心的是:Redis重新启动(丢失内存中的数据),worker重新启动/中断(由于崩溃和/或pod调度)以及瞬态网络问题。

在使用Celery通过Redis进行任务处理时,需要什么来确保任务可靠?

2 个答案:

答案 0 :(得分:0)

在redis方面,只需确保您正在使用备份功能:

https://redis.io/topics/persistence

How to recover redis data from snapshot(rdb file) copied from another machine?

在芹菜方面,请确保您的任务是幂等的。如果重新提交,则只能运行一次。

如果任务正在处理中,则需要重新启动。然后希望当Redis和应用程序备份时,芹菜会看到一个不完整的任务,并尝试再次安排它。

答案 1 :(得分:0)

为了在使用Redis作为代理(和结果后端)时使Celery群集更健壮,我建议使用一个(或多个)副本。不幸的是,redis-py还不支持集群式Redis,但这只是时间问题。在复制模式下,当主服务器关闭时,副本将取代它,并且(几乎)完全透明。芹菜还支持Redis哨兵。

多年来,在确保在某些紧急情况下重新交付任务方面,Celery变得更加强大。如果由于丢失了工作程序而导致任务失败(有一个配置参数),则引发了某些异常,等等-将重新传送它,然后再次执行。