主要观点:在 Val Town 中,Node 服务器在负载下每秒 spawn 次数受限,通过多种方式优化 Node 的 spawn 性能,如使用cluster
模块、将 spawn 调用移至工作线程或子进程等,并比较了 Node 与 Deno、Bun、Go、Rust 在不同实现下的性能。
关键信息:
- 在 Hetzner CCX33 机器上用不同语言和运行时进行基准测试,Node 最慢,Deno 和 Bun 较快,编译的线程池语言(Go、Rust)更快。
- 使用
cluster
模块可增加进程数,但每个 HTTP 服务器在独立进程中,可能影响内存缓存等全局状态。 - 将 spawn 调用移至工作线程或子进程,Node 性能有所提升,但仍不如 Deno 和 Bun,且在处理日志方面存在挑战。
- 尝试了多种日志处理方式,如通过抽象套接字或
process.send
,但各有优劣。 - 探讨了负载均衡的不同方式,但未明显提升性能。
重要细节: - 测试命令为
bombardier -c 30 -n 10000 http://localhost:8001
,预热各服务器后进行测试,使用的语言和运行时版本分别为 Go v1.22.2、Rust v1.77.2、Node v22.3.0、Bun 1.1.20、Deno 1.44.2。 - 在将 spawn 调用移至子进程时,可混合使用 Node 和 Bun,Bun 实现了 Node IPC 协议。
- 在处理日志时,通过不同方式传递日志存在各种问题,如文件描述符传递不成功、
process.send
在 Deno 和 Bun 中性能不佳等。 - 负载均衡方面,尝试了随机选择、轮询和最少连接数等方式,但性能提升不明显。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。