Apache2.2.11+Tomcat6.0.18 整合与实战笔记、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_05

worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13 
worker.ajp13.lbfactor=1 

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

LoadModule jk_module modules/mod_jk.so
JkWorkersFile "C:/Tomcat/conf/workers.properties"
JkLogFile "C:/Tomcat/logs/mod_jk2.log" 
JkLogLevel info

<VirtualHost localhost>
ServerAdmin @hbu.cn
DocumentRoot D:/
ServerName localhost
DirectoryIndex index.html index.htm index.jsp
ErrorLog logs/shsc-error_log.txt
CustomLog logs/shsc-access_log.txt common
JkMount /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.还是不够的话,再增加服务器.........

个人愚见,基本就是这样了。

posted on 2009-08-03 19:14  施杨  阅读(5170)  评论(4编辑  收藏  举报

导航