我不仅从学术角度而不是从实践角度对此感兴趣;我不打算创建一个生产网络服务器来与 nginx 竞争。我想知道 nginx 到底有多快。谷歌对此的最高回复是 this线程,但它只是链接到一个神秘的幻灯片和不同 io 策略的一般覆盖。所有其他结果似乎只是描述了 nginx 的速度,而不是原因。
我尝试搭建一个简单的erlang服务器来尝试与nginx竞争,但无济于事; nginx 赢了。我的服务器所做的就是为每个请求生成一个新进程,使用该进程将文件读取到套接字,然后关闭文件并终止线程。它并不复杂,但考虑到 erlang 的轻量级进程和底层 aio 结构,我认为它会竞争,但 nginx 在重压测试下仍然以稳定的 300 毫秒平均值获胜。
nginx 在做什么而我的简单服务器没有?我的第一个想法是将文件保存在主内存中而不是在请求之间折腾它们,但是文件系统缓存已经这样做了,所以我认为这不会产生很大的不同。我错了吗?或者还有什么我想念的吗?
最佳答案
事实证明,一旦我告诉它以二进制模式而不是列表模式读取文件,我的小型测试服务器就与 nginx 相当有竞争力。
我认为本主题其余部分的许多讨论可能会让不熟悉 erlang 和 erlang 服务器设计的人感到困惑。我不想删除该线程,因为其中有关于 nginx 的很好的信息(我不能,它已经有了答案),但我鼓励任何打算制作基于 erlang 的服务器的人进行一些研究并编写大量测试,而不仅仅是您在此处阅读的内容。
关于Nginx 的速度,以及如何复制它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8130501/