Apache Mesos 实际上做了什么?

What does Apache Mesos actually do?

我正在努力思考 Apache Mesos,需要澄清一些问题。

我对 Mesos 的 理解 是它是一个安装在每个 physical/VM 服务器上的可执行文件(“节点” ) 在集群中,然后提供 Java API(以某种方式)将每个单独的节点视为计算资源的集合池 (CPU/RAM/etc)。因此,对于针对 Java API 进行编码的程序,它们只会看到一组资源,并且不必担心 how/where 代码已部署。

所以一方面,我在这里的理解可能根本上是错误的(在这种情况下,请纠正我!)。但是,如果我在目标上,那么 Java API(由 Mesos 提供)如何允许 Java 客户端利用这些资源?!?有人可以举一个 Mesos 的具体例子吗?


更新

看看下面我那糟糕的画。如果我正确理解 Mesos 架构,我们有一个由 3 个物理服务器(phys01phys02phys03)组成的集群。这些物理设备中的每一个都是 运行 一个 Ubuntu 主机(或其他)。通过管理程序,比如 Xen,我们可以 运行 1+ 个 VM。

我对 Docker 和 CoreOS 很感兴趣,所以我会在这个例子中使用它们,但我猜这同样适用于其他非容器设置。

所以在每个虚拟机上我们都有 CoreOS。 运行 在每个 CoreOS 实例上都是一个 Mesos executable/server。集群中的所有 Mesos 节点都将它们下面的所有内容视为单个资源池,并且可以将工件任意部署到 Mesos 集群,Mesos 将确定将它们实际部署到哪个 CoreOS 实例。

运行 在 Mesos 之上是一个 "Mesos framework" 比如 Marathon 或 Kubernetes。 运行 Kubernetes 内部有各种 Docker 容器(C1 - C4)。

这种对 Mesos 的理解或多或少是正确的吗?

您的总结几乎是正确的,但没有反映出mesos所代表的本质。项目背后的公司 mesosphere 的愿景是创建一个 "Datacenter Operating System",mesos 是它的内核,类似于普通 OS 的内核。 API不限于Java,可以使用C、C++、Java/Scala或Python。 如果您已经设置了 mesos 集群,正如您在问题中所描述的那样并希望使用您的资源,您通常通过 框架 而不是 运行 来完成您的工作负载直接在上面。这并不意味着这很复杂 here is a very small example in Scala which demonstrates this. Frameworks exist for multiple popular distributed data processing systems like Apache Spark, Apache Cassandra. There are other frameworks such as Chronos a cron on data center level or Marathon,它允许您 运行 Docker 基于应用程序。

更新:

是的,mesos 将关注集群中的位置,因为这就是内核所做的——有限资源的调度和管理。但是,您勾画的设置提出了几个明显的问题。

mesos 以下层数: Installing mesos on CoreOS 是可能的,但我认为很麻烦。这不是 运行ning mesos 的典型场景——通常它被移动到尽可能低的层(在您的情况下 Ubuntu 以上)。所以我希望你有充分的理由 运行ning CoreOS and 管理程序。

mesos 之上的层数: Kubernetes ist 作为框架可用,mesosphere 似乎在其中投入了很多精力。然而,毫无疑问,在功能方面存在部分重叠——尤其是在调度方面。如果您想基于容器安排基本工作负载,您最好使用 Marathon or in the future maybe Aurora。所以在这里我也希望你有充分的理由进行这种安排。 旁注:Kubernetes 类似于 Marathon,具有更广泛的方法并且非常自以为是。