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

Apache Mesos to run batch, singleton jobs?

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

其中大部分工作都非常简单。比如每隔5分钟查询一次我们的数据库,找到需要处理的数据,然后对这些数据进行处理,将结果写回数据库。

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

Apache Mesos 是我们替换作业服务器的正确解决方案吗?也就是说,我们是否可以创建很多小框架,每个框架都是一个定时作业,让 Chronos 以时间间隔触发它们中的每一个?我们能保证当一个作业被触发时,只有一次实例是运行ning吗?

是的,Mesos 上的 Chronos 可以解决问题。准确地说,你不是 'create a lot of small frameworks',而是工作(在 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 允许您影响放置。

您可能想要研究使用工作流管理/作业编排工具,例如 Luigi or Airflow。您可以定义依赖项并仅在作业所依赖的作业完成后 运行 拥有作业。