【问题标题】:What is required for reliable task processing in Celery when using Redis?使用 Redis 时,Celery 中可靠的任务处理需要什么?
【发布时间】:2019-11-20 13:27:26
【问题描述】:

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

使用Celery使用Redis做任务处理时,需要什么保证任务的可靠?

【问题讨论】:

    标签: python redis celery


    【解决方案1】:

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

    https://redis.io/topics/persistence

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

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

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

    【讨论】:

    • 如果不启用备份/持久性,任务会丢失,这样说公平吗?
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-06-25
      • 2018-06-03
      • 2013-06-15
      • 1970-01-01
      • 2021-04-23
      • 2018-08-06
      • 2015-03-15
      • 2015-12-18
      • 2018-05-03
      相关资源
      最近更新 更多