我们的服务有很多批处理作业,它们是在一台计算机上执行的,而该计算机现在已耗尽CPU资源。

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

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

Apache Mesos是我们替换作业服务器的正确解决方案吗?也就是说,我们是否可以创建许多小框架,每个小框架都是计划的工作,并让Chronos在一定时间间隔内触发每个小框架?我们可以保证在触发作业时仅运行一次实例吗?

最佳答案

是的,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": "[email protected]"
}

现在,首先您要注册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允许您影响位置。

关于mesos - Apache Mesos运行批处理,单例作业?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37356724/

10-16 20:08