由于 tomcat 的 HTTP 处理部分都由 Java 所写(5.5.12 版本以后出现了 native 库,用以 提高其 I/O 和 SSL 的性能[1]),在高并发的情况下负载较高。而 apache 对于静态文件的处 理能力比 tomcat 强,所以 tomcat 开发组开发了与 apache 结合使用的 mod_jk 模块。该协议 由 apache 作请求代理,将 HTTP 协议的请求转化为 AJP 协议包,并传给后端的 tomcat。mod_jk 和 apache 现在普遍使用 AJP1.3 协议[2]。它是一个二进制格式的协议,比 字符格式的 HTTP 协议解析速度要快。
除了性能的提升,mod_jk 另外的一个作用可以实现 apache 与 tomcat 一对多的对应, 使后端 tomcat 负载均衡。mod_jk 也提供 apache 与 tomcat 链接情况的监控。
mod_jk 模块的典型工作流程是这样的:一个 HTTP 请求过来,mod_jk 模块根据其 URI 选 择合适的 worker 来进行处理。如果是 lb_worker(负载均衡的 worker),就再根据各种条 件选择后台合适的 ajp_worker(处理 AJP 协议的 worker)。ajp_worker 将 HTTP 协议的包, 组装成 AJP 协议格式的包,然后选取一条空闲的链接,发送给后台的 tomcat 服务器。等到 后台将数据发送过来时,接收并解析 AJP 协议,重新组装成 HTTP 协议,然后把结果发送给 客户端。
详细介绍:[url]http://yaoweibin.cn/maindoc/mod_jk.pdf[/url]
除了性能的提升,mod_jk 另外的一个作用可以实现 apache 与 tomcat 一对多的对应, 使后端 tomcat 负载均衡。mod_jk 也提供 apache 与 tomcat 链接情况的监控。
mod_jk 模块的典型工作流程是这样的:一个 HTTP 请求过来,mod_jk 模块根据其 URI 选 择合适的 worker 来进行处理。如果是 lb_worker(负载均衡的 worker),就再根据各种条 件选择后台合适的 ajp_worker(处理 AJP 协议的 worker)。ajp_worker 将 HTTP 协议的包, 组装成 AJP 协议格式的包,然后选取一条空闲的链接,发送给后台的 tomcat 服务器。等到 后台将数据发送过来时,接收并解析 AJP 协议,重新组装成 HTTP 协议,然后把结果发送给 客户端。
详细介绍:[url]http://yaoweibin.cn/maindoc/mod_jk.pdf[/url]