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

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


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

【摘要】

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

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

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

【正文】

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

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

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

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

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

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

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

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

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

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

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

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

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

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

在系統(tǒng)運行期間,我們通過監(jiān)控發(fā)現(xiàn),應用服務器所基于的Java虛擬機,其內存堆的空閑空間有不斷下降的趨勢,毎隔若干天導致空間消耗殆盡,無法分配新對象空間,從而導致系統(tǒng)重啟。在排除了系統(tǒng)本身問題的原因外,我們確定為應用系統(tǒng)的開發(fā)有問題。通過從網(wǎng)上下載IBM公司檢測Java虛擬機的相關工具對JVM進行監(jiān)控后終于發(fā)現(xiàn)系統(tǒng)內部存在著不能回收內存的對象,再通過查找相應的程序發(fā)現(xiàn)在該程序中有“環(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)吞吐量及單點故障克服能力。由于在一開始選型的時候就已經(jīng)充分考慮到動態(tài)負載均衡及橫向擴展方面的需要,這一項的升級無需對整個系統(tǒng)的體系結構作根本的變革,対應用程序來說,更是沒有造成任何影響。

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

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



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

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