首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨docker集群调度任务的最佳方法是什么?

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

Stack Overflow用户
提问于 2017-04-07 14:54:58
回答 2查看 2K关注 0票数 5

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

现在,我正在考虑将我的应用程序迁移到docker容器中,以便能够独立运行我的应用程序的多个实例。我想知道的是如何做,如何安排跨多个码头容器的任务,。

假设我有一个php命令,它每小时通过API从第三方应用程序中获取新数据。目前,我会使用cron来调度它:0 */1 * * * php /some/path/index.php mycommand。可以有多个类似的命令在不同的频率发射。

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-07 15:17:00

您可以使用锁定机制,使用类似redis之类的工具。基本上是这样的。

脚本醒了,它做的第一件事,就是试着获得锁。如果它得到了锁,那么它向前移动,如果其他东西有锁,那么退出。执行脚本所做的操作,然后释放锁。

因为一次只有一个脚本可以获得锁,所以它只允许脚本运行一次。

重要的是,在脚本完成时删除锁,并向锁中添加一个TTL,以便如果脚本在释放锁之前死亡,则锁将在TTL过期后自动打开。

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

票数 5
EN

Stack Overflow用户

发布于 2017-04-09 16:25:43

在您的情况下,一个简单的策略是使用具有不同角色的容器。例如,与使用响应HTTP请求的5个容器和运行cron不同,您可以让4个容器只运行您的应用程序,一个只运行cron作业。

如果您需要扩展您的cron作业以添加更多节点,那么您将需要一个分布式队列/锁解决方案,正如@Ken所描述的那样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43281216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档