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 校验,文件相同跳过,同步源文件权限 |
| fetch | SFTP 批量拉取,支持 *?[] 通配符,按 IP 自动分目录 |
| script | 推送脚本到目标组并执行 |
| ping | SSH 连通性检测 |
| 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 的轻量替代品,尤其在短平快的即时操作场景。项目地址和实测命令都在上面,可以直接复现。