Websphere性能優(yōu)化頁(yè)面靜態(tài)方案
通過(guò)IBM Http Server(下文稱(chēng)為IHS)靜態(tài)頁(yè)面分離技術(shù)與利用WebSpere Application Server(下文稱(chēng)為WAS)的動(dòng)態(tài)高速緩存(Dynamic Cache)技術(shù)優(yōu)化訪(fǎng)問(wèn)頁(yè)面性能??蛻?hù)端訪(fǎng)問(wèn)靜態(tài)頁(yè)面無(wú)須與后端數據交互,減少了容器與數據源的壓力,從而達到優(yōu)化系統的性能。
IBM Http Server不但可以作為 WAS 的前一級 Http 請求隊列的緩沖,減輕WAS的壓力,還可以利用其靜態(tài)頁(yè)面分離方案減輕部分壓力。在系統的部署或者構建的時(shí)候,我們可以把一些非重要的靜態(tài)頁(yè)面放在 IHS 中,當客戶(hù)端發(fā)送請求訪(fǎng)問(wèn)該頁(yè)面資源時(shí),由IHS直接響應請求并將靜態(tài)頁(yè)面資源返回客戶(hù)端,無(wú)須再經(jīng)過(guò)WAS,從而達到減輕達到WAS 負擔的目的。
除了IHS靜態(tài)頁(yè)面分離方案,另外還可以利用WAS的動(dòng)態(tài)高速緩存技術(shù),將J2EE應用中靜態(tài)的(Html、Flash、Css、Js、Jpg、Gif圖片等文件)和動(dòng)態(tài)的(需要與數據庫、Web Service等服務(wù)交互才能得到的數據)內容緩存到應用服務(wù)器的JVM中(如:Jsp、Servlet、*.do等請求)。在訪(fǎng)問(wèn)相關(guān)被緩存的資源時(shí),所有的相關(guān)輸出都可以直接從JVM的內容中獲得,而無(wú)須再與數據庫、Web Service、靜態(tài)文件等交互,從而有效地提高系統的性能。
IHS分離靜態(tài)內容方案 整個(gè)操作過(guò)程主要分3步完成
n 關(guān)閉Was的File Serving Servlet服務(wù)
n 重新生成插件(Plugin-cfg.xml)
n 修改IHS配置文件并拷貝靜態(tài)文件到指定的目錄
關(guān)閉Was的File Serving Servlet服務(wù)
1) 在Was中部署的Web應用中分別找到2個(gè)在/WEB-INF/ 目錄下面的 ibm-web-ext.xmi 文件。
參考路徑:
Ø IBM/WebSphere/AppServer/profiles/節點(diǎn)/conf/cell/applications/應用包名/ deployments/應用包名/應用包名/WEB-INF/目錄下
Ø IBM/WebSphere/AppServer/profiles/節點(diǎn)/應用安裝部署目錄/應用包名/應用包名/WEB-INF/目錄下
2) 打開(kāi) ibm-web-ext.xmi 文件,找到 fileServingEnabled屬性項,把它設為 flase, 默認是ture。找不到該屬性項可直接手工添加(fileServingEnabled="false")。
如:
<?xml version="1.0" encoding="UTF-8"?>
<com.ibm.ejs.models.base.extensions.webappext:WebAppExtension
xmi:version="2.0"
xmlns:xmi="http://www.omg.org/XMI" xmlns:com.ibm.ejs.models.base.extensions.webappext="webappext.xmi" xmi:id="WebAppExtension_1260496854906"
fileServingEnabled="false">
<webApp href="WEB-INF/web.xml#WebApp_1260496854890"/>
<jspAttributes xmi:id="JSPAttribute_1260496854906"
name="reloadEnabled" value="true"/>
<jspAttributes xmi:id="JSPAttribute_1260496854907"
name="reloadInterval" value="10"/>
</com.ibm.ejs.models.base.extensions.webappext:WebAppExtension>
3) 重啟Was,重啟完校驗配置是否生效。訪(fǎng)問(wèn)Web應用中的靜態(tài)文件,如會(huì )報404錯誤的,這是正?,F象,表示W(wǎng)as中的 File Serving servle 服務(wù)功能已經(jīng)被關(guān)閉了。
重新生成插件(Plugin-cfg.xml)
Ø 登陸Was控制臺,環(huán)境->更新全局Web 服務(wù)器插件配置->確定,重新生成插件。
Ø 服務(wù)器->Web服務(wù)器->選擇相應的web服務(wù)器->生產(chǎn)播件->傳播插件
Ø 檢查配置文件是否正取。
打開(kāi)IHS/Plugins/conf/web服務(wù)名/plugin-cfg.xml.找到UriGroup項,檢查其配置。如Uri中的配置還是指定為 Name=”/*”,須注釋該行配置,否則IHS會(huì )將所有的請求都返回給WAS處理,那么所有訪(fǎng)問(wèn)靜態(tài)內容都會(huì )報404錯誤??赏ㄟ^(guò)手工配置相應無(wú)須過(guò)濾的Uri。
具體參考配置如下:
<UriGroup Name="default_host_kpiCluster_URIs">
<!--<Uri AffinityCookie="JSESSIONID"
AffinityURLIdentifier="jsessionid" Name="/*"/> -->
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/*.do"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="*.jsp*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/j_security_check"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/ibm_security_logout"/>
</UriGroup>
修改IHS配置文件并拷貝靜態(tài)文件到指定的目錄
1) 在IHS的默認路徑,打開(kāi) \IBM HTTPServer\conf\http.conf文件,找到如下配置:
#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "D:\IBM\HTTPServer/htdocs/en_US"
#
# This should be changed to whatever you set DocumentRoot to.
#
<Directory "D:\IBM\HTTPServer/htdocs/en_US">
可將 D:\IBM\HTTPServer/htdocs/en_US設置為新的目錄,自定義新的靜態(tài)頁(yè)面目錄。
我們將非重要的靜態(tài)文件放到E:\PageFiles\2009-12-11\目錄下,配置如下:
DocumentRoot "E:\PageFiles\2009-12-11"
<Directory " E:\PageFiles\2009-12-11">
2) 把應用中的靜態(tài)文件拷到 上述在Httpd.conf配置文件定義好的路徑中去。
最后可根據上面的配置,將靜態(tài)文件都是從Was應用中拷貝到E:\PageFiles\2009-12-11\目錄中。
3) 重新啟動(dòng)IHS
通過(guò)頁(yè)面再次訪(fǎng)問(wèn)靜態(tài)頁(yè)面,此時(shí)不會(huì )再出現404錯誤了,IHS接到請求訪(fǎng)問(wèn)靜態(tài)頁(yè)面內容時(shí),會(huì )直接讀取E:\PageFile\2009-12-11\返回頁(yè)面請求,通過(guò)該配置可以進(jìn)一步減輕Was的壓力。
啟用WAS動(dòng)態(tài)高速緩存 啟用動(dòng)態(tài)高速緩存服務(wù)同樣也分為3步
n 在WAS控制臺上啟用動(dòng)態(tài)高速緩存服務(wù)
n 為應用服務(wù)器配置 Servlet 高速緩存
n cachespec.xml配置文件
在WAS控制臺上啟用動(dòng)態(tài)高速緩存服務(wù):
1) 登錄Was的管理控制臺
2) 在管理控制臺中,啟用“服務(wù)器->應用程序服務(wù)器->Server1->容器服務(wù)->動(dòng)態(tài)高速緩存服務(wù)”
(勾上‘在服務(wù)器啟動(dòng)時(shí)啟用服務(wù)’)
3) 確定并保存配置
為應用服務(wù)器配置 Servlet 高速緩存:
1) 在管理控制臺中,啟用“服務(wù)器->應用程序服務(wù)器->Server1->Web容器設置->Web容器-> 啟用servlet 高速緩存
(勾上‘啟用servlet 高速緩存’)
2) 確定并保存配置
cachespec.xml配置文件
1) 在應用目錄下WEB-INF/下增加cachespec.xml配置文件,通過(guò)該文件指定緩存對象。
內容如下:注意紅色部分,要正確指定cachespec.dtd文件位置,一般情況下是在/IBM/WebSphere/Appserver/properties目錄下。
<?xml version="1.0" ?>
<!DOCTYPE cache SYSTEM "D:\IBM\WebSphere\AppServer\properties\cachespec.dtd">
<cache>
<cache-entry>
<class>servlet</class>
<name>index.jsp</name>
<cache-id>
<component id="*" type="parameter">
<required>false</required>
</component>
<component id="" type="pathinfo">
<required>false</required>
</component>
<component id="host" type="header">
<required>false</required>
</component>
<timeout>180</timeout>
</cache-id>
</cache-entry>
</cache>
2) 在完成前三步后,在服務(wù)器上安裝Cache Monitor組件,來(lái)監控剛才配置的動(dòng)態(tài)高速緩存(DynamicCache)是否成功運行。
發(fā)布IBM/WebSphere/AppServer/installableApps/CacheMonitor.ear,并且將該應用與要業(yè)務(wù)應用部署在用一個(gè)Server下。
3) 部署完畢后,重啟整個(gè)WAS。
4) 測試校驗部署是否生效。
分別訪(fǎng)問(wèn):
Ø http://127.0.0.1/index.jsp
Ø
http://127.0.0.1/index.jsp?123
通過(guò)訪(fǎng)問(wèn)
http://127.0.0.1/cachemonitor 就可以查看到index.jsp已進(jìn)行了緩存
如圖所示:
以上的兩種技術(shù)一種是基于WEB服務(wù)器一級別的優(yōu)化,另一種則是基于Websphere應用服務(wù)器上的優(yōu)化,合理的使用兩種技術(shù),可更有效的幫助應用系統提高性能。
雖然在 WAS V6 以上的版本中,Web Container 對于 Http 請求采用了非阻塞I/O 方式,使得IHS 的這一功能作用已經(jīng)非常弱化,但在大并發(fā)訪(fǎng)問(wèn)的情況下,還是建議大家使用IHS+WAS架構,使用IHS緩沖客戶(hù)端請求與并且利用其得靜態(tài)頁(yè)面技術(shù),直接返回靜態(tài)資源,減輕應用服務(wù)器壓力;開(kāi)啟Was動(dòng)態(tài)高速緩存,緩存一些變動(dòng)較少的Jsp、Servlet等資源,進(jìn)一步有效的優(yōu)化系統的性能。分別將IHS與WAS 部署到兩臺物理主機上,可以讓在系統在性能擴展上更加靈活,利用垂直擴展優(yōu)化可更有效的提高系統的性能。