
集群管理任务调度后端【免费下载链接】mesosApache Mesos项目地址https://gitcode.com/gh_mirrors/mesos1/mesos点击查看免费下载本篇技术指南以 Apache Mesos 官方架构文档为主体系统讲解 Mesos 集群的核心组件划分——master 守护进程、agent 守护进程与运行任务的 framework——以及实现数据中心级细粒度资源共享的关键机制resource offer资源邀约。读完本文你将掌握 Mesos 的组件拓扑、Offer 的完整生命周期从 agent 上报空闲资源到任务启动、分配策略模块化的插件设计以及框架如何通过拒绝 Offer 延迟调度在不暴露内部约束的前提下实现数据本地性。文中涉及的 Offer 消息模型、层级分配器等概念均有当前仓库源码佐证便于进一步深入。一、Mesos 的三类核心组件如上图所示Mesos 集群由三类角色构成Master主节点守护进程集群的中央控制节点负责管理集群中每台节点上运行的 agent 守护进程并面向各种 framework 提供资源分配服务。在典型高可用部署中还会通过 ZooKeeper 仲裁维护一个主 master 和若干备用 masterstandby master实现故障转移。Agent工作节点守护进程运行在每个集群节点上负责承载框架下发的任务task。图中可见每个 agent 内部运行着一个或多个 executor执行器executor 内部承载具体任务。Framework计算框架运行于 Mesos 之上的应用框架如 Hadoop、MPI 等它们向 master 注册并在 agent 上执行任务。在源码层面master 与 agent 的实现分别位于 src/master/ 与 src/slave/仓库目录仍沿用slave命名详见下文术语说明而框架调度器与执行器的编程接口定义在 include/mesos/scheduler.hpp 与 include/mesos/executor.hpp。术语说明slave 已废弃统一为 agent原架构文档特别强调关键字slave已废弃官方正式术语为agent。需要留意的是存在一个兼容性过渡基于 driver 的传统框架Mesos 0.28.0 及更早版本的老式 API在收到 Offer 时字段仍以slave_idSlaveID呈现使用 v1 HTTP API 的现代框架则收到agent_id即AgentID。这一细节在解析 Offer 数据时需要格外注意两种 ID 指向同一资源所在节点。仓库中的 include/mesos/mesos.proto 同时保留了SlaveID、AgentID相关定义正是这段过渡期的体现。二、细粒度资源共享与 Resource Offer 机制Mesos 的核心设计目标是让多个框架以细粒度方式共享同一批集群资源CPU、内存等。实现这一目标的关键机制就是resource offermaster 将各 agent 上可用的空闲资源组织成一份份邀约派发给框架。一次 Offer 在数据层面对应一个agent ID, resource1: amount1, resource2: amount2, ...形式的资源清单。在 include/mesos/mesos.proto 中Offer消息的字段定义与文档描述完全对应// Describes some resources available on a slave. An offer only // contains resources from a single slave. message Offer { required OfferID id 1; required FrameworkID framework_id 2; required SlaveID slave_id 3; required string hostname 4; repeated Resource resources 5; repeated Attribute attributes 7; repeated ExecutorID executor_ids 6; // ... url、domain、unavailability、allocation_info 等扩展字段 }从定义中可以读出几个重要的设计约束一份 Offer 只包含来自单个 agent 的资源注释明确说明 An offer only contains resources from a single slave这保证了框架在决策时无需跨节点拆分。resources字段以可重复的Resource消息承载每个 Resource 描述一种资源类型如cpus、mem及其数量这也是文档中agent ID, resource1: amount1, resource2: amount2, ...清单形式的代码级映射。attributes携带 agent 的属性信息供框架在决策时判断节点特征如机架位置、GPU 存在与否。除了资源本身Offer还携带unavailability计划内不可用时间窗例如维护窗口与allocation_info角色分配信息等扩展字段为后续的维护、配额等高级特性提供基础。分配策略由多少决定master 说了算master 决定向每个框架提供多少资源how many这个决策遵循某种组织级策略例如公平共享fair sharing让各框架在资源占用上趋于均衡严格优先级strict priority让高优先级框架优先获得资源。为支持多样化策略master 采用模块化架构资源分配逻辑被抽象为可插拔的 allocation module分配模块通过插件机制即可接入新的分配算法而无需改动 master 主体。源码佐证层级分配器与排序器插件当前仓库中的默认分配器位于 src/master/allocator/mesos/hierarchical.hpp其核心是一个模板化的HierarchicalAllocatorProcessRoleSorter, FrameworkSorter通过组合两套 sorter排序器完成两级分配——先按角色role分配再在角色内部按框架分配typedef HierarchicalAllocatorProcessDRFSorter, DRFSorter HierarchicalDRFAllocatorProcess; typedef MesosAllocatorHierarchicalDRFAllocatorProcess HierarchicalDRFAllocator; typedef HierarchicalAllocatorProcessRandomSorter, RandomSorter HierarchicalRandomAllocatorProcess; typedef MesosAllocatorHierarchicalRandomAllocatorProcess HierarchicalRandomAllocator;可见默认分配器即为DRF主导资源公平Dominant Resource Fairness实现DRFSorter位于 src/master/allocator/mesos/sorter/drf/sorter.hpp同时还提供RandomSorter加权随机均匀分配变体位于 src/master/allocator/mesos/sorter/random/sorter.hpp。master 侧可通过--role_sorter、--framework_sorter等标志切换排序器这正是模块化插件机制的落地形态。三、一次完整的资源 Offer 流程逐步拆解下图展示了一个框架被调度运行任务的完整时序下面按编号逐步解读。Agent 上报空闲资源Agent 1 向 master 报告自己空闲 4 个 CPU、4 GB 内存。master 随即调用分配策略模块策略决定将全部可用资源打包后发给框架 1。Master 派发 Offermaster 将描述 Agent 1 可用资源的 Offers1, 4cpu, 4gb, ...发送给框架 1 的调度器。框架返回任务描述框架 1 的调度器接受该 Offer并向 master 回复要运行的两个任务分别需要2 CPUs, 1 GB RAM与1 CPUs, 2 GB RAM。Master 下发任务、Agent 启动执行master 将任务发送给 Agent 1Agent 为框架的执行器executor分配相应资源执行器进而启动这两个任务图中以虚线边框标识。由于还剩 1 个 CPU 和 1 GB 内存未分配分配模块现在可以将这部分资源打包 Offer 给框架 2。图中的s1, 4cpu, 4gb, ...形式即对应文档所述的agent ID, resource: amount, ...清单而fw1, task1, 2cpu, 1gb, ...则体现了任务与框架、节点的绑定关系。该流程是持续循环的每当任务结束、资源重新变空闲时新一轮的 Offer 流程便会再次触发从而让资源在框架之间保持高效轮转实现细粒度共享的本质——资源不再以整台机器为粒度长期独占而是随任务生命周期动态分合。框架侧决策选择哪些资源与 master 决定多少不同框架的调度器负责决定使用哪些资源which。当框架接受一份 Offer 时它向 Mesos 提交希望在对应资源上运行的任务描述Mesos 随后在相应 agent 上启动这些任务。任务描述在 protobuf 层面由TaskInfo消息承载其中CommandInfo等字段定义了任务如何启动更多细节可参考 框架开发指南。四、薄接口、独立演进与拒绝 Offer机制Mesos 提供的是一个刻意保持轻薄的接口它只负责资源的量化分配与任务下发不感知框架内部的作业语义。这种设计带来了两个直接收益规模可扩展master 无需理解各框架的复杂约束分配逻辑保持简单高效框架独立演进新框架只需实现调度器/执行器接口即可接入无需修改 Mesos 内核。由此引出一个关键问题Mesos 不知道框架的约束框架的约束如何被满足例如一个框架需要读取的数据存放在某些特定节点上Mesos 并不感知这些节点数据本地性data locality如何保证Mesos 的答案朴素而巧妙——赋予框架拒绝 Offer 的能力框架拒绝不满足自身约束的 Offer框架只接受满足约束的 Offer。这样一来框架可以在不向 Mesos 暴露任何内部信息数据位置、依赖关系、硬件偏好等的前提下自行筛选出可用的资源。延迟调度Delay Scheduling让数据本地性接近最优在此基础上文档明确指出一个已被实践证明有效的简单策略——延迟调度delay scheduling当框架所需的 Offer例如包含输入数据所在节点的资源暂时没有出现时框架不立即拒绝而是等待一段有限时间后再考虑接受其他位置的资源。该策略在实践中能取得近乎最优的数据本地性nearly optimal data locality。延迟调度的本质是在资源利用效率与数据访问局部性之间做权衡等待越久越可能拿到数据所在的节点从而省去跨网络搬运输入数据但等待过久会浪费空闲资源。框架开发指南在实践层面给出了配套建议例如拒绝 Offer 时使用较大的Filters.refuse_seconds超时如 1 小时给其他框架留出使用资源的机会也避免自己在短时间内反复收到同一批不满意的资源在无任务可启动时应进入SUPPRESS抑制状态让 master 优先把资源派发给有工作的框架不要频繁REVIVE复活否则会清空所有过滤器等效于每次都短超时拒绝。这些指导共同构成了多框架共存场景下优雅地拒绝、耐心地等待的最佳实践详见 框架开发指南。五、框架的组成Scheduler 与 Executor运行在 Mesos 之上的每个框架由两部分组成Scheduler调度器向 master 注册接收资源 Offer并代表框架决定接受哪些资源、提交哪些任务。调度器通常运行在框架自己的控制节点上可与 master 同机也可独立部署。Executor执行器由 agent 节点启动的进程负责在 agent 上真正运行框架的任务。一个 agent 上可同时存在多个执行器执行器内部承载一个或多个任务。master 负责把任务派发到正确的 agentagent 负责为执行器分配资源并监督任务运行。对于任务与进程一一对应的简单场景框架可以直接使用 Mesos 自带的 command executor自 Mesos 1.1 起还提供了可运行任务组的 default executor有特殊需求的框架例如不希望任务与进程 1:1 对应则可以编写自定义执行器并通过 URI 下载或共享挂载等方式分发到所有 agent。以上内容的完整展开含ExecutorInfo、TaskInfo的 protobuf 定义与示例同样见 框架开发指南。从通信方式上看现代框架Mesos 1.0 及以上推荐直接使用 v1 HTTP API 与 master 交互执行器侧对应 执行器 HTTP API老版本框架则使用 driver 类库C/Java/Scala/Python进行编程。仓库 src/examples/ 下提供了test_framework.cpp、test_executor.cpp等可直接运行的示例实现是理解 scheduler/executor 实际代码结构的最佳起点。六、总结回顾全文Apache Mesos 架构的精髓可以浓缩为三个设计决策角色分离、职责分明master 管多少分配策略、框架调度器管哪些资源选择、agent 管落地执行器启动任务三层各司其职接口轻薄分配策略可插拔通过 allocation module 插件机制如默认的 DRF 层级分配器、可选的随机排序器在不改动主流程的前提下支持公平共享、严格优先级、配额保证等多种组织策略约束交由框架自治通过拒绝不合适的 Offer 延迟调度等待合适资源框架在不暴露内部信息的前提下实现数据本地性等高级目标同时保持整个系统的规模可扩展性。理解这三条主线就抓住了 Mesos 资源调度的核心脉络。进一步深入可阅读 框架开发指南、调度器 HTTP API 文档、执行器 HTTP API 文档以及源码中的 Offer 消息定义 和 层级分配器实现。赞分享集群管理任务调度后端【免费下载链接】mesosApache Mesos项目地址https://gitcode.com/gh_mirrors/mesos1/mesos点击查看免费下载相关推荐Apache Mesos架构深度解析理解Master、Agent与Framework的高效协作机制Apache Mesos架构深度解析理解Master、Agent与Framework的高效协作机制 Apache Mesos是一个开源的集群管理平台能够将整云原生Claude Code安装教程从零跑通终端AI编码助手的完整指南Claude Code安装教程从零跑通终端AI编码助手的完整指南 第一次接手一个陌生项目光是定位函数名就得翻半天代码最后还是问了一句老同事就能解决的话这AI 应用AI 技能/插件开发工具tract未来展望AI推理引擎的发展趋势与技术创新tract未来展望AI推理引擎的发展趋势与技术创新 在当今人工智能技术飞速发展的时代 AI推理引擎 已成为将训练好的神经网络模型部署到实际应用中的关键组件。深度学习大模型嵌入式语音/音频计算机视觉上一篇XUnity自动翻译器打破语言壁垒畅玩全球Unity游戏下一篇使用 ogb 包在 DGL 中加载 OGB 基准数据集Graph / Node / Link 三类任务实战与源码解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考