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
的实现架构
Tomcat
对
MPM
的实现源码分析
1.
首先
PoolTcpEndpoint
调用
startEndpoint()
方法开始执行
MPM
的核心代码
代码
:
2.
调用
PoolTcpEndpoint
的
initEndpoint()
方法完成
PoolTcpEndpoint
的初始化
.
3.
PoolTcpEndpoint
调用
ThreadPool
的
start()
方法,完成
ThreadPool
的初始化
代码
:
4.
调用
ThreadPool
的
runIt()
方法,开始监听线程
5.
监听线程调用
LeaderFollowerWorkerThread
的
runIt()
方法监听链接,在得到一个链接后该监听线程处理该链接,并从
ThreadPool
里取一个新的线程运行监听程序,监听新的链接。
总结
MPM
是一个成熟的多道任务处理模型,
Tomcat
很好的实现了这个模型,提高了
Tomcat
的性能。希望这篇文档对研究
MPM
的兄弟有所帮助。