news 2026/5/10 17:05:41

网工为什么要学 Rust?用一行命令颠覆你的认知

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
网工为什么要学 Rust?用一行命令颠覆你的认知

网工为什么要学 Rust?用一行命令颠覆你的认知

摘要:Python 慢、Go 够用、Rust 惊艳。本文从部署复杂度、运行性能、内存安全、并发模型四个维度,实测对比 Python/Go/Rust 在网络自动化场景下的表现,附带 benchmark 数据。读完你会明白:对于基础设施工具,Rust 是终极答案。


一、一个网工的信仰危机

2024 年,我写了 3 年的 Python 网络自动化脚本。巡检脚本、配置备份、IP 扫描——什么都是 Python。

直到有一天,我把脚本部署到一台全新服务器上:

$ python3 main.py ModuleNotFoundError: No module named'netmiko'$ pipinstallnetmiko ERROR: Could notfinda version that satisfies the requirement... $ python3--versionPython3.8.10# 系统自带,太老了$aptinstallpython3.9# 然后是一连串的依赖地狱...

我突然意识到:Python 脚本的"可移植性"是个笑话。

那天我开始寻找一种可以编译成单一二进制文件、拷贝即运行的语言。

Go 和 Rust 进入了视野。


二、三语言实战对比:同一个巡检任务

场景:对 100 台交换机执行display version,解析软件版本号。

Python 实现(asyncio + netmiko)

importasynciofromnetmikoimportConnectHandlerasyncdefcheck_device(ip):device={'device_type':'huawei','host':ip,'username':'admin','password':'admin123',}try:withConnectHandler(**device)asconn:output=conn.send_command('display version')# 正则提取版本号...returnoutputexceptExceptionase:returnstr(e)asyncdefmain():ips=[f'192.168.1.{i}'foriinrange(1,101)]tasks=[check_device(ip)foripinips]results=awaitasyncio.gather(*tasks)print(f'Checked{len(results)}devices')asyncio.run(main())

Go 实现(goroutine + crypto/ssh)

packagemainimport("fmt""sync""golang.org/x/crypto/ssh")funccheckDevice(ipstring,wg*sync.WaitGroup){deferwg.Done()config:=&ssh.ClientConfig{User:"admin",Auth:[]ssh.AuthMethod{ssh.Password("admin123")},HostKeyCallback:ssh.InsecureIgnoreHostKey(),}client,err:=ssh.Dial("tcp",ip+":22",config)iferr!=nil{return}deferclient.Close()// 执行命令...}funcmain(){varwg sync.WaitGroupfori:=1;i<=100;i++{wg.Add(1)gocheckDevice(fmt.Sprintf("192.168.1.%d",i),&wg)}wg.Wait()}

Rust 实现(tokio + russh)

usetokio::task::JoinSet;userussh::*;asyncfncheck_device(ip:&str)->Result<String>{letconfig=client::Config::default();letmutclient=russh::client::connect(config,(ip,22)).await?;// 认证、执行命令...Ok(output)}#[tokio::main]asyncfnmain(){letmuttasks=JoinSet::new();foriin1..=100{letip=format!("192.168.1.{}",i);tasks.spawn(asyncmove{check_device(&ip).await});}whileletSome(result)=tasks.join_next().await{// 处理结果...}}

三、实测性能对比

测试环境:Ubuntu 22.04, 16 核 CPU, 32GB RAM,100 台模拟设备

指标PythonGoRust
并发数受 GIL 限制原生 goroutine原生 async
内存占用380 MB45 MB28 MB
100 台巡检耗时47.3 秒18.7 秒15.2 秒
冷启动时间0.8 秒0.01 秒0.003 秒
二进制大小不适用11 MB8 MB
部署方式pip install + venv单文件单文件

Rust 在内存效率上碾压 Python 13 倍,比 Go 还省 40%。


四、为什么 Rust 更适合基础设施工具

1. 零成本部署

# Python: 需要这些aptinstallpython3.9 python3-pip pipinstallnetmiko paramiko snmpwalk...# Go: 编译好了一个二进制scpnetops-tool server:/usr/local/bin/# Rust: 同理,单文件部署,比 Go 更小更快scpnexus-ops server:/usr/local/bin/ systemctl start nexus-ops

2. 编译期保证

Rust 的编译器会在编译阶段抓住所有类型错误、空指针、数据竞争:

// 这段代码根本编译不过——编译器救了未来的你letdevice=get_device(id);// 返回 Option<Device>letip=device.ip_address;// ❌ 编译错误!Option 需要处理 None// 正确写法:ifletSome(device)=get_device(id){letip=device.ip_address;// ✅ 安全}

Python 只有在运行到那一行时才会崩溃。凌晨三点的生产故障和新功能没关系?编译器说:有关系。

3. 内存安全无 GC

Go 有 GC(垃圾回收),在大规模并发场景下会出现 STW(Stop The World)延迟。Rust 的所有权系统在编译期就解决了内存管理,运行时零开销。

// Rust 的所有权系统——编译期内存管理fnprocess_device(device:Device)->String{format!("{}:{}",device.name,device.ip_address)// device 在这里被自动释放,无需 GC}

4. 错误处理显式化

// Rust: 强制处理每个可能的错误letcontent=matchfs::read_to_string("/etc/config"){Ok(s)=>s,Err(e)=>{tracing::error!("Failed to read config: {}",e);returnErr(e.into());}};// Python: 错误可能被无声吞掉try:content=open('/etc/config').read()except:pass # 谁写的???

五、网工学 Rust 的难度曲线

第 1 天:ownership / borrowing —— 想自杀 第 3 天:Vec / HashMap / String —— 好像能写东西了 第 7 天:serde / tokio —— 居然跑起来了 第 14 天:写了一个完整的 Web API —— 真香 第 30 天:回头看 Python 代码 —— 这也能叫语言?

Rust 的难度被夸大了。对于写过 Python 或 Go 的工程师,两周就能写生产级代码。难度主要集中在所有权和生命周期,但 Web 开发场景中大部分时间不需要手动标注生命周期。


六、什么时候不该用 Rust?

坦白说,Rust 不是万能药:

场景推荐语言
一次性数据分析脚本Python ✅
机器学习/深度学习Python ✅
快速原型验证Python/Go ✅
长期运行的基础设施Rust ✅
网络设备管理平台Rust ✅
CLI 工具链Rust ✅

七、本系列技术栈

后端:Rust + Axum + Tokio 数据库:SQLite + rusqlite SSH:russh SNMP:自研异步客户端 前端:原生 JS + CSS 变量 + ECharts 部署:单二进制 + systemd

下一期预告

《5 分钟搭好开发环境:Rust + Axum 项目从零开始》——从cargo new到启动第一个 Web API,手把手带你写出可运行的项目骨架。


环境信息:Rust 1.85+, Ubuntu 22.04 / macOS 14+

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 15:28:37

第5天:分支结构

Python学习100天(从入门到精通系列文章) 文章目录 Python学习100天(从入门到精通系列文章) 前言 一、什么是分支结构 二、使用 if 和 else 构造分支结构 2.1 简单 if 语句 2.2 if-else 语句 2.3 if-elif-else 多分支 三、使用 match 和 case 构造分支结构 3.1 基本用法 3.2…

作者头像 李华
网站建设 2026/5/8 15:27:36

FPGA工程师的AD9516时钟配置避坑指南:从Vivado工程到上板调试全流程

FPGA工程师的AD9516时钟配置避坑指南&#xff1a;从Vivado工程到上板调试全流程 在FPGA项目开发中&#xff0c;时钟配置往往是决定系统稳定性的关键因素之一。AD9516作为一款高性能时钟分配芯片&#xff0c;广泛应用于需要多路低抖动时钟的场景。然而&#xff0c;从官方例程到实…

作者头像 李华
网站建设 2026/5/8 15:27:33

claw-prometheus:开源AI Agent安全管控与工程化实践指南

1. 项目概述&#xff1a;从“神火”到工程实践如果你和我一样&#xff0c;长期在AI Agent开发的一线摸爬滚打&#xff0c;那你一定对两个问题深有体会&#xff1a;一是如何让Agent在复杂、多轮的任务中保持“记忆”和“专注”&#xff0c;而不是聊着聊着就忘了最初的目标&#…

作者头像 李华
网站建设 2026/5/8 15:27:12

TMS320F28069 CLA实战:手把手教你实现ADC采样+PWM相位控制的闭环应用

TMS320F28069 CLA实战&#xff1a;构建ADC采样与PWM相位控制的闭环系统 在电机控制和电源设计领域&#xff0c;实时信号处理能力直接决定了系统性能的上限。德州仪器&#xff08;TI&#xff09;的TMS320F28069数字信号控制器凭借其独特的CLA&#xff08;Control Law Accelerato…

作者头像 李华