又要發(fā)這類環(huán)境配置隨筆了,也不是俺對這些配置很感興趣,只不過是在有當下部署問題和需求的時候,現(xiàn)解決一下,實屬無奈。
這也就是業(yè)余和專業(yè)的區(qū)別吧??磥戆秤謱I(yè)些了。之前寫過《
最新版 apache_2.2.11 與 apache-tomcat-6.0.18 集成方案》這個方案是
以tomcat為主,把apache集成進來,但是效果并不是俺想要的,在正式需要使用的時候才發(fā)現(xiàn)這種方案達不到要求。很早前還有一些多端口和
多虛擬主機的隨筆
Tomcat6 配置多虛擬主機,多域名綁定一IP ,
Tomcat6.0 配置多端口訪問 。這些都是學校資源緊張,需要一臺服務器部署
多個項目才搞的。
為了提高網(wǎng)站的訪問性能,我們往往會在服務器端選擇合適的部署環(huán)境。最簡單的就是一個tomcat了,但是在高并發(fā)的情況下,非常
容易當機。因為tomcat配置的不優(yōu)化。我最早也沒有注意這些細節(jié),因為我知道一個項目的性能不是通過搭建環(huán)境體現(xiàn)的,而是算法的高效,代碼實
現(xiàn)的合理性,以及數(shù)據(jù)庫的合理使用,優(yōu)化技術的使用等等。不過通過優(yōu)化部署環(huán)境應該說是最直接的一種方案了。目前我知道的一種tomcat優(yōu)化
方案是使用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" />
這樣的性能響應能夠高于默認配置不少。別的方案我還沒有研究過,希望有這方面經(jīng)驗的朋友可以給出點建議。謝謝。
然后就是apache+tomcat的集成,我最早寫的那個是圍繞tomcat配置的。這次補充一個更方便也是更科學的實現(xiàn),
圍繞apache做集成。
需要下載的工具還是那三個,實現(xiàn)的第一步與我的上一篇是一樣的。
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>
配置完畢,經(jīng)測試apache將jsp,servlet,.do請求都交由tomcat處理。其他文件由apache處理,因為apache的穩(wěn)定性和
安全性,以及相對于tomcat而言快速的靜態(tài)頁處理速度,也可以提高網(wǎng)站的負載能力,前提是網(wǎng)站的靜態(tài)頁比較多,例如做了靜態(tài)化。
在上面最后的請求派發(fā)給tomcat是可以不斷添加的。例如我做的站有FCKeditor,DWR,我就需要添加這兩者的過濾。
格式保持一致,例如: JKMount /dwr/* ajp13。
這樣由于apache和tomcat集成造成的功能出錯就可以一一解決了。這就是一種較完美的集成方案。
一些靜態(tài)請求由apache處理,動態(tài)請求由tomcat處理。
園子首頁有一篇網(wǎng)站的發(fā)展過程,就是說數(shù)據(jù)庫為什么要和網(wǎng)站分別部署在兩臺服務器上。做了一些考證,我覺得寫的很不錯,考慮了
讀寫和傳輸數(shù)據(jù)的速度,雖然數(shù)據(jù)基本是理論層次的。
俺最早也看過這方面的網(wǎng)站架構演變史。俺不太喜歡磨蹭,于是直接用最簡練的話概述了。下面列舉數(shù)字,由早到晚說說網(wǎng)站的發(fā)展過程。
1.一臺服務器,數(shù)據(jù)庫和網(wǎng)站都在這上面架著。我覺得在添加一臺服務器之前應該先做以下嘗試,畢竟比較費錢。
首先就是優(yōu)化代碼,重構和提煉算法。然后優(yōu)化sql查詢等等關于數(shù)據(jù)庫的操作,合理的使用事務。建立數(shù)據(jù)庫索引,
優(yōu)化服務環(huán)境,關掉不必要的服務,優(yōu)化搭載環(huán)境。其次靜態(tài)化,緩存(頁面片段緩存,數(shù)據(jù)庫緩存,對象級緩存),
數(shù)據(jù)持久化。
2.網(wǎng)站與數(shù)據(jù)庫分離,需要兩臺服務器。
3.搭載環(huán)境的負載均衡。分散請求,提高容錯能力。
4.數(shù)據(jù)庫集群
5.網(wǎng)站分布式,采取讀寫分離,網(wǎng)站很大比重的請求都是在查數(shù)據(jù)。
6.提高服務器的硬件配置。
7.還是不夠的話,再增加服務器.........
個人愚見,基本就是這樣了。