当前位置: 首页 > 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 从「数小时」压缩到「数分钟」

相关文章:

  • 【程序+论文】大规模新能源并网下的火电机组深度调峰经济调度
  • lombok详解
  • 人工智能《文章10:AI未来已来》
  • 详解迁移学习,模型参数冻结,优化器参数定义
  • 蘑菇管理——AI与思维模型【94】
  • 【运维】构建基于Python的自动化运维平台:用Flask和Celery打造高效管理工具
  • TensorFlow 多卡训练 tf多卡训练
  • Android第四次面试总结之Java基础篇(补充)
  • NPP库中libnppc模块介绍
  • [原创](现代Delphi 12指南):[macOS 64bit App开发]: [1]如何加载动态链接库, 并无缝支持原生底层开发?
  • QpushButton 扩展InteractiveButtonBase
  • 【中间件】brpc_基础_remote_task_queue
  • AI功能测试源码AI聊天AI视觉AI图像AI视频AI画外音写作助手AI测试多语言无加密源码
  • 企业架构革新指南:中台的定义、实践与未来
  • 供应链算法整理(二)--- 智能补货
  • 哈夫曼树和哈夫曼编码
  • 【自存】python使用matplotlib正常显示中文、负号
  • 智能工厂边缘计算:从数据采集到实时决策
  • 【Linux】SELinux 的基本操作与防火墙的管理
  • 力扣-链表-2 两数相加
  • 经济日报:合力推进民企与毕业生双向奔赴
  • 申活观察|精致精准精细,城市“双面镜”照见怎样的海派活力
  • 首都航空:太原至三亚航班巡航阶段出现机械故障,已备降南宁机场
  • CMG亚太总站:没有邀请韩国偶像团体举办巡回演出
  • 对谈|“对工作说不”是不接地气吗?
  • 即日起,“应急使命·2025”演习公开征集新质救援能力