Plone 效能測試綜合報告
		
		
		
		
		
				
						
			
			
						 Created at			Sunday, 26 November 2006 08:00						    						Last Updated on Thursday, 15 March 2007 18:16						
						
				Written by 紀博文			
				
					 
		
		
		 ◎ 前言  
網站效率,一直是網站件置過程中首要被關注的議題。而由於 Plone  網站功能強大,且使用大量動態運算物件,因此在直接連線的情況下,整體效能可無法負荷大量存取。  
然而為了因應此類的動態網站,此類動態網站多半會搭配快取機制。以大福提昇網站的運作效率。  
這份測試報告的主要目的,在於測試並比較何種快取方案,能夠產生最大的效能提升,並對測試結果進行分析與建議。 
 
◎ 測試環境  一、硬體  
- CPU:Intel Pentium iii Mobile-1.03G  
 - RAM:640 MB  
 - HDD:IBM 30G 4200 RPM 
 
二、軟體  
- Ubuntu Linux 6.06  
 - Kernel 2.6.15  
 - Apache 2.0.55  
 - Python 2.4.3  
 - Zope 2.9.4  
 - Plone 2.5  
 - Ab 2.0.4 
 
三、方法  
每一次的測試開始前,均先重新啟動 Apache,以確保存在記憶體中的快取資料已被清除。  
每項測試均統一使用 ab –n 500 –c 20 –d –k  
- -n 500:共執行 500 次連線測試  
 - c 20:同時發出二十個請求  
 - -d:不顯示百分比分佈表  
 - -k:使用 HTTP-KeepAlive 連線 
 
◎ 測試結果  一、Apache mod_proxy 的影響  
(一) 說明
如果要搭配 Apache 作為 Zope 的前端伺服器,就需要使用 mod_proxy 模組。  
過程中,資料先經過 Apache 向 Zope Server 提出請求,Zope 將資料回應給 Apache 後,Apache 再將資料傳回給瀏覽器。  
本測試的目的,在於評量 mod_proxy模 組的轉送過程可能造成的效能影響。  
- 對照組是連線到 https://127.0.0.1:8080/Plone,直接對 Zope Server 進行存取。  
 - 實驗組的部分,則是連線到 https://127.0.0.1/Plone 再經由設定好的 mod_proxy 代理存取 Zope Server。  
 
 (二) 數據 
{mosimage} 
 {mosimage}
(三) 意義
使用 Apache Proxy 模組後:  
- Requests per second 降為 2.46/sec。  
 - Time per request 升高為 8125.211 ms。  
 - 平均網站效能降低約 5%。 
 
由測試數據中發現,在使用了  mod_proxy 模組之後,網站效能的確受到影響,但所受影響程度相當微小,應不至於成為網站性能的主要瓶頸。  
二、RAM Cache Manager  
(一) 說明
Plone 中的 RAM Cache Manager 能夠將運算的結果儲存在 Server  記憶體當中,當下次需要的時候,就可以直接從記憶體當中取用,提升網站運作效率。  
這個測試的目的,在於評量開啟 Plone 的 RAM Cache Manager 後,對於效能表現有什麼樣的改善。  
- 對照組與實驗組都是直接連線 https://127.0.0.1:8080/Plone。  
 - 對照組是在 RAM Cache Manager 關閉的情況下測試。  
 - 實驗組是在 RAM Cache Manager 當中,將所有的 Plone 物件加入 RAM Cache 快取清單。  
 
除了下列五個會造成問題的物件,被排除在外:  
- portal_skins/plone_scripts/getOrderedUserActions  
 - portal_skins/plone_scripts/getActionIconList  
 - portal_skins/plone_scripts/sortObjects  
 - portal_skins/plone_scripts/getAllowedTypes  
 - portal_skins/plone_scripts/getAddableTypesInMenu 
 
(二) 數據  
{mosimage}
 {mosimage}
(三) 意義
使用 RAM Cache Manager 之後:  
- Requests per second 提高為 52.02/sec。  
 - Time per request 降為 384.478 ms。  
 - 平均網站效能提升約 20 倍。 
 
不過實際瀏覽時發現一個狀況,就使用  RAM Cache Manager 後的網頁,似乎無法送出正確的編碼標頭,導致網頁會變成亂碼,要手動將瀏覽器的編碼設成 UTF-8。  
三、HTTP Cache Manager  
(一) 說明
除了 RAM Cache Manager 以外,Zope 提供了另一個快取機制 HTTP Cache Manager。  
HTTP Cache Manager 並不直接將結果儲存在記憶體,而是在 HTTP Header  當中加入快取宣告,通知外部的快取主機,將這頁資料儲存起來。  
由於 HTTP Cache Manager 只是修改 HTTP Header 而已,實際的快取任務是交由外部主機,因此我們必須搭配 Apache 的  Cache 與 Proxy 模組,來執行快取任務。  
- 對照組與實驗組均連線 https://127.0.0.1/Plone,但對照組關閉 HTTP Cache Manager。  
 - 實驗組則加入所有 Plone 物件到 HTTP Cache 快取清單。 
 
 (二) 數據 
{mosimage} 
 {mosimage}
 
(三) 意義
在開啟 HTTP Cache Manager + Apache mod_cache 後:  
- Requests per second提升為 104.82/sec。  
 - Time per request降低為 190.811 ms。  
 - 平均網站效能提升約 41 倍。 
 
◎ 綜合結論與建議 
 {mosimage}
 {mosimage}
 使用快取機制,確實能夠對 Plone 的反應有顯著的效能提升。但使用 RAM Cache Manager 雖然有約 20  倍的顯著效果,然卻會產生編碼錯誤的問題,如果無法解決這個問題,將大幅降低其實用性。  
根據整個實驗的結論,如果要提升Plone網站的效能,目前建議的組合為:  
* (Apache + mod_cache) + (Zope + Plone + 開啟 HTTP Cache Manager)  
以 Apache Server 為前端伺服器,然後使用 mod_rewrite、mod_proxy 和 mod_cache 模組作為前端快取機制,並開啟 Plone 的 HTTP Cache Manager,如此將可有效的大幅提升 Plone 網站效能。 
在其他的解決方案上,搭配專門的快取軟體如 Squid,或許能得到更好的快取品質,但這部分並不在本次的測試之內。