Mason's Blog

follow me sina weibo @hello__佐小白__

apache和tomcat到底是神马关系

用了这么久的tomcat,其实一直也没搞懂,apache到底是不是就是tomcat。结果,,,不是一个东西。

apache是httpserver。而tomcat仅仅是java servlet容器。

在tomcat集群之前添加一层apache,有以下好处:

1. tomcat不建议用root跑,而linux下面不可以用非root帐号跑80端口 (除了apache外,也可以用iptables)
2. 用mod_jk做软负载均衡
3. tomcat是单一的java servlet container,如果没有apache则不可以运行php, perl等程序
4. 简单的IMAGE/HTML/ARCHIVE文件在tomcat上也是经过java线程处理,比较浪费资源。apache处理静态网页的速度比较好。

5.Socket handling(姑且认为是连接)/系统稳定性。Apache在处理错误链接上优于Tomcat。主要原因是Tomcat所有的连接都交给JVM来处理,而JVM是跨平台的,问题是跨平台的优化是一个严峻的考验。大部分时间java程序都是正常的,但是当情况非常恶劣时,例如:非常频繁的掉线,无效数据包,无效IP的无效请求。Apache比基于JVM的程序要好。


另外,http://bbs.chinaunix.net/thread-653582-1-1.html这里介绍了使用apache做软负载均衡,同时tomcat集群会话保持的。

看看wiki怎么解释jk模块

What is JK (or AJP)?

AJP is a wire protocol. It an optimized version of the HTTP protocol to allow a standalone web server such as Apache to talk to Tomcat. Historically, Apache has been much faster than Tomcat at serving static content. The idea is to let Apache serve the static content when possible, but proxy the request to Tomcat for Tomcat related content.


mod_jk is mature, stable and extremely flexible.. It is under active development by members of the Tomcat community.

由于 tomcat 的 HTTP 处理部分都由 Java 所写(5.5.12 版本以后出现了 native 库,用以提高其 I/O 和 SSL 的性能),在高并发的情况下负载较高。而 apache 对于静态文件的处 理能力比 tomcat 强,所以 tomcat 开发组开发了与 apache 结合使用的 mod_jk 模块。该协议 由 apache 作请求代理,将 HTTP 协议的请求转化为 AJP 协议包,并传给后端的 tomcat。mod_jk 和 apache 现在普遍使用 AJP1.3 协议。它是一个二进制格式的协议,比 字符格式的 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 协议,然后把结果发送给 客户端。

阅读更多
个人分类: Apache源码分析
上一篇java的Error和Exception的区别联系
下一篇Mysql索引
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭