Mesos 源码解析

作者:禅与计算机程序设计艺术

1.简介

Mesos 是 Apache 基金会开源的一个分布式系统资源管理器框架。目前已成为 Hadoop、Spark 和 Aurora 的基础组件之一。Mesos 本身是一个独立运行的集群管理系统,可以提供作业调度、资源隔离、容错等功能。另外,它还包括一个分布式文件系统(HDFS),称作 MESOS-SANDBOX,支持跨主机的任务之间的共享数据访问。因此,Mesos 可以理解成一个高性能的分布式计算框架,结合了 HDFS 文件系统和 Apache YARN 资源管理系统两个最著名的开源项目。 Mesos 从底层开发者角度设计出来,具有模块化架构和良好的可扩展性。它的主要特点有以下几点:

1) 分布式多进程架构:Mesos 使用分布式多进程架构模型实现功能的横向扩展。

2) 健壮的容错机制:Mesos 能够在遇到各种故障时自动进行容错处理,保证服务的可用性。

3) 支持多种编程语言:Mesos 提供了 Java、C++、Python、Go 等多种编程语言的 API,方便应用开发人员集成 Mesos 并构建自己的系统。

4) 可靠的调度策略:Mesos 使用基于策略的优先级调度算法,确保任务尽可能均匀地分布在整个集群中。

Mesos 的源码分析旨在帮助读者了解 Mesos 的整体架构,学习其架构实现的功能逻辑。本文将逐个介绍 Mesos 的各个模块及其实现细节。希望通过阅读本文,读者能够对 Mesos 有更深入的理解和应用。

2.Mesos 模块

Mesos 由以下几个模块组成:

1) Master 进程:负责管理集群中的所有资源,调度应用程序。

2) Agent 进程:负责在每个节点上执行任务。

3) Executor 进程:运行在每个节点上的命令,负责运行应用程序代码。

4) Scheduler 进程:负责跟踪资源可用性、任务进度和状态。

5) Framework 进程:Mesos 提供了一套框架,允许用户编写自己的调度程序,满足特定业务需求。

3.Master 进程

3.1 角色及职责

Master 进程有两种角色:

1)主 Master:在集群启动时选举产生,用于协调集群工作,确保集群的整体稳定运行。当主 Master 挂掉后,另一台机器上的 Slave 将充任新的主 Master。

2)从 Master:在集群启动时同步任务信息,用于任务调度。当主 Master 发生故障时,从 Master 会接替继续执行任务调度。

Master 的主要职责如下:

1)资源管理:Master 通过查看资源的利用率和空闲情况,调整任务调度和分配资源的顺序;

2)任务调度:Master 根据任务要求、集群资源状况和任务历史,决定如何为应用部署资源和执行任务;

3)容错恢复:Master 负责监控集群中各个组件的健康状态,如果发现异常则进行自我修复或通知相应组件;

4)配置管理:Master 提供了一个动态的配置中心,能够实时更新应用的配置,并通知各个组件;

5)日志管理:Master 能够记录集群中所有事件的日志,便于追查问题。

3.2 功能概述

Master 在整个 Mesos 中扮演着重要角色,它的主要功能如下:

1)资源管理:Master 对集群中的资源进行统一管理,根据资源的利用率和空闲情况进行调度和分配。

2)任务调度:Master 根据任务的优先级、硬件要求、网络带宽等约束条件,选择合适的 Slave 执行任务。

3)容错恢复:Master 具备自我修复能力,在出现故障时能够快速检测、诊断和解决问题,使集群保持高可用。

4)配置管理:Master 提供了一个动态的配置中心,各个组件根据需要订阅感兴趣的配置项,并实时获取最新版本。

5)日志管理:Master 记录集群中所有事件的日志,包括组件启动、停止、崩溃、失败等行为,方便管理员及时定位和排除问题。

3.3 Master 启动流程

Mesos Master 的启动流程如下图所示:

图中详细描述了 Master 的启动过程。当 Master 进程启动时,它首先向 ZooKeeper 服务注册自己,并等待被选举为主 Master。此后,它会等待 Master 选举完成,然后对整个集群进行资源管理、任务调度和容错恢复。

由于 Master 需要对整个集群的资源进行管理,因此 Master 在启动时,首先需要读取配置文件,根据配置文件中的参数和集群环境进行初始化设置。Master 会读取当前集群中的 Slaves 信息、可用资源等,并进行容量计算,确定集群中各个 Slave 上可用的资源。

Master 会把这些信息通过心跳的方式发送给所有 Slaves。之后,Master 会和所有 Slave 建立通信通道,并开启心跳监测。若某个 Slave 一段时间没有回应心跳,Master 会认为该 Slave 不可用,Master 会把该 Slave 从集群中移除。

当 Master 收到某个 Slave 的请求后,Master 会将资源分配给该 Slave。Master 通过评估不同 Slave 上任务的优先级、硬件资源的空闲程度、网络带宽等因素,决定应该将资源分配给哪个 Slave 来执行任务。Master 会同时把任务信息写入数据库,用于持久化存储。

当 Slave 开始执行任务时,Master 会检查 Slave 是否已经准备好接受任务。若 Slave 不可用或者资源不足,Master 会通知其它 Slave 代替执行任务。当 Slave 完成任务后,Master 会更新任务的状态,重新分配资源,直到所有任务完成。

4.Agent 进程

4.1 角色及职责

Agent 进程主要负责执行应用程序,一般会在每个节点上启动。当 Agent 启动后,它会向 Master 报告自身的存在,并获取集群中的任务信息。Agent 会定时向 Master 发送心跳包,Master 接收到 Agent 的心跳后,才会认为 Agent 正常工作。

4.2 功能概述

Agent 在整个 Mesos 中扮演着重要角色,它的主要功能如下:

1)执行任务:Agent 接收 Master 发来的任务,并在本地启动一个 Executor 进程来运行任务的代码。

2)资源管理:Agent 获取 Master 分配的资源,并根据资源的空闲情况和任务执行进度进行调度。

3)容错恢复:Agent 具有自我修复能力,在出现故障时能够快速检测、诊断和解决问题,并尽快恢复正常工作。

4)日志管理:Agent 记录每个任务的日志,包括任务启动、停止、失败等行为,方便管理员及时定位和排除问题。

4.3 Agent 启动流程

Mesos Agent 的启动流程如下图所示:

图中详细描述了 Agent 的启动过程。当 Agent 进程启动时,它会向 Master 报告自身的存在,并等待 Master 发来任务。若 Master 检测到有 Slave 请求启动新任务,Agent 会下载相关的依赖和镜像,然后启动 Executor 进程来运行任务的代码。

Agent 通过心跳方式向 Master 发送消息,并随时接收 Master 的指令。当 Agent 因为某些原因不能正常向 Master 发送心跳,或者因为某些原因长期失联超过一定时限时,Master 会认为 Agent 不可用,Agent 会向其他 Slave 索要任务资源。

当 Agent 收到 Master 发来的任务时,Agent 会启动一个 Executor 进程来运行任务的代码。Executor 进程是由用户定义的命令行程序,它主要负责执行指定的任务。Agent 会和 Executor 进程之间建立一个管道,并通过管道传输任务相关的信息,如命令、输入输出文件、执行环境等。

当 Executor 进程完成任务后,Agent 会把结果反馈给 Master ,并根据 Master 的指令继续执行下一个任务。

5.Framework 进程

Mesos 也提供了一套框架,用于开发用户自定义的调度程序。Framework 是一个独立的进程,它运行在用户定义的计算框架上。Framework 通过调用 Master 提供的接口,发起各种请求,比如提交任务、声明资源、查询任务状态等。Framework 可以充分利用 Mesos 的资源调度、容错和弹性扩展能力,提升资源利用率、降低计算成本,并满足特定应用场景下的性能需求。

6.总结与展望

本次 Mesos 源码分析的主要目的是为了让读者更加熟悉 Mesos 的整体架构,以及 Mesos 的各个模块的实现原理。读者通过对源代码的阅读,可以进一步了解 Mesos 内部的运作机制。

本文只是介绍了 Mesos 的一些核心模块,还有很多重要的模块和特性没有提及。在后续的文章中,我们将陆续介绍 Mesos 的其它方面,并探讨其中关键的设计思路和实现原理。

猜你喜欢

转载自blog.csdn.net/universsky2015/article/details/133504548
今日推荐