Mesos是集群管理器,于2009年由加利福尼亚大学发起,已经在很多公司的生产环境上使用过,包括Twitter和Airbnb。2013年7月,成为Apache的最高级项目。Mesos通过在多种不同框架之间共享可用资源来提高资源使用率。Mesos可以看做是数据中心的内核,提供所有节点资源的统一试图并且可以无缝地访问多节点资源,这种做法给开发人员和运维人员都带来了巨大的好处,它将不同的框架整合到统一的基础框架上,不仅能够节约基础架构的花费,而且给运维团队带来了便利,也帮助开发人员简化了基础架构的接口。
一. Mesos架构
最小化接口是Mesos可以使不同框架之间的资源共享更为高效,将任务的真正调度和执行交给框架来负责,因此框架可以用多种方式来实现自己的调度和容错机制。Mesos的核心和框架可以独立并行发展。
1.1 Mesos Master
Master负责在slave资源和框架之间进行调度。由ZooKeeper使用分布式一致性算法选举产生一名活动的Master,Master本身不会用来做任何重负载计算,除了负责任务和框架之间的通信,它只需Slave的资源以资源offer的形式提供给框架,并且根据已接受的offer在Slave上启动任务。资源offer是由节点上可用资源组成的向量,代表每个Slave所提供给制定框架的资源。
1.2Mesos Slave
Slave是Mesos集群里真正工作的节点,它们管理单个节点上的资源,比如CPU、内存、端口等,同时执行框架递交的任务。Slave遵守资源政策来适应业务优先级,此外还对运行的任务进行适当的隔离。Slave的资源可以通过Slave资源和Slave属性来进行描述。Slave属性表示了每个Slave的特殊信息,Mesos并不理解这些属性,由各个框架对这些属性信息进行解析和利用。
1.3框架
运行在Mesos智商的分布式应用称为框架。框架通过Mesos所提供的通用资源API来实现需求。框架由框架调度器和执行器组成。调度器负责协调任务的执行,执行器提供任务执行控制的功能,一个执行器中可运行一个或多个任务(多进程)。框架API提供和调度器以及执行器通信的功能。
1.4通信
Mesos利用一个和HTTP类似的协议在各个组件之间进行通信。libprocess库实现了线程间的异步通信,它的消息是不可变的,这样易于内部消息的并发。下列API使用了Mesos的通信机制。
调度器API:框架调度器和Mesos Master进行通信。
执行器API:执行器和Mesos Slave之间进行通信。
内部API:Mesos Master和Slave之间进行通信。
运维API:主要为运维人员准备,并被Web UI等类新应用使用。
每个角色都需要通过HTTP POST请求发送消息,消息的路径有角色名和消息名组成。Mesos使用Protocol buffers对消息进行序列化,消息的解析由消息的接收方实现。