我需要在端口 80 上运行基于 Java 的 Web 服务器。选项包括:
- Web 代理(apache、nginx、haproxy 等)
- 西奈特
- iptables
- 设置用户标识
基准是使用 setuid 运行应用程序,但出于安全原因,我宁愿不这样做。Apache 太慢,nginx 不支持保持活动,因此每个代理请求都会建立新的连接。
xinet 很容易设置,但会为每个请求创建一个新进程,我发现这会在高性能环境中引起问题。
最后一个选项是使用 iptables 进行端口转发,但我不知道它有多快。
当然,理想的解决方案是在专用的硬件防火墙/负载平衡器上执行此操作,但目前这不是一个选择。
目前,所有设置都在同一个盒子上,这就是 iptables 应该可以工作的原因。
负载如下,每秒大约有 2500 个非常短暂的 http 请求,这些请求的最大延迟时间为 50 毫秒……也就是说,应用程序至少需要 25 毫秒才能返回响应。
答案1
您能描述一下您的设置吗?我不太明白是否所有内容都位于一台服务器上,或者您是否有单独的网关和 Web 服务器。
但是,HAproxy 确实如此。最适合平衡多个 Web 服务器。我用它来平衡 http 和 smtp。
答案2
iptables 在内核中工作,这意味着它比委托给用户空间代理要快得多。
答案3
答案4
我不能 100% 地确定 iptables 的性能是否比其他解决方案更快。iptables 链中的任何规则都将与所有流量进行匹配,而用户空间代理将仅在新连接时触发。
我的建议:进行测试并进行基准测试。