使用APR连接器 -整合Tomcat与Apache
文章编辑: 国粹小生
文章发表于: 2010-10-26 16:09
从Tomcat 5.5开始,Tomcat包含叫做APR连接器的另一个Web服务器实现方法。它是在Java和C编程语言中实现的。
APR连接器的主要目标是提供高性能、高稳定性及易于与其他C/C++源码整合,同时仍然提供至少与Tomcat的JIO连接器同样多的功能(通过实现象开源C代码一样的底层网络编码,与JVM的嵌入式网络编码相反)。
APR是ApachePortable Runtime的简称,下文称APR(Apache便携式运行时),这是一个独立的开源项目,其目标被陈述为“提供软件开发者可以编码的API,无论在哪个平台上编译这些软件,如果没有同等的行为,并一定要可预测。”
简而言之,APR是一个本地库文件,实现了如Apache httpd或Tomcat的网络服务器可利用的许多底层功能。
事实上,Apache httpd在APR-httpd的底层网络编码的顶端编译的是APR。要了解APR工程的更多信息,请参阅APR在http://apr.apache.org上的主页。
使用APR连接器,而不使用JIO或NIO的连接器,原因有以下几点:
1、HTTPS使用APR连接器可能会更快,因为APR连接器是叫做OpenSSL库文件的本地代码。而JIO和NIO连接器是纯粹的Java代码,并使用了纯粹的Java TLS/SSL编码,大家都知道,比OpenSSL要慢一些。但是,如果没有使用HTTPS,则不用关心这一点。
2、对于某些代理场合(主要是AJP),APR可能会更高效。对这种配置,具有最大吞吐量是比较重要的。
3、由于使用的sendfile(2)系统呼叫,所以APR被设计为处理大型静态文本文件(如提供媒体文件)时更高效。
4、任何连接器实现的所有底层网络编码都是固有的(native) (如JVM是在C/C++中编写的),因此,无论您是否更喜欢APR,取决于您是喜欢来自ASF还是JVM提供商提供的本地网络编码(native network code)。
5、APR一个被广泛接受的用于Web服务器的I/O实现,用C编程语言编写(供Apache httpd使用),而且工作正常。
6、在MS-Windows上,NIO连接器并没有真正起作用,因为NIO似乎在Windows上无法正常发挥作用,至少在使用Sun的Java VM时是这样。在其他操作系统上,这不成为问题。
7、APR使用了便携的、安全随机数产生器,从而Tomcat会话ID在Windows上默认是安全的。
8、APR还有一些其他功能是非常有用的,而核心Java平台并没有提供这些功能。关键是APR是不同于Java的实现,而且包含一组不同的功能。这些新功能可能会放在任何新版的APR中,而且可以修改APR连接器以充分利用这些功能。
Remy Maucherat(APR连接器的作者及坚定支持者之一)在这里提供了一点启示,发送邮件给Tomcat开发者,列出为什么它认为APR连接器很重要。除了明显令人感兴趣的功能(epoll/sendfile/openss1)之外,如笔者早期提到的那样,APR具有很多其他用途。
根据核心能力,把它放在Tomcat中,使其成为httpd的一个Java版本,而且将以非常简单的方式打开所有功能及可能。
假设某人做了衡量纯Java用户的工作,那么最好拥有,但这只是整体的一部分(而且需要APR)。