我试图了解Mesos的各个组件如何协同工作,并找到包含以下架构概述的this excellent tutorial:
我对此有一些不太明确的担忧(无论是在文章中还是在官方Mesos docs中):
答案 0 :(得分:20)
很棒的问题! 我相信看一下像Rendler这样的示例框架会非常有帮助。这可能会回答你的大多数问题,并让你感觉内部的框架。
现在让我试着回答一下在此之后可能仍然存在的问题。
调度程序不在任何特殊节点上,但请记住,调度程序也可以进行故障转移(与分布式系统中的任何部分一样)。
看看Rendler或at the framework development guide。
我相信Rendler是了解Task / Executor关系的一个很好的例子。刚开始阅读主github页面上的README / description。
当需要此类执行程序的第一个任务发送到此节点时,将在每个节点上启动执行程序。在此之后它将保留在该节点上。
希望这有帮助!
答案 1 :(得分:17)
要添加到js84的出色响应,
resourceOffers()
回调中获取资源优惠,其中您的调度程序应该(至少)启动子集上的一个任务(或全部)提供的资源。您可能还希望实现statusUpdate()
回调来处理任务完成/失败。
请注意,如果像Marathon / Chronos / Aurora / Kubernetes这样的现有框架就足够了,您甚至可能不需要实现自己的调度程序。CommandInfo
中指定TaskInfo
,而不是嵌入ExecutorInfo
内)。但是,如果您想构建自定义执行程序,则至少需要实现launchTask()
,理想情况下还需要killTask()
。sleep 1000
或echo "Hello World"
,也可以是docker容器(通过ContainerInfo
),例如{{ 1}}。或者,如果您使用自定义执行程序,则执行程序定义任务是什么以及如何运行它,因此任务可以作为执行程序进程中的另一个线程运行,或者只是成为队列中的一个项目 - 线程执行者。答案 2 :(得分:1)
调度程序:是接受或拒绝此优惠的策略。我们可以自己编写调度程序,也可以使用像chronos这样的现有调度程序。在调度程序中,我们应该评估可用资源,然后接受或拒绝。
调度程序功能:示例可能就像假设你有一个需要8个cpus才能运行的任务,但来自mesos的提议可能是6个cpus,它不能满足此需求你可以拒绝。
执行程序功能:执行程序处理任务的状态相关信息。您需要实现的一组API,就像在mesos slave中分配的任务的状态一样。在运行执行程序的mesos slave中当前可用的cpu数是多少。
执行者的具体示例: chronos
动态/动态安装和执行:这些是不可能的,您需要预先配置执行程序。但是,您可以使用自动缩放功能复制执行程序。