【Apache之Mesos介绍】

What is Mesos? A distributed systems kernel

Mesos是Apache下的开源分布式资源管理框架,它被称为是分布式系统的内核。Mesos最初是由加州大学伯克利分校的AMPLab开发的,后在Twitter得到广泛使用。



 

Apache Mesos abstracts CPU, memory, storage, and other compute resources away from machines (physical or virtual), enabling fault-tolerant and elastic distributed systems to easily be built and run effectively.

Mesos is built using the same principles as the Linux kernel, only at a different level of abstraction. The Mesos

kernel runs on every machine and provides applications (e.g., Hadoop, Spark, Kafka, Elasticsearch) with API’s for

resource management and scheduling across entire datacenter and cloud environments.

Mesos的起源于Google的数据中心资源管理系统Borg。Twitter从Google的Borg系统中得到启发,然后就开发一个类似的资源管理系统来帮助他们摆脱可怕的“失败之鲸”。后来他们注意到加州大学伯克利分校AMPLab正在开发的名为Mesos的项目,这个项目的负责人是Ben Hindman,Ben是加州大学伯克利分校的博士研究生。后来Ben Hindman加入了Twitter,负责开发和部署Mesos。现在Mesos管理着Twitter超过30,0000台服务器上的应用部署,“失败之鲸”已成往事。

Mesos中包含四类主要的服务(实际上是一个socket server),它们分别是Mesos Master,Mesos Slave,SchedulerProcess和ExecutorProcess,它们之间通过Protocal Buffer消息进行通信,每种服务内部注册了若干种Protocal Buffer消息处理器,一旦收到某种消息,则会调用相应的消息处理器进行处理。



 

Mesos采用的也是现在分布式集群中比较流行的Master/Slave主从集群管理架构,Mesos master节点是整个集群的中枢,它责管理和分配整个Mesos集群的计算资源,调度上层Framework提交的任务,管理和分发所有任务的状态。这种主从架构设计简单,能够满足大多数正常情况下的集群运作需求,目前仍然存在于很多分布式的系统中,比如Hadoop、MySQL集群等。但是这种简单的设计存在一个致命缺陷,就是Mesos master必须做为一个服务程序持续存在于集群中,它虽然孤立,但是地位举足轻重,不容有失。

在单个Mesos master节点的集群中,如果Mesos master节点故障,或者服务不可用,虽然在每一个Slave节点上的任务可以继续运行,但是集群中新的资源将无法再分配给上层Framework,上层Framework将无法再利用已经收到的offer提交新任务,并且无法收到正在运行任务的状态更新。为了解决这个问题,提高Mesos集群的高可用性,减少Mesos master节点故障所带来的影响,Mesos集群采用了传统的主备冗余模式(Active-Standby)来支持一个Mesos集群中部署多个Mesos master节点,借助于ZooKeeper进行Leader的选举。选举出的Leader负责将集群的资源以契约(offer)的形式发送给上层的每一个Framework,并处理集群管理员与上层Framework的请求,另外几个Mesos master节点将作为Follower一直处于备用状态,并监控当前的状态,当Mesos master节点宕机,或服务中断之后,新Leader将会很快从Follower中选出来接管所有的服务,减少了Mesos集群服务的宕机时间,大大提高了集群的可用性。

Kubernetes是一个对于虚拟机或者实体机场景具有Google风格集群管理功能的开源项目。它能良好的运行于现代的操作系统环境(比如CoreOS和Red Hat Atomic),并且提供可以被你管控的轻量级的计算节点。

Mesos是基于两阶段调度的集群管理器。高度简化来说,Mesos用来管理集群资源,并且向其提供高层级的能接受这些资源来启动任务的“框架”。相反,Kubernetes是基于Borg背后的理念而设计的集群管理器。Google的集群管理器没有两阶段调度的概念。



 

猜你喜欢

转载自gaojingsong.iteye.com/blog/2348827