主要观点:作者在过去几周自学 Rust,将用 Go 写的服务器项目gosherve
重写成 Rust 项目servy
,并通过k6
进行负载测试,用Parca
对gosherve
进行性能分析及优化,最后比较gosherve
、servy
的性能。
关键信息:
- Rust 学习过程:通过阅读《Rust Book》和《Rust for Rustaceans》学习,以
gosherve
为项目实践。 servy
实现:能处理重定向、提供指标服务等,通过 Nix 创建不同变体的构建。k6
负载测试:定义简单脚本,生成请求列表,测试服务器实现的吞吐量,初始servy
性能好于gosherve
。- Nix 化负载测试:创建测试虚拟机,自动化测试流程,包括生成文件、运行测试、获取结果等。
Parca
性能分析:为gosherve
启用pprof
端点,分析发现垃圾回收和文件读取分配问题,进行优化后性能提升。- 最终结果比较:在不同机器配置下测试,
servy
在 VM 测试中表现更好,差距缩小,gosherve
在小机器上有优势。
重要细节: - 命名新 Rust 项目
servy
是最难的部分。 k6
测试中通过http.batch
批量请求,使用简单的check
函数检查响应状态。- 测试虚拟机定义包括
nixosConfiguration
和vm.nix
配置,设置端口转发、内存等。 gosherve
优化包括减少 ETag 计算、使用http.ServeFileFS
减少分配等。- 虽未详细分析
servy
的Parca
性能分析结果,但已展示其复杂性。 - 总结时提到感谢 Polar Signals 的 Frederic 提供帮助,且未迁移网站但未来可能会,Fly.io 已限制请求。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。