當前位置:首頁 > IT技術 > Web編程 > 正文

系統(tǒng)架構師論文-論改進Web服務器性能的有關技術
2022-03-06 18:13:12


論改進Web服務器性能的有關技術

【摘要】

基于Web技術的數據庫應用是當前應用的一個熱點,在用戶數目與通信負荷很大的場合,提高Web服務器性能是一個迫切的課題。本文從筆者參與某個銀行系統(tǒng)項目開發(fā)的經歷出發(fā),闡述了提高Web服務器的性能應滲入到項目論證、選型、開發(fā)、運行和管理的各個環(huán)節(jié),只有各個環(huán)節(jié)都能充分考慮到性能與質重的需要,系統(tǒng)的性能才是真正可保證的和可擴充的。

文章從系統(tǒng)的實際運行與相應的經驗出發(fā),闡述了性能改進方面的一些具體措施。比如:在本文中討論了 Web服務器平臺的選型考慮;Web服務器的配置管理;應用系統(tǒng)本身的優(yōu)化與預先設計系統(tǒng)時可擴性的性能保障等具體內容。

通過技術上的分析與改進,綜合性地運用多類措施與手段,在實際系統(tǒng)中,Web服務器運行的性能得到了一定程序的保證。

【正文】

我所在的單位是把目標定位于金融領域開發(fā)IT應用的一家信息技術公司。隨著金融電子化建設的發(fā)展和商業(yè)銀行之間市場競爭的加劇,各主要商業(yè)銀行不斷通過信息技術提供新的金融產品,并且希望整合市場渠道。比如主要的商業(yè)銀行不斷推出形形色色的網上銀行服務。在這種背景下,本人參與了開發(fā)新一代風上銀行產品,涉及提供網上個人理財服務、網上外匯買賣服務、網上企業(yè)服務等具有市場競爭力的產品。作為項目開發(fā)的組織者之一和主要的技術骨干,在整個項目開發(fā)過程中始終要處于第一線,從而在改進Web服務器性能、提高整個網上平臺系統(tǒng)性能方面收獲良多,在本文中簡要討論如下,希望與讀者們共享經驗。在Wet服務器配置與優(yōu)化方面,我有如下幾方面主要的體會:

第一方面是Web服務器選型考慮。

在Web服務器選型及網上平臺搭建這初,我們就已充分考慮整個網上平臺的性能及可擴展性問題,這一考慮為該系統(tǒng)的穩(wěn)定性及擴展性能力方面打下了堅實的基礎。

某銀行原有的一些網上產品由于開發(fā)較早,故而采用的是老式的HTTP Server + CGI程序調用的方式。這時,毎一客戶淸求需要對應于后端系統(tǒng)的系統(tǒng)進程來運行CGI程序來處理,系統(tǒng)的開銷相當大,系統(tǒng)的擴展能力也很差,性能已不能滿足業(yè)務處理的需要,故而在為此銀行系統(tǒng)具體選型的時候,我們一開始就否決了這種方案。

通過市場上同類產品的比較選擇,我們選擇了國際商業(yè)機器有限公司IBM的Web Sphere產品系列作為該行網上銀行系統(tǒng)的建立平臺。作出這樣選擇是因為Web Sphere基于使HTTPServer和應用服務器相分離的整體架構,同時支持JSP、Servlet和企業(yè)級Java Bean等輕重級線程規(guī)范,所有的淸求對應于應用服務器上的處理線程,系統(tǒng)的開銷低,效率非常高,同時Web Sphere整個體系結構相當的靈活,為適應擴展需要可以作不同的橫向和縱向擴展,從而可以滿足各銀行未來的擴展需要。

正是因為在一開始選型的時候我們就已考慮到未來的擴展需要,整個系統(tǒng)在接下來的幾次性能改進方面,我們大體上都能相對順利地達到了預期目標。

第二方面是Web服務器的性能配置。

在一開始系統(tǒng)上線的時候,由于系統(tǒng)的負荷不是很大,為了節(jié)省系統(tǒng)總擁有成本TCO投資,我們在一臺較低配置的IBM RS6000上投產了該系統(tǒng)。整個系統(tǒng)的HTTP服務器、應用服務器、通信服務器等均位于該臺機器上,由于初始投產時用戶不多,所以系統(tǒng)的性能基本上能令人接受。

但隨著業(yè)務的發(fā)展和用戶訪問童的増大,我們發(fā)現該服務器的響應變慢,系統(tǒng)的CPU利用率和內外存交換顯著増大。經過跟蹤,我們發(fā)現關鍵原因之一是系統(tǒng)的內存不足的緣故。由于網上服務器把大重用戶的會話信息保存在內存中供給應用系統(tǒng)使用,當內存不足時,大M Session信息被迫交換至硬盤,大;量CPU時間消耗在等候內外存的交換上,系統(tǒng)效率迅速下降。

鑒于這種情況,我們把該服務器的內存由2GB擴充為4GB,同時相應調整用戶會話信息的保存時間,這樣整個系統(tǒng)的效率又回到較為理想的狀況。

由于新應用的不斷投產及數據庫操作的日益増加,我們后來逐漸監(jiān)控到系統(tǒng)的數據庫處于繁忙狀態(tài),系統(tǒng)的錯誤日志也記錄下了供應用服務器使用的數據庫連接處出現資源不足的情況。在這種背景下,我們認為整個系統(tǒng)由于硬件配買所限,應該進行橫向擴展,因此我們把數據庫服務器分離出來,配置到另一較高性能的服務器上,相應定義的數據庫資源也大幅増加,這樣整個系統(tǒng)的性髭又處于較為理想的狀況。

第三方面是對應用系統(tǒng)進行相應的優(yōu)化以提高性能。

Web服務器配置及相應的硬件擴展不失為解決系統(tǒng)性能問題的一條捷徑,但應用系統(tǒng)的優(yōu)化也是應該重點加以考慮的,畢竟它能夠在投入較少的情況下提高系統(tǒng)的運用效率。

在開發(fā)的初期,我們就已經十分注意系統(tǒng)的利用效率,比如提醒程序員盡量不要利用用戶會話信息(Session)來傳送大的對象,對于內存要注意回收等。同時,通過內部的交流會推廣與介紹一些小的,有用的編程技巧來提高開發(fā)人員的水平,通過代碼的抽查,希望能在早期就發(fā)現問題等。

在系統(tǒng)運行期間,我們通過監(jiān)控發(fā)現,應用服務器所基于的Java虛擬機,其內存堆的空閑空間有不斷下降的趨勢,毎隔若干天導致空間消耗殆盡,無法分配新對象空間,從而導致系統(tǒng)重啟。在排除了系統(tǒng)本身問題的原因外,我們確定為應用系統(tǒng)的開發(fā)有問題。通過從網上下載IBM公司檢測Java虛擬機的相關工具對JVM進行監(jiān)控后終于發(fā)現系統(tǒng)內部存在著不能回收內存的對象,再通過查找相應的程序發(fā)現在該程序中有“環(huán)狀”的對象引用,從而導致對象使用后不能被垃圾收集器所回收。這個問題的解決過程雖然十分艱苦,但由于該問題不能通過升級硬件或増加資源配買而得到根本解決,會給系統(tǒng)帯來很大的隱患。所以,整個過程的分析與解決是完全值得的,更何況通過查找故障原因的過程,給整個項目組上了生動的一堂軟件質重保證課,對項目組的質量意識起了很大的促進作用。所以說改進Web服務器的性能并不單純是系統(tǒng)管理方面的工作,它滲透到開發(fā)以及系統(tǒng)運行第一系列環(huán)節(jié)中。

第四方面預先考慮未來的擴展與性能需要。

隨著系統(tǒng)的發(fā)展及成熟,考慮到用戶訪問量的不斷上升,為了預留系統(tǒng)的發(fā)展空間,我們最近又對整個系統(tǒng)作了一個系統(tǒng)性的升級。通過引入多臺HTTP服務器及應用服務器并行工作提高整個系統(tǒng)吞吐量及單點故障克服能力。由于在一開始選型的時候就已經充分考慮到動態(tài)負載均衡及橫向擴展方面的需要,這一項的升級無需對整個系統(tǒng)的體系結構作根本的變革,対應用程序來說,更是沒有造成任何影響。

整個項目歷時近兩年,從這兩年的系統(tǒng)情況來看,整個系統(tǒng)是成功的。根據我親身的經歷,系統(tǒng)性能并不單純是系統(tǒng)運行與管理階段的問題,而是滲透在項目論證、開發(fā)以及運行的各個階段。只有各個階段都能充分考慮性能方面的需要,在實際運行時,整個系統(tǒng)的性能才可能真正有保障。

在技術方面來看,可以綜合利用選型評估、硬件擴展、應用優(yōu)化和系統(tǒng)配置優(yōu)化等一系列的手段;比如在硬件擴展方面,又可以分為主要部件擴容,縱向升級、橫向升級等方面。在我們的項目實踐中,曾綜合地利用了上述的各種手段。比如某銀行的整個系統(tǒng)日訪問量不足1萬至現在的毎日超過10萬次以上的點擊的發(fā)展情況來看,整個系統(tǒng)的性能保障及提高方案是比較成功的。



本文摘自 :https://blog.51cto.com/u

開通會員,享受整站包年服務立即開通 >