编程 fastdp 实测笔记:Go 协程批量执行比 Ansible 快 5.6 倍的原理与上手

2026-08-30 14:16:00 views 4

fastdp 实测笔记:Go 协程批量执行比 Ansible 快 5.6 倍的原理与上手

场景:批量操作不该等 fork

几十台 Linux 机器,要同时跑 uptime、下发一份配置、回收一波日志。用 Ansible 能干活,但要先伺候 Python 依赖,跑起来还慢。慢在哪?每台目标机器都要 fork 一个进程去执行,机器一多,进程创建和调度开销全落在关键路径上。

fastdp 是用 Go 写的轻量级批量运维工具,项目地址:https://github.com/perfect12312645/fastdp 它把 Ansible 最常见的「按主机组批量操作」抽出来做成单二进制:约 8MB、零外部依赖、不需要 Python 环境。

定位与交付形态

  • 按主机组(web / db / node)管理目标机器,支持组名 + 指定 IP 混合,一次命令打一片
  • 面向运维、SRE,以及需要批量操作 Linux 主机、但不想被重型配置管理工具拖住的开发者
  • 交付形态:tar.gz / RPM / DEB 单二进制;支持 Linux amd64/arm64、macOS amd64/arm64
维度选型
开发语言Go(原生协程并发)
通信协议SSH(执行/连通性)、SFTP(文件拉取)
配置格式TOML(config.toml)、INI(host 清单)
认证方式密码 / 密钥,自动探测 ~/.ssh 下的私钥,无需手动指定

快在哪:协程替代 fork

作者给出的执行链路很直接:

读取主机组清单 → 按目标主机数拉起 Go 协程 → 每个协程独立维护一条 SSH 连接的生命周期(建立、执行、回收)→ 汇总各主机结果输出。

对比 Ansible 的多进程 fork,协程没有进程创建开销,短命令场景下差异非常明显。作者实测数据:4 台机器执行 date,fastdp 耗时 0.141s,Ansible 耗时 0.787s,约 5.6 倍。

这种速度来自设计上的取舍:fastdp 砍掉了复杂兼容层和冗余配置解析,整个生命周期只围绕「批量执行」这一件事,换来的是 8MB 单二进制、零依赖、启动即用。

image-20260529175910671

六个模块与值得注意的行为

模块行为
shell批量执行命令
copy文件分发,自动 MD5 校验,文件相同跳过,同步源文件权限
fetchSFTP 批量拉取,支持 *?[] 通配符,按 IP 自动分目录
script推送脚本到目标组并执行
pingSSH 连通性检测
check环境巡检,内置 18+ 标准字段(CPU / 内存 / 磁盘 / 防火墙 / SELinux / 时区等),支持自定义,可导出 csv / md / html / json 报告

其他关键细节:

  • 命令安全:硬拦截 rm -rf / 这类纯破坏性指令;危险命令交互确认,--yes 跳过
  • 执行审计:每次操作落一条 JSON 日志,含时间、用户、命令、目标、成败、耗时
  • 清单配置:支持 [100:105] IP 区间展开,自动识别零填充;清单支持 IP / 域名 / 区间
  • 配置加载:多级加载,用户目录优先级最高,互不干扰
  • Shell 补全:支持 zsh / bash,带全套 --help

上手记录

安装(Linux amd64):

tar -zxvf fastdp-v6-linux-amd64.tar.gz
cd fastdp-v6-linux-amd64
sudo cp fastdp /usr/local/bin/
sudo mkdir -p /etc/fastdp
sudo cp config.toml host fastdp-check.sh /etc/fastdp/

主机清单 /etc/fastdp/host

[web]
192.168.1.100 user=admin port=2222
192.168.1.101 password=secure@123

[db]
192.168.2.50 user=dbadmin
192.168.2.51 port=2200

常用命令:

fastdp shell -a "uptime" web             # web 组执行命令
fastdp copy -s app.conf -d /etc/ web     # 分发配置(MD5 校验)
fastdp fetch -r "/var/log/messages" all  # 批量拉日志
fastdp script -f init.sh db              # 推送脚本到 db 组执行
fastdp ping all                          # 检测 SSH 存活
fastdp check all                         # 全量环境巡检

适用与不适用

原文明确覆盖的场景:批量命令执行(重启服务、查看状态)、配置文件/脚本统一分发、日志与结果批量回收、主机连通性探测、上线前/故障时环境巡检。

不适用场景:原文未提供。如果团队需要的是声明式配置管理、状态收敛或复杂编排,是否适合 fastdp 需要拿实际环境自行验证。

image-20260529175910671

结论

fastdp 解决的是「对一批机器做同样的高频操作」这类问题,实测数据有明确对比,上手成本低。按原文给出的信息,它的设计重心在批量执行,不是全能配置管理,适合作为 Ansible 的轻量替代品,尤其在短平快的即时操作场景。项目地址和实测命令都在上面,可以直接复现。

复制全文 生成海报 运维 Go 批量执行 fastdp

推荐文章

程序员茄子在线接单