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



我们希望在 kubenetes 集群中运行 Celery/Redis,目前没有启用 Redis 持久性(一切都在内存中(。我担心:Redis 重新启动(丢失内存中数据(、工作线程重新启动/中断(由于崩溃和/或 Pod 调度(和暂时性网络问题。

使用

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

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

https://redis.io/topics/persistence

如何从从另一台机器复制的快照(rdb文件(中恢复redis数据?

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

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

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

多年来,芹菜在确保任务在某些关键情况下重新交付方面变得更加强大。如果任务因工作线程丢失而失败(有一个配置参数(,抛出一些异常等 - 它将被重新传递并再次执行。

相关内容

  • 没有找到相关文章

最新更新