Apache Mesos运行批处理单例作业?

时间:2016-05-20 22:24:33

标签: mesos

我们的服务有很多批处理作业,从一台机器执行,现在耗尽了CPU资源。

这些工作大多非常简单。例如,每5分钟一次,查询我们的数据库并查找需要处理的数据,然后处理这些数据,将结果写回数据库。

诀窍是所有这些作业一次只能运行一个实例,因为如果两个实例同时运行,我们将遇到竞争条件并产生重复结果。

Apache Mesos是否是我们更换作业服务器的正确解决方案?也就是说,我们可以创建许多小框架,每个框架都是预定作业,并且Chronos可以按时间间隔触发每个框架吗?我们可以保证,当一个工作被触发时,只有一个实例正在运行吗?

2 个答案:

答案 0 :(得分:0)

是的,Mesos上的Chronos可以解决这个问题。确切地说,你不会创造很多小框架。但是工作(在Chronos); Chronos是Mesos框架之一,还有许多其他如Marathon或Cook

模式如下(对于容器化作业),例如在名为test.json的文档中:

{
"name": "test",
"cpus": 0.1,
"mem": 100,
"shell": true,
"command": "echo I AM DOING SOME SERIOUS WORK",
"async": false,
"container": {
    "type": "DOCKER",
    "image": "ubuntu:14.04"
},
"schedule": "R/2016-05-23T17:00:00Z/PT1M",
"owner": "michael.hausenblas@dcos.io"
}

现在,首先您要注册Chronos作业(我在这里使用http,但也可以使用curl):

$ http POST http://$CHRONOS_NODE:8080/service/chronos/scheduler/iso8601 < test.json

上述工作将于每天下午5点开始执行,如果您愿意,可以手动触发:

$ http PUT http://$CHRONOS_NODE:8080/service/chronos/scheduler/job/test

最后但并非最不重要的是,Chronos constraints允许您影响展示位置。

答案 1 :(得分:0)

您可能希望使用工作流程管理/作业编排工具,例如LuigiAirflow。您可以定义依赖关系,并使作业仅在它们所依赖的作业完成后运行。