用 Rust、Nix、K6 和 Parca 进行实验

主要观点:作者在过去几周自学 Rust,将用 Go 写的服务器项目gosherve重写成 Rust 项目servy,并通过k6进行负载测试,用Parcagosherve进行性能分析及优化,最后比较gosherveservy的性能。
关键信息

  • 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函数检查响应状态。
  • 测试虚拟机定义包括nixosConfigurationvm.nix配置,设置端口转发、内存等。
  • gosherve优化包括减少 ETag 计算、使用http.ServeFileFS减少分配等。
  • 虽未详细分析servyParca性能分析结果,但已展示其复杂性。
  • 总结时提到感谢 Polar Signals 的 Frederic 提供帮助,且未迁移网站但未来可能会,Fly.io 已限制请求。
阅读 9
0 条评论