JAVA的卡夫卡

让我们共同进步,分享成功

常用链接

统计

最新评论

  • 1. re: 去还是留?
  • 看来都不容易啊 做it就是这样 看着那些做客户的同事工资飞涨 哎 还是自己看看技术的书籍吧 呵呵
  • --kirari_wxy

Tomcat对Apache MPM模型的实现

Tomcat Apache MPM 的简介

Tomcat 简介

Tomcat 是一个免费的开源 Servlet 容器,它是 Apache 基金会的 Jakarta 项目中的核心项目,最近 Sun 也参与到其的开发中,并将它集成到 NetBeans 中。由于有了 Sun 的支持,最新的 Servlet Jsp 规范在 Tomcat 中得到体现。

目前 Tomcat 最新版本是 5.5.17 ,完整的实现了 Sevlet2.4 JavaServer Pages 2.0 规范 (Java Community Process) 。与之前的版本相比, 5.5.17 兼容了以前版本的一些特性,也相应的加入了一些新的特性。

1.         支持 web 应用程序的静态配置和动态配置。

2.         内置一个管理 Tomcat web 应用程序。方便对 Tomcat 的日常管理。

3.         提供 Realm 支持, Realm 是一些带角色的用户信息。 Tomcat 通过验证这些信息来限制用户对一些 web 应用程序的访问。 Realm 类似于 unix 中组的概念。 Tomcat 主要支持 JDBCRealm , DataSourceRealm, JNDIRealm, MemoryRealm, JAASRealm 。这几种 Realm

4.         提供 JNDI 支持。

5.         通过 DBCP 或第三方库提供 JDBC 数据源。

6.         实现独立类加载体系,以防 web 应用程序的类库与 Tomcat 自身类库冲突。

7.         集成 SSL ,实现安全传输。

8.         使用 JMX MBeans 进行组件的管理。

9.         支持集群。实现负载均衡。

10.     多种日志支持。

   

Apache MPM 简介

MPM( Multi-Processing Modules ) 多道处理模块 , 在支持 POSIX 线程的 Unix 系统上, Apache 可以通过不同的 MPM 运行在一种多进程与多线程相混合的模式下来处理 Http 请求, MPM 模块是 Apache2.0 的核心模块。

如果不用 “--with-mpm” 显式指定某种 MPM prefork 就是 Unix 平台上缺省的 MPM 。它所采用的预派生子进程方式也是 Apache 1.3 中采用的模式。 prefork 本身并没有使用到线程, 2.0 版使用它是为了与 1.3 版保持兼容性;另一方面, prefork 用单独的子进程来处理不同的请求,进程之间是彼此独立的,这也使其成为最稳定的 MPM 之一。

相对于 prefork worker 2.0 版中全新的支持多线程和多进程混合模型的 MPM 。由于使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务器。但是, worker 也使用了多进程,每个进程又生成多个线程,以获得基于进程服务器的稳定性。这种 MPM 的工作方式将是 Apache 2.0 的发展趋势。

Tomcat MPM 的实现架构

o_mpmframework.bmp

o_mpmframework2.bmp

Tomcat MPM 的实现源码分析

1.         首先 PoolTcpEndpoint 调用 startEndpoint() 方法开始执行 MPM 的核心代码

代码 :
o_startEndpoint().bmp

2.         调用 PoolTcpEndpoint initEndpoint() 方法完成 PoolTcpEndpoint 的初始化 .
o_initEndpoint().bmp

3.         PoolTcpEndpoint 调用 ThreadPool start() 方法,完成 ThreadPool 的初始化

代码 :
o_ThreadPool.start().bmp

4.         调用 ThreadPool runIt() 方法,开始监听线程
o_ThreadPool.runIt().bmp

5.         监听线程调用 LeaderFollowerWorkerThread runIt() 方法监听链接,在得到一个链接后该监听线程处理该链接,并从 ThreadPool 里取一个新的线程运行监听程序,监听新的链接。

    o_LeaderFollowerWork.runIt()1.bmp

总结

MPM 是一个成熟的多道任务处理模型, Tomcat 很好的实现了这个模型,提高了 Tomcat 的性能。希望这篇文档对研究 MPM 的兄弟有所帮助。

posted on 2006-08-08 16:13 JAVA的卡夫卡 阅读(501) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: