主要观点:作者在过去几周自学 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) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。