当前位置: 首页 > news >正文

Nx 智能分发机制(Nx Agents + Nx Cloud)

Nx 智能分发机制(Nx Agents + Nx Cloud)

阶段关键做的事作用
1. 收集信息- Project Graph:解析整个 workspace 依赖关系(谁依赖谁)
- 历史统计:每次 CI 结束后将每个任务的实际用时与缓存命中情况上传到 Nx Cloud
获得带“权重”(预计耗时)的依赖 DAG
2. 生成执行计划- 计算 critical path(最慢依赖链)
- 用历史耗时为每个 task 估价
- 优先调度 会先执行阻塞下游的大任务
将总时长逼近「最长公共库 + 最慢应用」的理论极限
3. 声明式启动分发npx nx-cloud start-ci-run --distribute-on="15 linux-medium-plus-js" --stop-agents-after="e2e-ci"
主 job 做两件事:
① 解析后续所有 nx … 命令
② 把它们提交给 Nx Cloud 调度器
你无需编写任务‑机器映射,仓库结构变化也不用改 CI 脚本
4. Nx Agents 执行- 每台 agent 启动后向 Nx Cloud 拉取「下一条最合适的任务」
- 调度器基于 耗时 + 依赖拓扑 实时分配,保证所有机器尽量满载
- 任务结果立即上传到远程缓存
以任务粒度(而非 VM 粒度)调度,最大化并发、最小化空闲
5. 动态自学习 & 弹性扩容- 跑几次后,历史数据更准确,计划不断微调
- 加 --dynamically-allocate-agents 后,Nx Cloud 会根据 PR 改动面自动决定启动多少台机器
PR 越大机器越多,既省钱又保证最坏情形够快

为什么说它「智能」?

  1. 任务‑而非机器‑中心
    传统做法要先把任务按机器分块写死在 CI 脚本里;Nx Agents 只关心“空闲 agent 数量”,依赖图 + 统计数据实时排程,仓库结构改变也不用改脚本。

  2. 历史耗时启发式调度
    根据真实运行时间,Nx 把长任务尽早塞进队列、把短任务穿插其间,逼近“理论最短壁钟时间”。

  3. 自动拆分大任务
    对 Playwright / Cypress E2E 测试,Nx 会在调度前把单一长任务切成多个 spec task,然后分派到多机并行。

  4. 动态扩缩容
    当 PR 改动范围小,Nx 只拉少量 agent;改动大时自动扩容。


GitHub Actions 最小示例

jobs:main:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v4with:fetch-depth: 0# 启动 Nx Cloud 分发,3 台中号 JS runner- run: pnpm dlx nx-cloud start-ci-run               --distribute-on="3 linux-medium-js"               --stop-agents-after="build"# 把任务交给 Nx Cloud 自动分派- run: pnpm exec nx affected -t lint test build

效果示例
vsavkin/interstellar 示例仓库,同一套任务从 87 min → 9 min,仅靠上面一行配置实现。


与缓存的关系

方案解决的问题命中时表现未命中时表现
本地/远程缓存平均值直接复用结果,≈ 0 s仍需完整执行
智能分发最坏值由缓存决定将执行时间压到理论最短壁钟时间
两者结合稳定且极快

结论

Nx 的智能分发(Nx Agents + Nx Cloud)是一套基于 依赖图历史统计数据 的自学习调度系统:

  • 一句配置即可接入
  • 自动计算关键路径并动态并行
  • 动态把任务撒到多机并行
  • 随仓库演化自行调整

让中大型 Monorepo 的 CI 从「数小时」压缩到「数分钟」

http://www.xdnf.cn/news/275941.html

相关文章:

  • 48变现干货:分销裂变方式提高销量
  • Assetto Corsa 神力科莎 [DLC 解锁] [Steam] [Windows]
  • 【AI论文】COMPACT:从原子级到复杂级的组合式视觉能力调优
  • 13.Excel:分列
  • PyTorch_张量形状操作
  • 探索大语言模型(LLM):Qwen3速测指南(transformers调用)
  • c++26新功能——Pack indexing
  • RTX-3090 Qwen3-8B Dify RAG环境搭建
  • (即插即用模块-Attention部分) 六十四、(2024) LSKA 可分离大核注意力
  • ubuntu-PyQt5安装+PyCharm配置QtDesigner + QtUIC
  • 关于离散化算法的看法与感悟
  • 软考-软件设计师中级备考 8、进程管理
  • 49认知干货:产品的生命周期及类型汇总
  • 【Java项目脚手架系列】第一篇:Maven基础项目脚手架
  • Rust的安全卫生原则
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】2.2 多表关联技术(INNER JOIN/LEFT JOIN/FULL JOIN)
  • C++八股--6--mysql 日志与并发控制
  • WSL在D盘安装Ubuntu
  • 纯文本Text转Html网页转换器
  • 方案精读:110页华为云数据中心解决方案技术方案【附全文阅读】
  • 项目收尾管理
  • 时序分解 | Matlab基于WOA-MVMD鲸鱼算法优化多元变分模态分解
  • C盘莫名其妙一直变大
  • 智能工厂边缘计算:从数据采集到实时决策
  • WPF之尺寸属性层次
  • 如何从GitHub上调研优秀的开源项目,并魔改应用于工作中?
  • 【言语理解】中心理解题目之选项分析
  • Unity与Unreal Engine(UE)的深度解析及高级用法
  • 【AI面试准备】模型自动化评估经验
  • MCP协议与Dify集成教程