mod_proxy vs mod_proxy_ajp vs mod_jk

Ric*_*ich 9 ajp apache-2.2

我们正在准备从以下环境迁移:

Apache 2.0.2 --AJP--> JBoss4.2.2

Apache 2.2.3 --???--> JBoss 5.1.0

你会如何将两者结合在一起?

选项是:

  1. 经典 AJP(意味着为 Apache 构建 mod_jk)
  2. mod_proxy(将 HTTP 请求转发到 JBoss)
  3. mod_proxy_ajp

选项 2 是目前最流行的解决方案,因为它似乎意味着更少的处理,因为不再需要从 AJP 转换 JBoss 的响应,并且 CPU 时间是我们需要在我们的基础设施中密切关注的东西。选项 2 和 3 也随 Red Hat 支持的 Apache 构建一起提供。

目前我看不到我们选择选项 1,因为我们通过选项 3“免费”获得 AJP。

因此,选项 2 和选项 3 的优缺点是什么?对 CPU 负载的担忧真的是我们需要担心的吗?我们在处理二进制数据(AJP 流量)过程中丢失的东西是否会在减少的带宽和 IO 中得到恢复?

我们的基础设施将是 Apache ,在同一台 RHEL 5 机器上运行多达9 个经过大量调优的 JBoss(但通常占一半左右),该机器在私有云中虚拟化。

提前感谢您的任何指示/建议。

富有的

小智 8

2 mod_proxy_http,除非您需要来自客户端的 Host 标头。

我不推荐经典的 mod_jk,因为它的功能已被 mod_proxy_ajp 取代,正如您自己所说,它需要自己构建和维护该模块。

我认为 mod_proxy_http 是一个非常干净的解决方案,它将 ajp 排除在外。但是,您应该注意从 ajp 迁移到 http 的一些注意事项。如果您需要完全按照 apache 收到的服务器标头(包括 Host 标头)访问服务器标头,则应使用 ajp。JBoss 将看到来自 apache 的新 http 请求,而不是原始客户端。如果您只需要客户端的远程 IP,您仍然可以使用 apache 可以在新请求上设置的特殊标头来获取它。但是,如果您从应用程序层进行虚拟主机,则最好使用 ajp。

就性能而言,ajp 或 http 将需要 JBoss 的一些处理和一些本地套接字 TCP 流量。您必须同时尝试两者以查看哪个更有效,但我认为总体而言它只占服务器总负载的很小一部分。Http 是一种更复杂的协议,而 ajp 专门设计用于在 Web 层和应用层之间高效地运行,因此理论上 ajp 可能更好。也就是说,我发现在 Tomcat 应用程序服务器系列之外通常更好地支持 http。

我使用 mod_proxy_ajp 和 mod_proxy_http,我没有任何问题。