﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-黑咖啡-随笔分类-服务器</title><link>http://www.blogjava.net/kyleYang/category/43725.html</link><description>孩儿立志出乡关，学不成名誓不还。
风华正茂乾坤地，人生无处不青山。
光阴如同流水去，珍惜时光最宝贵。
鹏程万里靠自己，飞黄腾达青少年。
</description><language>zh-cn</language><lastBuildDate>Mon, 23 Aug 2010 11:16:57 GMT</lastBuildDate><pubDate>Mon, 23 Aug 2010 11:16:57 GMT</pubDate><ttl>60</ttl><item><title>Apache负载均衡+Tomcat集群</title><link>http://www.blogjava.net/kyleYang/archive/2010/08/18/329287.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Wed, 18 Aug 2010 15:24:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2010/08/18/329287.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/329287.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2010/08/18/329287.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/329287.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/329287.html</trackback:ping><description><![CDATA[
		<dd>
				<div class="Description">核心提示：第一步： 在http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.6 下载mod_jk_1.2.6_2.0.50.dll文件，将其改名为mod_jk.so后放到apache2/modules目录中。 第二步： workers.properties： workers.tomcat_home=D:\My_Work\Tomcat\ </div>
				<p class="ArticleContent">第一步： 在http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.6 <br />                            下载mod_jk_1.2.6_2.0.50.dll文件，将其改名为mod_jk.so后放到apache2/modules目录中。 <br />第二步： workers.properties：<br />workers.tomcat_home=D:\My_Work\Tomcat\apache-tomcat-6.0.14 <br />workers.java_home=D:\Program Files\Java\jdk1.5.0_07 <br />ps=\ <br />worker.list=ajp13 <br />worker.ajp13.port=8009 <br />worker.ajp13.host=localhost <br />worker.ajp13.type=ajp13 <br />worker.ajp13.lbfactor=1 <br /><br />第三步：用记事本打开apache/conf/httpd.conf文件末尾，添加下面一段： <br />     <br />LoadModule jk_module modules/mod_jk.so <br />JkWorkersFile "D:\Program Files\Apache Software Foundation\Apache2.2\modules\workers.properties" <br />#ServerAdmin wangguiwei@gmail.com    <br />#ServerName localhost <br />DirectoryIndex index.html index.htm index.jsp <br />JkMount /* ajp13    <br />JkAutoAlias "D:\My_Work\Tomcat\apache-tomcat-6.0.14\webapps"   <br />Options Indexes FollowSymLinks <br />#allow from all <br />     <br />保存，停止apache服务，在启动，就可以将新配置应用了。 <br />****************************** <br />一．Apache与Tomcat介绍 <br /><br />    Apache是当前使用最为广泛的WWW服务器软件，具有相当强大的静态HTML处理的能力。 <br /><br />     Tomcat服务器是一个免费的开放源代码的Web应用服务器，它是Apache软件基金会（Apache Software Foundation）的Jakarta项目中的一个核心项目，由Apache、Sun和   其他一些公司及个人共同开发而成。由于有了Sun的参与和支持，最新的Servlet和JSP   规范总是能在Tomcat中得到体现，Tomcat5支持最新的Servlet 2.4和JSP 2.0规范。因为Tomcat技术先进、性能稳定，而且免费，因而深受Java爱好者的喜爱并得到了部分软件开发商的认可，成为目前比较流行的Web应用服务器。 <br /><br />Tomcat和IIS、Apache等Web服务器一样，具有处理HTML页面的功能，另外它还是一个Servlet和JSP容器，独立的Servlet容器是Tomcat的默认模式。<br />二．为什么需要整合 <br /><br />整合的最主要原因是为了在现有的硬件条件下提供最大的负载。 <br /><br />如果单独使用Tomcat做JSP服务器，在工作效率上会存在问题,Tomcat处理静态HTML的能力不如Apache，并且所能承受的最大并发连接数也有一定的限制； <br /><br />在测试中，当并发连接较多时，Tomcat就会处于“僵死”状态，对后继的请求连接失去响应。所以现在提出一个“整合”解决方案：将html与 jsp的功能部分进行明确分工，让tomcat只处理jsp部分，其它的由apache这个web server处理。Apache与Tomcat各司其职，那么服务器的整体效率就能够得到提升。 <br />三．整合的基本原理 <br /><br />作为Apache下面的子项目，Tomcat 与 Apache之间有着天然的联系。在实际操作中，主要是Apache作为主服务器运行，当监听到有jsp或者servlet的请求时，将请求转发给 tomcat服务器，由tomcat服务器进行解析后，发回apache，再由apache发回用户。 <br /><br />在tomcat中有两个监听的端口，一个是8080用于提供web服务,一个是8009用于监听来自于apache的请求。当apache收到 jsp或者servlet请求时，就向tomcat 的8009端口发送请求，交由tomcat处理后，再返回给apache，由apache返回给客户。 <br />四．安装Apache与Tomcat服务器 <br /><br />   操作系统环境：Windows xp home <br /><br />   安装文件：apache-tomcat-6.0.14.exe apache_2.2.6-win32-x86-openssl-0.9.8e.msi mod_jk-apache-2.2.4.so <br />　 到apache 与tomcat 的官方网站上面下载apache 与tomcat，安装apache与tomcat <br /><br />     到http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32下载 mod_jk-apache-2.2.4.so <br /><br />     将mod_jk-apache-2.2.4.so拷贝到apache安装目录下面的modules目录中。 <br /><br />五．修改Tomcat设置 <br /><br />     在tomcat的conf目录下建一个workers.properties的文本文件，添加如下配置 <br /><br />     workers.tomcat_home="tomcat安装目录" <br /><br />     #让mod_jk模块知道Tomcat的安装路径 <br /><br />     workers.java_home="java安装目录" <br /><br />     #让mod_jk模块知道jdk路径 <br /><br />     ps=" <br /><br />     worker.list=ajp13 <br /><br />     #这里是关键，名字要和httpd.conf的一致。如果这里改了httpd.conf也要改。 <br /><br />     worker.ajp13.port=8009 <br /><br />     #工作端口,tomcat的jk监听端口，可以查看Server.xml中有port="8009"            <br /><br />     worker.ajp13.host=localhost <br /><br />     #Tomcat所在机器，如果安装在与apache不同的机器则需要设置IP <br /><br />     worker.ajp13.type=ajp13 <br /><br />     #类型，好像不能改，会出问题 <br /><br />     worker.ajp13.lbfactor=1 <br /><br />     #负载平衡因子    <br /><br />六．修改Apache设置 <br /><br />修改apache安装目录下conf目录下的httpd.conf,增加如下配置 <br /><br />　　LoadModule jk_module modules/mod_jk-apache-2.2.4.so <br /><br />       JkWorkersFile "tomcat安装目录/conf/workers.properties" <br /><br />   　JkLogFile "apache安装目录/logs/mod_jk.log" <br /><br />      JkMount /*.jsp ajp13 <br /><br />      JkMount /*.do ajp13 <br /><br />七．整合操作说明<br />　 mod_jk-apache-2.2.4.so相当于是apache与tomcat之间的桥梁一样，所以在apache的配置文件下面加上LoadModule jk_module modules/mod_jk-apache-2.2.4.so　将此模块载入。 <br /><br />JkWorkersFile "tomcat安装目录/conf/workers.properties"　说明了mod_jk-apache-2.2.4.so 如何工作，当出现要转发时，将请求发送到那里进行处理，代表了一系列的工作参数。<br />      JkLogFile "apache安装目录/logs/mod_jk.log"　设定日志的地址。 <br /><br />JkMount　说明了将什么样的URL进行发送到tomcat进行处理。JkMount /*.jsp ajp13　说明了要将jsp请求发到tomcat,JkMount /*.do ajp13说明了要将.do型的servlet发到tomcat进行处理。在实际的分发中，如果servlet命名不带后缀的话，将无法被识别，也就无法进行处理。<br />  <br /> 八．结束语 <br />       在查阅了不少文章之后，我仔细的了解了下这两者进行整合的过程，网上很多文章讲的整合应该不算是真正意义上面的整合，希望此文章能够为正为这些问题苦恼的同行们解决一点小困难……。</p>
		</dd>
<img src ="http://www.blogjava.net/kyleYang/aggbug/329287.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2010-08-18 23:24 <a href="http://www.blogjava.net/kyleYang/archive/2010/08/18/329287.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache HTTP Server 与 Tomcat 的三种连接方式介绍</title><link>http://www.blogjava.net/kyleYang/archive/2010/08/18/329286.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Wed, 18 Aug 2010 15:17:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2010/08/18/329286.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/329286.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2010/08/18/329286.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/329286.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/329286.html</trackback:ping><description><![CDATA[
		<blockquote>整合 Apache Http Server 和 Tomcat 可以提升对静态文件的处理性能、利用 Web 服务器来做负载均衡以及容错、无缝的升级应用程序。本文介绍了三种整合 Apache 和 Tomcat 的方式。</blockquote>
		<!--START RESERVED FOR FUTURE USE INCLUDE FILES-->
		<!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters -->
		<!--END RESERVED FOR FUTURE USE INCLUDE FILES-->
		<p>首先我们先介绍一下为什么要让 Apache 与 Tomcat 之间进行连接。事实上 Tomcat 本身已经提供了 HTTP 服务，该服务默认的端口是 8080，装好 tomcat 后通过 8080 端口可以直接使用 Tomcat 所运行的应用程序，你也可以将该端口改为 80。</p>
		<p>既然 Tomcat 本身已经可以提供这样的服务，我们为什么还要引入 Apache 或者其他的一些专门的 HTTP 服务器呢？原因有下面几个：</p>
		<p>1. 提升对静态文件的处理性能</p>
		<p>2. 利用 Web 服务器来做负载均衡以及容错</p>
		<p>3. 无缝的升级应用程序</p>
		<p>这三点对一个 web 网站来说是非常之重要的，我们希望我们的网站不仅是速度快，而且要稳定，不能因为某个 Tomcat 宕机或者是升级程序导致用户访问不了，而能完成这几个功能的、最好的 HTTP 服务器也就只有 apache 的 http server 了，它跟 tomcat 的结合是最紧密和可靠的。</p>
		<p>接下来我们介绍三种方法将 apache 和 tomcat 整合在一起。</p>
		<p>
				<a name="N10058">
						<span class="atitle">JK</span>
				</a>
		</p>
		<p>这是最常见的方式，你可以在网上找到很多关于配置JK的网页，当然最全的还是其官方所提供的文档。JK 本身有两个版本分别是 1 和 2，目前 1 最新的版本是 1.2.19，而版本 2 早已经废弃了，以后不再有新版本的推出了，所以建议你采用版本 1。</p>
		<p>JK 是通过 AJP 协议与 Tomcat 服务器进行通讯的，Tomcat 默认的 AJP Connector 的端口是 8009。JK 本身提供了一个监控以及管理的页面 jkstatus，通过 jkstatus 可以监控 JK 目前的工作状态以及对到 tomcat 的连接进行设置，如下图所示：</p>
		<br />
		<a name="N10066">
				<b>图 1：监控以及管理的页面 jkstatus</b>
		</a>
		<br />
		<img height="228" alt="图 1：监控以及管理的页面 jkstatus" src="http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/images/image002.jpg" width="554" border="0" />
		<br />
		<p>在这个图中我们可以看到当前JK配了两个连接分别到 8109 和 8209 端口上，目前 s2 这个连接是停止状态，而 s1 这个连接自上次重启后已经处理了 47 万多个请求，流量达到 6.2 个 G，最大的并发数有 13 等等。我们也可以利用 jkstatus 的管理功能来切换 JK 到不同的 Tomcat 上，例如将 s2 启用，并停用 s1，这个在更新应用程序的时候非常有用，而且整个切换过程对用户来说是透明的，也就达到了无缝升级的目的。关于 JK 的配置文章网上已经非常多了，这里我们不再详细的介绍整个配置过程，但我要讲一下配置的思路，只要明白了配置的思路，JK 就是一个非常灵活的组件。</p>
		<p>JK 的配置最关键的有三个文件，分别是 </p>
		<p>
				<b>httpd.conf </b>
				<br />Apache 服务器的配置文件，用来加载 JK 模块以及指定 JK 配置文件信息</p>
		<p>
				<b>workers.properties</b>
				<br />到 Tomcat 服务器的连接定义文件</p>
		<p>
				<b>uriworkermap.properties</b>
				<br />URI 映射文件，用来指定哪些 URL 由 Tomcat 处理，你也可以直接在 httpd.conf 中配置这些 URI，但是独立这些配置的好处是 JK 模块会定期更新该文件的内容，使得我们修改配置的时候无需重新启动 Apache 服务器。</p>
		<p>其中第二、三个配置文件名都可以自定义。下面是一个典型的 httpd.conf 对 JK 的配置</p>
		<br />
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td class="code-outline">
										<pre class="displaycode"># (httpd.conf)
# 加载 mod_jk 模块
LoadModule jk_module modules/mod_jk.so

#
# Configure mod_jk
#

JkWorkersFile conf/workers.properties
JkMountFile conf/uriworkermap.properties
JkLogFile logs/mod_jk.log
JkLogLevel warn
</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>接下来我们在 Apache 的 conf 目录下新建两个文件分别是 workers.properties、uriworkermap.properties。这两个文件的内容大概如下</p>
		<br />
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td class="code-outline">
										<pre class="displaycode">#
# workers.properties
#


# list the workers by name

worker.list=DLOG4J, status

# localhost server 1
# ------------------------
worker.s1.port=8109
worker.s1.host=localhost
worker.s1.type=ajp13

# localhost server 2
# ------------------------
worker.s2.port=8209
worker.s2.host=localhost
worker.s2.type=ajp13
worker.s2.stopped=1

worker.DLOG4J.type=lb
worker.retries=3
worker.DLOG4J.balanced_workers=s1, s2
worker.DLOG4J.sticky_session=1

worker.status.type=status
</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>以上的 workers.properties 配置就是我们前面那个屏幕抓图的页面所用的配置。首先我们配置了两个类型为 ajp13 的 worker 分别是 s1 和 s2，它们指向同一台服务器上运行在两个不同端口 8109 和 8209 的 Tomcat 上。接下来我们配置了一个类型为 lb（也就是负载均衡的意思）的 worker，它的名字是 DLOG4J，这是一个逻辑的 worker，它用来管理前面配置的两个物理连接 s1 和 s2。最后还配置了一个类型为 status 的 worker，这是用来监控 JK 本身的模块。有了这三个 worker 还不够，我们还需要告诉 JK，哪些 worker 是可用的，所以就有 <b>worker.list = DLOG4J, status</b> 这行配置。</p>
		<p>接下来便是 URI 的映射配置了，我们需要指定哪些链接是由 Tomcat 处理的，哪些是由 Apache 直接处理的，看看下面这个文件你就能明白其中配置的意义</p>
		<br />
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td class="code-outline">
										<pre class="displaycode">/*=DLOG4J
/jkstatus=status

!/*.gif=DLOG4J
!/*.jpg=DLOG4J
!/*.png=DLOG4J
!/*.css=DLOG4J
!/*.js=DLOG4J
!/*.htm=DLOG4J
!/*.html=DLOG4J
</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>相信你已经明白了一大半了：所有的请求都由 DLOG4J 这个 worker 进行处理，但是有几个例外，/jkstatus 请求由 status 这个 worker 处理。另外这个配置中每一行数据前面的感叹号是什么意思呢？感叹号表示接下来的 URI 不要由 JK 进行处理，也就是 Apache 直接处理所有的图片、css 文件、js 文件以及静态 html 文本文件。</p>
		<p>通过对 workers.properties 和 uriworkermap.properties 的配置，可以有各种各样的组合来满足我们前面提出对一个 web 网站的要求。您不妨动手试试！</p>
		<br />
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td>
										<img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" />
										<br />
										<img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" />
								</td>
						</tr>
				</tbody>
		</table>
		<table class="no-print" cellspacing="0" cellpadding="0" align="right">
				<tbody>
						<tr align="right">
								<td>
										<img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" />
										<br />
										<table cellspacing="0" cellpadding="0" border="0">
												<tbody>
														<tr>
																<td valign="center"> </td>
																<td valign="top" align="right">
																		<a class="fbox" href="http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/#main">
																				<b> </b>
																		</a>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<br />
		<p>
				<a name="N100C4">
						<span class="atitle">http_proxy</span>
				</a>
		</p>
		<p>这是利用 Apache 自带的 mod_proxy 模块使用代理技术来连接 Tomcat。在配置之前请确保是否使用的是 2.2.x 版本的 Apache 服务器。因为 2.2.x 版本对这个模块进行了重写，大大的增强了其功能和稳定性。</p>
		<p>http_proxy 模式是基于 HTTP 协议的代理，因此它要求 Tomcat 必须提供 HTTP 服务，也就是说必须启用 Tomcat 的 HTTP Connector。一个最简单的配置如下</p>
		<br />
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td class="code-outline">
										<pre class="displaycode">ProxyPass /images !
ProxyPass /css !
ProxyPass /js !
ProxyPass / http://localhost:8080/
</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>在这个配置中，我们把所有 http://localhost 的请求代理到 http://localhost:8080/ ，这也就是 Tomcat 的访问地址，除了 images、css、js 几个目录除外。我们同样可以利用 mod_proxy 来做负载均衡，再看看下面这个配置</p>
		<br />
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td class="code-outline">
										<pre class="displaycode">ProxyPass /images !
ProxyPass /css ! 
ProxyPass /js !

ProxyPass / balancer://example/
&lt;Proxy balancer://example/&gt;
BalancerMember http://server1:8080/
BalancerMember http://server2:8080/
BalancerMember http://server3:8080/
&lt;/Proxy&gt;
</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>配置比 JK 简单多了，而且它也可以通过一个页面来监控集群运行的状态，并做一些简单的维护设置。</p>
		<br />
		<a name="N100EA">
				<b>图 2：监控集群运行状态</b>
		</a>
		<br />
		<img height="427" alt="图 2：监控集群运行状态" src="http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/images/image004.gif" width="553" border="0" />
		<br />
		<br />
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td>
										<img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" />
										<br />
										<img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" />
								</td>
						</tr>
				</tbody>
		</table>
		<table class="no-print" cellspacing="0" cellpadding="0" align="right">
				<tbody>
						<tr align="right">
								<td>
										<img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" />
										<br />
										<table cellspacing="0" cellpadding="0" border="0">
												<tbody>
														<tr>
																<td valign="center"> <br /></td>
																<td valign="top" align="right">
																		<a class="fbox" href="http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/#main">
																				<b> </b>
																		</a>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<br />
		<p>
				<a name="N100FA">
						<span class="atitle">ajp_proxy</span>
				</a>
		</p>
		<p>ajp_proxy 连接方式其实跟 http_proxy 方式一样，都是由 mod_proxy 所提供的功能。配置也是一样，只需要把 http:// 换成 ajp:// ，同时连接的是 Tomcat 的 AJP Connector 所在的端口。上面例子的配置可以改为：</p>
		<br />
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td class="code-outline">
										<pre class="displaycode">ProxyPass /images !
ProxyPass /css ! 
ProxyPass /js !

ProxyPass / balancer://example/
&lt;Proxy balancer://example/&gt;
BalancerMember ajp://server1:8080/
BalancerMember ajp://server2:8080/
BalancerMember ajp://server3:8080/
&lt;/Proxy&gt;
</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>采用 proxy 的连接方式，需要在 Apache 上加载所需的模块，mod_proxy 相关的模块有 mod_proxy.so、mod_proxy_connect.so、mod_proxy_http.so、mod_proxy_ftp.so、mod_proxy_ajp.so， 其中 mod_proxy_ajp.so 只在 Apache 2.2.x 中才有。如果是采用 http_proxy 方式则需要加载 mod_proxy.so 和 mod_proxy_http.so；如果是 ajp_proxy 则需要加载 mod_proxy.so 和 mod_proxy_ajp.so这两个模块。</p>
		<br />
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td>
										<img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" />
										<br />
										<img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" />
								</td>
						</tr>
				</tbody>
		</table>
		<table class="no-print" cellspacing="0" cellpadding="0" align="right">
				<tbody>
						<tr align="right">
								<td>
										<img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" />
										<br />
										<table cellspacing="0" cellpadding="0" border="0">
												<tbody>
														<tr>
																<td valign="center">
																		<img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" />
																		<br />
																</td>
																<td valign="top" align="right">
																		<a class="fbox" href="http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/#main">
																				<b>
																						<font color="#5c81a7">回页首</font>
																				</b>
																		</a>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<br />
		<p>
				<a name="N1010F">
						<span class="atitle">三者比较</span>
				</a>
		</p>
		<p>相对于 JK 的连接方式，后两种在配置上是比较简单的，灵活性方面也一点都不逊色。但就稳定性而言就不像 JK 这样久经考验，毕竟 Apache 2.2.3 推出的时间并不长，采用这种连接方式的网站还不多，因此，如果是应用于关键的互联网网站，还是建议采用 JK 的连接方式。</p>
		<br />
		<br />
		<p>
				<a name="resources">
						<span class="atitle">参考资料 </span>
				</a>
		</p>
		<ul>
				<li>获得 <a href="http://httpd.apache.org/"><font color="#996699">Apache Http Server</font></a>。 <br /><br /></li>
				<li>获得 <a href="http://tomcat.apache.org/"><font color="#5c81a7">Apache Tomcat</font></a>。 <br /><br /></li>
				<li>
						<a href="http://tomcat.apache.org/connectors-doc/">
								<font color="#5c81a7">JK 文档</font>
						</a>。 </li>
		</ul>
<img src ="http://www.blogjava.net/kyleYang/aggbug/329286.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2010-08-18 23:17 <a href="http://www.blogjava.net/kyleYang/archive/2010/08/18/329286.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>浅析tomcat nio 配置</title><link>http://www.blogjava.net/kyleYang/archive/2010/01/24/310623.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Sat, 23 Jan 2010 17:25:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2010/01/24/310623.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/310623.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2010/01/24/310623.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/310623.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/310623.html</trackback:ping><description><![CDATA[出处：http://hi.baidu.com/iamleafye/blog/item/c5d3b0d00a795389a1ec9c13.html<br />术语<br />   Tomcat 6.X实现了JCP的Servlet 2.5和JSP2.1的规范，并且包括其它很多有用的功能，使它成为开发<br />和部署web应用和web服务的坚实平台。<br />       NIO （No-blocking I/O）从JDK 1.4起，NIO API作为一个基于缓冲区，并能提供非阻塞I/O操作的API<br />被引入。 <br />       作为开源web服务器的java实现，tomcat几乎就是web开发者开发、测试的首选，有很多其他商业服务<br />器的开发者也会优先选择tomcat作为开发时候使用，而在部署的时候，把应用发布在商业服务器上。也有<br />许多商业应用部署在tomcat上，tomcat承载着其核心的应用。但是很多开发者很迷惑，为什么在自己的应<br />用里使用tomcat作为平台的时候，而并发用户超过一定数量，服务器就变的非常繁忙，而且很快就出现了<br />connection refuse的错误。但是很多商业应用部署在tomcat上运行却安然无恙。<br /><br />      其中有个很大的原因就是，配置良好的tomcat都会使用APR(Apache Portable Runtime),APR是<br />Apache HTTP Server2.x的核心，它是高度可移植的本地库，它使用高性能的UXIN I/O操作，低性能的<br />java io操作，但是APR对很多Java开发者而言可能稍稍有点难度，在很多OS平台上，你可能需要重新编<br />译APR。但是从Tomcat6.0以后, Java开发者很容易就可以是用NIO的技术来提升tomcat的并发处理能力。<br />但是为什么NIO可以提升tomcat的并发处理能力呢，我们先来看一下java 传统io与 java NIO的差别。<br />     <br />        Java 传统的IO操作都是阻塞式的(blocking I/O), 如果有socket的编程基础，你会接触过堵塞socket和<br />非堵塞socket，堵塞socket就是在accept、read、write等IO操作的的时候，如果没有可用符合条件的资<br />源，不马上返回，一直等待直到有资源为止。而非堵塞socket则是在执行select的时候，当没有资源的时<br />候堵塞，当有符合资源的时候，返回一个信号，然后程序就可以执行accept、read、write等操作，一般来<br />说，如果使用堵塞socket，通常我们通常开一个线程accept socket，当读完这次socket请求的时候，开一<br />个单独的线程处理这个socket请求；如果使用非堵塞socket，通常是只有一个线程，一开始是select状，<br />当有信号的时候可以通过 可以通过多路复用（Multiplexing)技术传递给一个指定的线程池来处理请求，然<br />后原来的线程继续select状态。 最简单的多路复用技术可以通过java管道(Pipe)来实现。换句话说，如果<br />客户端的并发请求很大的时候，我们可以使用少于客户端并发请求的线程数来处理这些请求，而这些来不<br />及立即处理的请求会被阻塞在java管道或者队列里面，等待线程池的处理。请求 听起来很复杂，在这个架<br />构当道的java 世界里，现在已经有很多优秀的NIO的架构方便开发者使用，比如Grizzly,Apache Mina等<br />等，如果你对如何编写高性能的网络服务器有兴趣，你可以研读这些源代码。<br /><br />      简单说一下，在web服务器上阻塞IO(BIO)与NIO一个比较重要的不同是，我们使用BIO的时候往往会<br />为每一个web请求引入多线程，每个web请求一个单独的线程，所以并发量一旦上去了，线程数就上去<br />了，CPU就忙着线程切换，所以BIO不合适高吞吐量、高可伸缩的web服务器；而NIO则是使用单线程(单<br />个CPU)或者只使用少量的多线程(多CPU)来接受Socket，而由线程池来处理堵塞在pipe或者队列里的请<br />求.这样的话，只要OS可以接受TCP的连接，web服务器就可以处理该请求。大大提高了web服务器的可<br />伸缩性。<br /><br />    我们来看一下配置，你只需要在server.xml里把 HTTP Connector做如下更改，<br /><br />    &lt;Connector port="8080" protocol="HTTP/1.1" <br />               connectionTimeout="20000" <br />               redirectPort="8443" /&gt;<br />    改为<br />    &lt;Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" <br />               connectionTimeout="20000" <br />               redirectPort="8443" /&gt;<br /><br />然后启动服务器，你会看到org.apache.coyote.http11.Http11NioProtocol start的信息，表示NIO已经启动。其他的配置请参考官方配置文档。<br />Enjoy it.<br /><br />最后贴上官方文档上对tomcat的三种Connector的方式做一个简单比较，<img height="1" alt="" hspace="0" src="file:///D:/program/tomcat6/webapps/docs/images/void.gif" width="1" border="0" /><pre>                  Java Blocking Connector       Java Nio Blocking Connector       APR Connector<br />
Classname         Http11Protocol                  Http11NioProtocol         Http11AprProtocol<br />
Tomcat Version   3.x 4.x 5.x 6.x                       6.x                     5.5.x 6.x<br />
Support Polling         NO                             YES                        YES<br />
Polling Size           N/A                   Unlimited - Restricted by mem        Unlimited<br />
Read HTTP Request     Blocking                     Blocking                       Blocking<br />
Read HTTP Body        Blocking                     Blocking                       Blocking<br />
Write HTTP Response   Blocking                     Blocking                       Blocking<br />
SSL Support           Java SSL                     Java SSL                       OpenSSL<br />
SSL Handshake         Blocking                     Non blocking                   Blocking<br />
Max Connections       maxThreads                   See polling size               See polling size</pre><img src ="http://www.blogjava.net/kyleYang/aggbug/310623.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2010-01-24 01:25 <a href="http://www.blogjava.net/kyleYang/archive/2010/01/24/310623.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>