# Nomad 技术专栏 | 第五章:调度引擎——评估机制 (Evaluation)

Nomad:开源工作负载调度器入门教程 摘要: Nomad是HashiCorp开发的轻量级开源工作负载调度器,支持容器化与非容器化应用部署,具有简单易用、资源占用低、跨平台等优势。相比Kubernetes,Nomad学习曲线更平缓,适合混合工作负载环境。其核心概念包括任务(Jobs)、客户端(Clients)、服务器(Servers)等,通过HCL配置文件实现灵活调度。文章详细介绍了Nomad的安装、配置及任务部署流程(以Redis为例),并展示了日志查看、任务管理等基础操作。此外,Nomad还支持服务发现、滚动更新等高级功能,能与Consul、 阅读详情

这是 Nomad 系列文章的第五章。在上一章,我们了解了 MemDB 如何作为集群的“记忆”存储状态。现在,当状态发生变化(例如用户提交了一个新作业,或者一台机器突然宕机),Nomad 必须做出反应。

这种“感知变化并计算应对方案”的过程,就是本章的主角——评估 (Evaluation)。


前言:不要为了调度而调度

在 Nomad 中,"调度"并不是一个持续运行的死循环,而是事件驱动的。

当集群处于静默状态时,调度器是完全休眠的。只有当某种“事件”打破了平静,Nomad 才会生成一个 Evaluation(简称 Eval)。你可以把 Eval 看作是一张**“体检单”**,它告诉调度器:“嘿,集群的状态变了,请重新评估一下这个 Job 还需要什么资源。”

本章我们将揭秘 Nomad 如何通过 Eval 机制,在毫秒级内完成复杂的调度决策。


1. 触发器:谁动了我的集群?

Eval 不会凭空产生,它总是由特定的事件触发。常见的触发场景包括:

  • Job Register:用户提交或更新了一个作业(最常见)。
  • Node Update:一个 Client 节点加入、甚至或者资源发生变化。
  • Node Failure:心跳检测机制发现某节点 Down 了,系统自动触发 Eval 来迁移该节点上的任务。
  • Periodic:定时任务触发。

一旦生成,Eval 就会被送入一个核心组件——Eval Broker。


2. 调度总管:Eval Broker

Eval Broker 是调度引擎的“交通指挥官”。它的主要职责是管理所有待处理的评估请求,确保重要的任务优先得到处理。

根据源码分析,Eval Broker 具备以下关键特性:

  1. 优先级队列:它不仅仅是先进先出 (FIFO)。Service 类型的作业(如 Web 服务)通常比 Batch 类型的作业(如离线计算)拥有更高的优先级。
  2. 至少一次传递 (At-least-once Delivery):确保每个 Eval 最终都会被调度器处理,不会因为网络抖动而丢失。
  3. 超时与重试:如果一个调度器领取了任务却迟迟不反馈(比如处理该 Eval 的 Server 挂了),Broker 会在超时后将该 Eval 重新放回队列,分配给其他 Server。

3. 分布式调度:Follower 也能干活

这是 Nomad 架构中极其精妙的一点。
我们知道 Raft Leader 负责所有的写操作,但如果所有的调度计算(CPU 密集型任务)也都由 Leader 承担,Leader 很快就会被累垮。

Nomad 采用了 “乐观并发 (Optimistic Concurrency)” 的设计来实现分布式调度:

  1. 分发:Leader 上的 Eval Broker 可以将 pending 状态的 Eval 分发给集群中的 Follower 节点。
  2. 并行计算:Follower 节点运行调度算法(Feasibility Checking -> Ranking),计算出最佳的放置方案。
  3. 提交计划:Follower 算好后,生成一个 Plan,发回给 Leader。
  4. 最终裁决:Leader 检查这个 Plan 是否有效(例如:Plan 说要把任务放在节点 A,Leader 会检查节点 A 的资源在这一瞬间是否依然充足)。
    • 通过:写入 Raft Log,生成 Allocation。
    • 冲突:驳回 Plan,Follower 重新计算。

这种设计使得 Nomad 的调度吞吐量可以随着 Server 节点的增加而线性增长。


4. 调度三部曲:过滤、打分、选优

当一个调度器(无论是 Leader 还是 Follower)拿到 Eval 后,它会执行以下逻辑:

  1. 可行性检查 (Feasibility Checking):

    • 遍历 MemDB 中的 Node 表。
    • 剔除不符合硬性约束的节点(如:CPU 不够、缺少特定 Driver、不满足 constraint 标签)。
  2. 打分与排名 (Ranking):

    • 对剩下的候选节点进行打分。
    • Binpack(装箱)策略:优先填满一台机器,节省资源(适合云环境省钱)。
    • Spread(打散)策略:尽可能把副本分散到不同机器、机架或数据中心(适合高可用)。
  3. 生成计划 (Plan):

    • 选出得分最高的节点,生成一个“拟定”的分配方案。

5. 架构图解:Eval 的一生

让我们通过 Mermaid 图来看清一个 Eval 是如何流转的:

Follower Server

Leader Server

Trigger Events

1. Dequeue Eval
4. Create Plan
5. Submit Plan
6. Check Conflict?

OK

Conflict

7. Create Allocation

Scheduling Logic

Job Submit

Node Failure

Eval Broker
Priority Queue

Plan Applier

Raft Log

Scheduler Worker

Client

6. 总结

Nomad 的调度引擎展示了如何在一致性与性能之间取得平衡:

  • Eval 是核心对象:它是连接状态变化与调度动作的载体。
  • Broker 是调度中枢:保证了任务调度的有序性和可靠性。
  • 分布式计算:通过让 Follower 参与计算,Nomad 避免了单点计算瓶颈,能够轻松支撑 10,000+ 节点的集群。

理解了 Nomad 如何制定“作战计划”,下一章我们将把视角转回 Client 端,深入了解 Client 的启动与注册流程,看看这些执行单元是如何加入集群并时刻准备接受任务的。

一款比 K8S 更好用的编排工具——Nomad 中运行 Docker Nomad 是一款基于开源,功能强大的调度程序和集群编排引擎。可以轻松管理从单机到大规模集群的各种容器和非容器化应用程序,实现快速部署和跨平台运行。 阅读详情

相关推荐

一款比 K8S 更好用的编排工具——Nomad 单机部署

Nomad 是一款基于开源,功能强大的调度程序和集群编排引擎。可以轻松管理从单机到大规模集群的各种容器和非容器化应用程序,实现快速部署和跨平台运行。

1909

Nomad任务调度与分配机制深度解析

Nomad任务调度与分配机制深度解析 【免费下载链接】nomad hashicorp/nomad: Nomad 是 HashiCorp 公司开发的一款易于部署和管理的调度器,它支持跨数据中心进行容器、虚拟机和任务进程等工作负载的自动化部署与管理。 ...

gitblog_00140的博客 624

Nomad:Nomad是一种易于使用,灵活且高性能的工作负载编排器,可以部署微服务,批处理,容器化和非容器化应用程序的混合。 Nomad易于操作和扩展,并具有本地Consul和Vault集成

Nomad民族 Nomad是一种简单而灵活的工作负载Orchestrator可以部署和管理容器(, ),非集装箱应用程序(, )和虚拟机( 大规模跨越的预置型和云)。 Linux,Windows和macOS支持Nomad。 Nomad的商业版本也已上市。 网址: : 教程: 论坛: 邮件列表: 吉特(Gitter): Nomad提供了几个关键功能: 部署容器和旧版应用程序:Nomad作为协调器的灵活性使组织可以在同一基础结构上一起运行容器,旧版和批处理应用程序。 Nomad为旧版应用程序带来了核心编排优势,而无需通过可插入任务驱动程序进行容器化。 简单可靠:Nomad作为一个二进制文件运行,并且完全独立,将资源管理和调度结合到一个系统中。 Nomad不需要任何外部服务即可进行存储或协调。 Nomad自动处理应用程序,节点和驱动程序故障。 Nomad是分布式的且具有弹性,

HashiCorp Nomad 调度机制深度解析

HashiCorp Nomad 调度机制深度解析 【免费下载链接】nomad hashicorp/nomad: Nomad 是 HashiCorp 公司开发的一款易于部署和管理的调度器,它支持跨数据中心进行容器、虚拟机和任务进程等工作负载的自动化部署与管理。 ...

gitblog_00299的博客 346

ChatGPT Plus完整开通指南:从账号注册到稳定使用全流程

自然语言处理(NLP)技术通过深度学习模型实现对人类语言的理解与生成,其核心原理是基于Transformer架构的大规模预训练。GPT-4作为当前最先进的生成式AI模型,在代码编写、文档分析等场景展现出显著的技术价值。在实际应用中,稳定的网络环境和合规的支付方式是确保AI助手持续服务的关键因素。针对ChatGPT Plus的开通,需要系统性地解决账号验证、虚拟信用卡支付等工程实践问题,才能实现工作流的高效整合。

weixin_34239592的博客 428

电商客服效率翻倍!手把手教你用影刀RPA+AI搭建智能回复系统(附实战配置)

本文详细介绍了如何利用影刀RPA+AI技术搭建电商智能客服系统,实现24小时在线回复,大幅提升客服效率。通过零代码配置、Excel词库管理和AI语义理解,系统能处理80%常规咨询,响应速度稳定在3秒内,特别适合中小电商降低成本并提升服务质量。

weixin_42520661的博客 550

Nomad 学习之《Hello World》

Nomad 一款功能强大、简单灵活的调度程序和集群编排器,可以轻松管理从单机到大规模集群的各种容器和非容器化应用程序。

1865

Pycharm环境配置完整教程

本文主要介绍python解释器安装、Pycharm环境配置以及运行第一个程序的零基础的教程,即使是python小白也能正确配置相应的python学习环境哦!

悠眠小虫的博客 2万+

Nomad 系列-安装

开新坑!近期算是把自己的家庭实验室环境初步搞好了,终于可以开始进入正题研究了。首先开始的是 HashiCorp Nomad 系列,欢迎阅读。关于 Nomad 的简介,之前在大规模 IoT 边缘容器集群管理的几种架构-2-HashiCorp 解决方案 Nomad有提到过,这里再快速过一遍:Nomad: 一个简单而灵活的(主要是容器,但有不至于容器的)调度器和编排器,可在内部和云端大规模部署和管理容器和非容器化的应用程序Nomad 使开发者能够使用声明式的基础设施即代码来部署应用程序。

east4ming的博客 1341

EM算法求解混合伯努利模型

本文记录了EM算法求解混合伯努利分布的推导,并提供了matlab实验代码。

霁月难逢 彩云易散 6969

手把手教你:如何为自制的STM32H7飞控板适配PX4固件(基于NuttX)

本文详细介绍了如何为自制的STM32H7飞控板适配PX4固件,基于NuttX系统进行移植。从硬件设计规范到软件环境配置,再到PX4固件的移植与调试,提供了完整的实战指南。特别分享了如何复用FMU-v6u参考设计以节省开发时间,并解决了常见问题,帮助开发者快速实现高性能飞控系统的搭建。

weixin_27697385的博客 475

Docker容器编排工具 - Nomad:Nomad是一种用于容器编排和调度的开源工具,由HashiCorp开发

在当今云原生应用的部署和管理中,容器编排工具扮演着至关重要的角色。Nomad是HashiCorp公司开发的一款开源容器编排工具,提供简单、灵活且高效的方式来管理和调度大规模的容器化应用程序。本文将介绍Nomad的基本概念、特点以及如何使用Nomad进行容器编排。Nomad是一种用于容器编排和调度的开源工具,由HashiCorp开发。Nomad支持多种类型的工作负载,包括Docker容器、Java 应用程序、Windows 服务等。

Quantity>Quality 1628

【即插即用模块】卷积篇 | TGRS 2025 | HLKConv:小核+空洞=大核,感受野一致,但更轻更准!

本文介绍了分层大核卷积模块HLKConv,该模块通过动态大核+空洞卷积实现高效感受野扩展,将超大核卷积分解为小核+空洞卷积(如53×53核用17×17+dilation=3实现),计算量仅为普通大核的1/10。模块采用双分支设计:基础卷积分支捕捉局部细节,大核空洞分支捕捉长距离关联,通过1×1卷积融合。实验表明HLKConv在红外小目标检测中优于传统大核卷积,适用于高分辨率视觉任务。代码实现了不同核尺寸的配置,输入输出特征维度保持不变,计算效率显著提升。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 346

HashiCorp Nomad 调度器详解:服务、批处理与系统任务调度机制

HashiCorp Nomad 调度器详解:服务、批处理与系统任务调度机制 【免费下载链接】nomad hashicorp/nomad: Nomad 是 HashiCorp 公司开发的一款易于部署和管理的调度器,它支持跨数据中心进行容器、虚拟机和任务进程等工作负载的自动化部署与管理。 ...

gitblog_00268的博客 388

【生产实践】PostgreSQL高可用Patroni安装(超详细已踩坑)

一 安装Patroni 0 Patroni 对Python的版本要求 我安装的是Patroni最新版本 :4.0.3,Patroni 对Python 版本有要求,没有具体的版本矩阵,但是根据每个版本发布信息可以得到以下信息 Patroni 4.0 需要 Python 3.8 以上(可以根据下面发布版本信息推理出) Version 3.0.2 Version 3.0.2 dropped support of Python older than 3.6. 版本3.0.2不再支持3.6版本以下的P

DBA之路的博客 1740

华为OD机试2025A卷 - BOSS的收入(Java & Python& JS & C++ & C )

华为OD机试2025A卷 - BOSS的收入(Jav一个XX产品行销总公司,只有一个boss,其有若干一级分销,一级分销又有若干二级分销,每个分销只有唯一的上级分销。规定,每个月,下级分销需要将自己的总收入(自己的+下级上交的)每满100元上交15元给自己的上级。现给出一组分销的关系,和每个分销的收入,请找出boss并计算出这个boss的收入。输入:分销关系和收入:[[分销id 上级分销id 收入], [分销id 上级分销id 收入], [分销id 上级分销id 收入]]输出:[boss的ID, 总收入]

算法大师! 1171

Nomad技术手册:调度(Scheduling)

调度是Nomad的核心功能之一。它是将任务从作业分配给客户机的过程。此过程必须遵循作业中声明的约束,并优化资源利用率。本文档记录了Nomad中调度工作方式的详细信息,以帮助用户和开发人员构建一个心智模型。这个设计很大程度上受到了谷歌在针对大型计算集群的灵活的、可伸缩的调度器Omega,以及使用Borg在谷歌进行大规模集群管理上的工作的启发。 高级主题!这个页面涵盖了Nomad的技术细节。您不需要...

勇往直前的专栏 2855

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

集群管理器和调度器 Nomad

Nomad 详细介绍 Nomad 是一个集群管理器和调度器,专为微服务和批量处理工作流设计。Nomad 是分布式,高可用,可扩展到跨数据中心和区域的数千个节点。 Nomad 提供一个常规工作流跨基础设施部署应用。开发者使用一个声明式作业规范来定义应用该如何部署,资源有什么要求(CPU,内存,硬盘)。Nomad 接收这些作业,查找可用的资源来运行应用。调度...

weixin_33832340的博客 573

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

十大主流集群调度系统大盘点

众所周知,集群调度系统是现代数据中心举足轻重的组件,一个好的调度器,能提高集群资源利用率,实现自动化部署和高可用,节约用户投资,“让开发者最大可能地把精力集中到上层业务逻辑上”。考虑到时下各路调度系统眼花缭乱,小编打算从Google的三代集群调度架构演进切入,对十个主流集群调度系统进行分门别类大盘点。开始盘点前,让我们先快速回顾一下Google的三代集群调度架构——中央式(Monolithic)、...

vip_iter的博客 1万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

DevOps

自我阐述 今天是2020.1.1号,也已经有1年的时间没有写博客了,自己目前已经不做客户端相关的工作了,目前大多数在做游戏服务端,以及DevOps。 什么是DevOps 我自己理解的DevOps既不是一种技术、也不是平台、也不是职位、而是一种技术文化,倡导开发和运维深度结合,提倡每个人持续学习、同时也象征公司内部的企业文化 (因为DevOps想在公司发展起来,必须是由上至下) ...

Lee的博客 648

Nomad 多job/group/task调度测试

目录Nomad 多job/group/task调度测试1.搭建nomad集群2.多job测试2.多group测试4.多task测试5.总结 Nomad 多job/group/task调度测试 关系:job 包含 group 包含 task 1.搭建nomad集群 本测试使用三台ubuntu18.04虚拟机,IP地址分别为: 虚拟机1:192.168.60.10 虚拟机2:192.168.60.11 虚拟机3:192.168.60.12 具体搭建方法见Nomad集群 自身高可用测试。 使用的docker镜像为

weixin_43739110的博客 1331

使用Nomad构建弹性基础架构:重新启动任务

Nomad是一个功能强大、灵活的调度器,适用于长期运行的服务和批处理任务。通过广泛的驱动程序,Nomad可以调度基于容器的工作负载、原始二进制文件、java应用程序等等。Nomad操作简单,易伸缩,与HashiCorp Consul(服务注册),Vault(证书管理)产品无缝集成。 Nomad为开发人员提供了自助服务基础设施。Nomad任务使用高级声明格式语法进行描述,该语法是版本控制的,并将基...

勇往直前的专栏 4342

sap系统中的batch_分布式作业调度系统nomad

作业调度系统nomad介绍与使用nomad简介nomad是一个分布式作业调度系统,其可以管理容器、微服务、批处理任务等。其官网如下: https://www.nomadproject.io/ Nomad is a flexible workload orchestrator that enables an organization to easily deploy and manage any ...

weixin_29053067的博客 1064

从HashiCorp Nomad对上百万容器进行调度所学到的经验

  Docker在2013年三月实现了开源发布,它的出现让软件开发行业对于现代化应用的打包以及部署方式发生了巨大的变化。紧随着Docker的发布,各种具有竞争性、致敬性以及支持性的容器技术纷纷涌现,为这一领域带来了极大的关注度,同时也引起了人们的反思。这一系列文章将解答读者的各种困惑,对如何在企业中实际使用容器进行分析。 这一系列文章首先将对容器背后的核心技术进行观察,了解开发者目前如何使用容...

勇往直前的专栏 3127

给 LikeShop 加一个自定义分销佣金规则:改了哪几个文件

为在LikeShop中添加自定义分销佣金规则(如二级分销商团队激励),需精准定位核心文件:DistributionLogic.php 实现计算逻辑扩展,后台配置逻辑支持可配性,数据库迁移新增字段。关键在于不硬编码比例,通过租户隔离的配置表实现灵活管理。结算与售后逻辑仅在涉及差异化条件时才需调整。务必验证全链路状态流转,避免“算对但结不了”或“退了仍返佣”问题。核心改动聚焦于计算、配置、数据三端,确保可维护性与可配置性。

hudie765的博客 295

【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端

上一篇讲了 MCP 的概念:标准协议、三大角色、M+N 替代 M×N。

nice_lcj520的博客 493
上一篇: 深度对比:CKPlayer、西瓜播放器(XGPlayer)与ZWPlayer,谁才是开发者的“减负”神器?
下一篇: # Nomad 技术专栏 | 第六章:接入与存活——Client 的生命周期
逻辑玩家
博客等级 码龄19年 75粉丝 108原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值