我们的服务有很多批处理作业,它们是在一台计算机上执行的,而该计算机现在已耗尽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/