【问题标题】:Apache Mesos to run batch, singleton jobs?Apache Mesos 运行批处理、单例作业?
【发布时间】:2016-05-20 22:24:32
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: mesos


    【解决方案1】:

    是的,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 允许您影响放置。

    【讨论】:

    • 只是出于兴趣,Chronos 如何避免潜在的“多重执行问题”?我想这必须在应用程序方面解决...... AFAIK 约束无法解决这个问题。
    • 我想你有一个观点,@Tobi,单靠约束并不能解决 OP 的问题,但我相信结合相关工作它应该可以工作:mesos.github.io/chronos/docs/api.html#adding-a-dependent-job
    【解决方案2】:

    您可能需要考虑使用工作流管理/作业编排工具,例如 LuigiAirflow。您可以定义依赖项并让作业仅在它们所依赖的作业完成后运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-25
      • 1970-01-01
      • 1970-01-01
      • 2021-01-15
      • 2015-07-30
      • 2014-06-20
      • 2013-06-14
      相关资源
      最近更新 更多