gpt4 book ai didi

docker - 跨 docker 集群调度任务的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-05 00:52:11 28 4
gpt4 key购买 nike

目前,我在一台服务器上运行了一个应用程序。有一个 crontab 设置,因此根据指定的规则,在某些时间运行任务。

现在,我正在考虑将我的应用程序迁移到 docker 容器中,以便我能够独立运行我的应用程序的多个实例。我想知道该怎么做 如何跨多个 docker 容器调度任务 .

假设我有一个 php 命令,每小时通过 API 从 3rd 方应用程序获取新数据。目前,我会使用 cron 来安排它,如下所示:0 */1 * * * php /some/path/index.php mycommand .可以以不同的频率启动多个类似的命令。

我不能简单地将 crontab 打包到我的 docker 镜像中,因为当有 5 个容器正在运行时,该命令将启动 5 次。我只想在运行容器计数时独立启动它一次。

实现这一目标的理想解决方案是什么?

最佳答案

您可以使用锁定机制,使用 redis 之类的东西。基本上它会像这样工作。

脚本唤醒后,它做的第一件事就是尝试获取锁。如果它获得了锁,则它向前移动,如果其他东西获得了锁,则退出。执行脚本的操作,然后释放锁。

由于一次只能有一个脚本获得锁,所以它只允许脚本运行一次。

脚本完成后移除锁很重要,并且还要给锁添加一个 TTL,这样如果脚本在释放锁之前死亡,那么在 TTL 到期后锁会自动打开。

这里有一些关于如何使用 Redis 作为分布式锁的文档。 https://redis.io/topics/distlock

关于docker - 跨 docker 集群调度任务的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43281216/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com