我想通过使用java和定义依赖关系在集群上分发Docker容器,这样当一个容器完成时,我可以在我的java代码中解析生成的输出。有许多mesos框架可以实现这一目标,我不确定采用哪一种:Marathon,Singularity,Chronos,Aurora。
到目前为止我学到了什么:
Marathon有一个非常好的java客户端api,但用于长期任务(不知道这是否是一个问题,因为我的任务不会运行那么久)我不认为我可以定义那种依赖。如果我使用马拉松,我将不得不轮询该应用程序的状态。 Chronos没有java api(至少我找不到)。 所以我可以选择Aurora和Singularity。
任何人都可以帮我推荐其中一个用于我的用例。
答案 0 :(得分:5)
Chronos(像Marathon一样)是用Scala编写的,因此应该很容易与任何基于JVM的应用程序集成。更好的是,它们(实际上可能全部4个)都有REST API,因此无论每个应用程序/服务的实现语言如何,您都可以只调整您的操作/查询。
对于您的用例,您可能更喜欢Chronos而非Marathon,因为您希望您的任务完成(而不是重新启动)。 Marathon用于长时间运行(马拉松,运行......获取?)任务,因此它将重新启动失败/已完成的任务。 Chronos就像是一个带有依赖关系的分布式cron,因此你可以安排你的工作,然后在完成以前的工作后开始依赖的工作,建立任意的工作DAG。
我会让其他人围绕Aurora和Singularity。我认为他们都支持类似cron的工作。
答案 1 :(得分:1)
Apache Aurora在February's 0.7.0 release中添加了Docker支持,并且可以使用相同的调度程序管理长时间运行的服务以及cron。它也是用Java编写的。
开发人员提供了关于how they schedule Docker containers using Aurora此功能的精彩技术演讲。虽然本演讲中提供的示例适用于长期运行的服务,但只需稍微更改您的作业配置即可指定服务与cron。
答案 2 :(得分:0)
Chronos对此很有好处。您可以在Chronos中创建依赖关系DAG。但是,它没有为您提供将参数从一个作业传递到另一个作业的机制。您必须序列化和反序列化整个群集中的数据库或共享存储中的内容。