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


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

【摘要】

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

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

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

【正文】

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

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

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

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

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

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

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

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

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

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

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

第三方面是對應用系統進行相應的優化以提高性能。

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

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

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

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

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

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

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



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


更多科技新聞 ......

有在线黄片视频|天天操天天操天天操|日韩A片精品视频大全|外国一级免费大毛片