Apache2+Tomcat6 整合与实战笔记

来源:互联网 发布:手机淘宝店铺和电脑版 编辑:程序博客网 时间:2024/06/05 10:02

Apache2+Tomcat6 整合与实战笔记、Tomcat的优化交流

又要发这类环境配置随笔了,也不是俺对这些配置很感兴趣,只不过是在有当下部署问题和需求的时候,现解决一下,实属无奈。
这也就是业余和专业的区别吧。看来俺又专业些了。之前写过《最新版 apache_2.2.11 与 apache-tomcat-6.0.18 集成方案》这个方案是
以tomcat为主,把apache集成进来,但是效果并不是俺想要的,在正式需要使用的时候才发现这种方案达不到要求。很早前还有一些多端口和
多虚拟主机的随笔Tomcat6 配置多虚拟主机,多域名绑定一IPTomcat6.0 配置多端口访问 。这些都是学校资源紧张,需要一台服务器部署
多个项目才搞的。

                  为了提高网站的访问性能,我们往往会在服务器端选择合适的部署环境。最简单的就是一个tomcat了,但是在高并发的情况下,非常
容易当机。因为tomcat配置的不优化。我最早也没有注意这些细节,因为我知道一个项目的性能不是通过搭建环境体现的,而是算法的高效,代码实
现的合理性,以及数据库的合理使用,优化技术的使用等等。不过通过优化部署环境应该说是最直接的一种方案了。目前我知道的一种tomcat优化
方案是使用tomcat线程池。只需要在server.xml中改改配置就可以了。核心配置代码:

 <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"         maxThreads="1000" minSpareThreads="50" maxIdleTime="600000"/>            <!-- A "Connector" represents an endpoint by which requests are received         and responses are returned. Documentation at :         Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)         Java AJP  Connector: /docs/config/ajp.html         APR (HTTP/AJP) Connector: /docs/apr.html         Define a non-SSL HTTP/1.1 Connector on port 8080    -->    <!--    <Connector port="8086" protocol="HTTP/1.1"                connectionTimeout="20000"                redirectPort="8443" URIEncoding="UTF-8"/>    -->    <!-- A "Connector" using the shared thread pool-->    <Connector executor="tomcatThreadPool"               port="8080" protocol="HTTP/1.1"                connectionTimeout="20000"                redirectPort="8443" />

这样的性能响应能够高于默认配置不少。别的方案我还没有研究过,希望有这方面经验的朋友可以给出点建议。谢谢。
然后就是apache+tomcat的集成,我最早写的那个是围绕tomcat配置的。这次补充一个更方便也是更科学的实现,
围绕apache做集成。

需要下载的工具还是那三个,实现的第一步与我的上一篇是一样的。

1.将mod_jk-1.2.28-httpd-2.2.3.so复制到C:\Apache2.2\modules(我的apache安装目录),我把他改了下名,方便后面的操作

改名为mod_jk.so。

2.在tomcat的config目录下新建workers.properties 文件,内容如下:

 

workers.tomcat_home=C:\Tomcat workers.java_home=C:\Program Files\Java\jre1.5.0_05worker.list=ajp13worker.ajp13.port=8009worker.ajp13.host=localhostworker.ajp13.type=ajp13 worker.ajp13.lbfactor=1 


3.在apache的httpd.conf的内容底部添加配置:

LoadModule jk_module modules/mod_jk.soJkWorkersFile "C:/Tomcat/conf/workers.properties"JkLogFile "C:/Tomcat/logs/mod_jk2.log" JkLogLevel info<VirtualHost localhost>ServerAdmin @hbu.cnDocumentRoot D:/ServerName localhostDirectoryIndex index.html index.htm index.jspErrorLog logs/shsc-error_log.txtCustomLog logs/shsc-access_log.txt commonJkMount /servlet/* ajp13 JkMount /*.jsp ajp13 JkMount /*.do ajp13 </VirtualHost>


配置完毕,经测试apache将jsp,servlet,.do请求都交由tomcat处理。其他文件由apache处理,因为apache的稳定性和
安全性,以及相对于tomcat而言快速的静态页处理速度,也可以提高网站的负载能力,前提是网站的静态页比较多,例如做了静态化。

在上面最后的请求派发给tomcat是可以不断添加的。例如我做的站有FCKeditor,DWR,我就需要添加这两者的过滤。
格式保持一致,例如: JKMount /dwr/* ajp13。

这样由于apache和tomcat集成造成的功能出错就可以一一解决了。这就是一种较完美的集成方案。
一些静态请求由apache处理,动态请求由tomcat处理。

园子首页有一篇网站的发展过程,就是说数据库为什么要和网站分别部署在两台服务器上。做了一些考证,我觉得写的很不错,考虑了
读写和传输数据的速度,虽然数据基本是理论层次的。
俺最早也看过这方面的网站架构演变史。俺不太喜欢磨蹭,于是直接用最简练的话概述了。下面列举数字,由早到晚说说网站的发展过程。

1.一台服务器,数据库和网站都在这上面架着。我觉得在添加一台服务器之前应该先做以下尝试,毕竟比较费钱。
首先就是优化代码,重构和提炼算法。然后优化sql查询等等关于数据库的操作,合理的使用事务。建立数据库索引,
优化服务环境,关掉不必要的服务,优化搭载环境。其次静态化,缓存(页面片段缓存,数据库缓存,对象级缓存),
数据持久化。
2.网站与数据库分离,需要两台服务器。
3.搭载环境的负载均衡。分散请求,提高容错能力。
4.数据库集群
5.网站分布式,采取读写分离,网站很大比重的请求都是在查数据。
6.提高服务器的硬件配置。
7.还是不够的话,再增加服务器.........

原创粉丝点击