1

我想通过使用 java 在集群上分发 Docker 容器并定义依赖项,这样当一个容器完成后,我就可以在我的 java 代码中解析生成的输出。有许多 mesos 框架可以实现这一点,我不确定该采用哪一个:Marathon、Singularity、Chronos、Aurora。

到目前为止我学到了什么:

Marathon 有一个非常好的 java 客户端 api,但用于长期任务(不知道这是否有问题,因为我的任务不会运行那么长时间),我认为我不能定义那种依赖关系。如果我要使用马拉松,我将不得不轮询应用程序的状态。Chronos 没有 java api(至少我找不到)。所以我可以在极光和奇点之间进行选择。

任何人都可以为我的用例提供帮助并向我推荐其中一个。

4

3 回答 3

5

Chronos(如 Marathon)是用 Scala 编写的,因此它应该很容易与任何基于 JVM 的应用程序集成。更好的是,它们(实际上可能全部 4 个)都有 REST API,因此无论每个应用程序/服务的实现语言如何,您都可以卷曲您的操作/查询。

对于您的用例,您可能更喜欢 Chronos 而不是 Marathon,因为您希望您的任务能够完成(而不是重新启动)。Marathon 适用于长时间运行的(马拉松、跑步……明白了吗?)任务,因此它将重新启动失败/已完成的任务。Chronos 就像一个具有依赖关系的分布式 cron,因此您可以安排您的作业,然后添加相关作业以在之前的作业完成后开始,构建任意 DAG 作业。

我会让其他人加入关于极光和奇点的事情。我认为他们都支持类似 cron 的工作。

于 2015-02-12T12:14:27.177 回答
1

Apache Aurora在2 月的 0.7.0 版本中添加了 Docker 支持,并且可以使用相同的调度程序管理长时间运行的服务和 cron。它也是用Java编写的。

提供此功能的开发人员进行了一场精彩的技术演讲,介绍了他们如何使用 Aurora 调度 Docker 容器。尽管演讲中提供的示例是针对长期运行的服务的,但您只需稍微更改您的作业配置即可指定服务与 cron。

于 2015-05-31T01:21:59.647 回答
0

Chronos 对此有好处。您可以在 Chronos 中创建依赖项 DAG。但是,它没有为您提供将参数从一项作业传递到另一项作业的机制。您必须序列化和反序列化数据库中的内容或跨集群的共享存储。

于 2015-02-12T12:24:44.153 回答