王亞楠,吳華瑞+,黃 鋒
(1.北京農(nóng)業(yè)信息技術(shù)研究中心,北京100097;2.國(guó)家農(nóng)業(yè)信息化工程技術(shù)研究中心,北京100097;3.農(nóng)業(yè)部農(nóng)業(yè)信息技術(shù)重點(diǎn)實(shí)驗(yàn)室,北京100097)
Web應(yīng)用系統(tǒng)在大量用戶并發(fā)訪問的情況下,容易出現(xiàn)網(wǎng)站響應(yīng)時(shí)間過慢的情況,甚至?xí)捎诜?wù)器負(fù)擔(dān)過重,導(dǎo)致系統(tǒng)的崩潰和癱瘓。因此如何對(duì)應(yīng)用系統(tǒng)性能進(jìn)行最大限度地優(yōu)化處理,已成為設(shè)計(jì)開發(fā)人員不可忽視的問題?,F(xiàn)階段針對(duì)高并發(fā)Web應(yīng)用系統(tǒng)性能低下的問題,解決方案主要圍繞以下幾個(gè)方面:提高服務(wù)器配置,提高數(shù)據(jù)庫性能,提高Web容器的性能等,但上述手段很大程度限制了系統(tǒng)的擴(kuò)展性,并加重了系統(tǒng)開發(fā)與維護(hù)成本。本文以全國(guó)基層農(nóng)業(yè)技術(shù)推廣體系管理信息系統(tǒng)為例,從影響系統(tǒng)性能的因素著手進(jìn)行分析,針對(duì)Web前端、后臺(tái)程序、數(shù)據(jù)庫、Web應(yīng)用中間件以及服務(wù)器5部分的處理給出了優(yōu)化方案。由于在每一部分的方案中,并不能窮舉所有的優(yōu)化手段,因此只從典型常用而又容易被忽視的幾點(diǎn)著手進(jìn)行說明。
一個(gè)Web應(yīng)用系統(tǒng)性能的優(yōu)劣主要由以下幾項(xiàng)決定:頁面響應(yīng)時(shí)間、最大并發(fā)連接數(shù)、單位時(shí)間內(nèi)處理的HTTP事物數(shù)以及服務(wù)器HTTP帶寬。雖然可以通過擴(kuò)大服務(wù)器內(nèi)存、增加網(wǎng)絡(luò)出口帶寬等方式在一定程度上提升系統(tǒng)性能,但卻不是解決問題的根本方法。為充分發(fā)揮系統(tǒng)效能,達(dá)到最佳的運(yùn)行效果,只有從系統(tǒng)自身入手,打造一個(gè)精簡(jiǎn)、性能優(yōu)良的高質(zhì)量Web應(yīng)用系統(tǒng),而不是完全依賴于服務(wù)器的硬件配置,才是最有效、最徹底的優(yōu)化手段。
在實(shí)際運(yùn)行過程中,影響Web應(yīng)用系統(tǒng)性能的因素有很多種,本節(jié)主要針對(duì)Web 應(yīng)用前端、后臺(tái)程序、數(shù)據(jù)庫、Web應(yīng)用中間件以及服務(wù)器這5大部分進(jìn)行分析,并分別根據(jù)分析結(jié)果提出具體的優(yōu)化方案。
在對(duì)Web前端進(jìn)行優(yōu)化之前,需要了解頁面的加載過程。頁面加載時(shí),首先下載到瀏覽器的是純粹的HTML 文檔,其不包括任何圖片、樣式,只是一個(gè)頁面的HTML 骨架,此過程只占整個(gè)頁面加載過程的10%。在HTML框架加載完成后,進(jìn)入到頁面的解析步驟,瀏覽器將會(huì)由上至下依次進(jìn)行解析。首先對(duì)HEAD 標(biāo)簽進(jìn)行解析,期間如果遇到引用的JS文件、CSS文件等,瀏覽器將會(huì)停止頁面的加載過程,轉(zhuǎn)而對(duì)該文件進(jìn)行請(qǐng)求,請(qǐng)求完成后將會(huì)繼續(xù)加載頁面。HEAD 標(biāo)簽解析完成后,會(huì)進(jìn)入到BODY 標(biāo)簽的解析過程,如果在解析過程中遇到IMG 標(biāo)簽,瀏覽器將會(huì)請(qǐng)求IMG 標(biāo)簽對(duì)應(yīng)的SRC內(nèi)容,如果有多個(gè)IMG 標(biāo)簽,那么瀏覽器會(huì)并發(fā)的請(qǐng)求IMG 標(biāo)簽對(duì)應(yīng)的SRC。解析過程中的時(shí)間線如圖1所示。
圖1 各部分響應(yīng)時(shí)間
基于以上對(duì)于頁面加載過程的描述,可以發(fā)現(xiàn),對(duì)于高并發(fā)網(wǎng)站,頁面質(zhì)量嚴(yán)重影響到網(wǎng)站的運(yùn)行速度。如果頁面過大,在頁面加載時(shí)便會(huì)耗費(fèi)巨大的網(wǎng)絡(luò)帶寬,因此頁面設(shè)計(jì)時(shí)應(yīng)該盡可能的簡(jiǎn)潔,以此減少不必要的網(wǎng)絡(luò)流量,來緩解高并發(fā)所帶來的帶寬壓力[1]。因此,對(duì)Web前端的優(yōu)化,可以從以下幾個(gè)方面入手。
(1)減少外部文件的引用,必要時(shí)可通過合并多個(gè)外部文件實(shí)現(xiàn)。通過該方法可以盡量減少HTTP請(qǐng)求。
(2)將頁面加載時(shí)未用到的外部文件放到頁面底部加載,以減少頁面加載過程中請(qǐng)求外部文件時(shí)的等待時(shí)間。
(3)將網(wǎng)站中用到的重復(fù)文件緩存到瀏覽器,將會(huì)減少HTTP請(qǐng)求以及遠(yuǎn)程服務(wù)器負(fù)載,大大縮短頁面的載入時(shí)間。
(4)圖片壓縮。通過對(duì)頁面的像素處理、格式轉(zhuǎn)換、清除圖片注釋等方式來減少圖片大小。
(5)AJAX 異步加載。該方法可以在不刷新頁面的情況下來更新頁面上的內(nèi)容,避免了JS文件、圖片等的重新載入,減少用戶等待頁面渲染的時(shí)間。
2.2.1 session的設(shè)置
當(dāng)多個(gè)請(qǐng)求和服務(wù)器建立Web連接的時(shí)候,由于無狀態(tài)記憶的特點(diǎn),連接之間不能進(jìn)行狀態(tài)的共享。例如在用戶登錄時(shí),記錄用戶的唯一標(biāo)識(shí)為 “l(fā)ogin_1”,但在之后進(jìn)行其它請(qǐng)求,例如修改密碼時(shí),將無法定位該用戶來獲得用戶的信息。而由于一個(gè)session中定義的變量在session的生命周期內(nèi)可作用于用戶訪問的所有鏈接,因此session經(jīng)常被用來用作全局變量的傳遞。在這種情況下,用戶登錄時(shí),將用戶的唯一標(biāo)識(shí) “l(fā)ogin_1”存儲(chǔ)在session 內(nèi),當(dāng)用戶需要修改密碼時(shí),系統(tǒng)將session中的標(biāo)識(shí)碼與存儲(chǔ)數(shù)據(jù)進(jìn)行比對(duì),便可成功定位到該用戶,修改該用戶的密碼。
正是由于session的便捷性、安全性,致使很多技術(shù)開發(fā)人員在程序代碼中大量使用session 變量,由于session是以文本形式存儲(chǔ)在服務(wù)器端的,因此在用戶高并發(fā)訪問時(shí)會(huì)產(chǎn)生大量用于session 持久性的內(nèi)存,增加服務(wù)器的壓力。
考慮到這種情況,應(yīng)盡量精簡(jiǎn)session中的信息,只把用戶觸發(fā)事件時(shí)經(jīng)常用到的信息存儲(chǔ)到session內(nèi),同時(shí),當(dāng)用戶退出此次訪問后,應(yīng)立即銷毀釋放對(duì)應(yīng)的session,以此降低其占有的服務(wù)器內(nèi)存。另外,為了防止不活躍session長(zhǎng)時(shí)間占有內(nèi)存的情況出現(xiàn),可以根據(jù)實(shí)際情況自主設(shè)置session的超時(shí)時(shí)間,代碼片段如下:
2.2.2 數(shù)據(jù)庫操作語句的優(yōu)化
目前,對(duì)于關(guān)系型數(shù)據(jù)庫,都需要通過編寫數(shù)據(jù)庫操作語句來訪問數(shù)據(jù)。因此對(duì)數(shù)據(jù)庫操作語句的優(yōu)化成為必不可少的一部分,在實(shí)際編寫過程中,需要根據(jù)項(xiàng)目規(guī)模、數(shù)據(jù)關(guān)系等因素反復(fù)進(jìn)行分析以實(shí)現(xiàn)語句的最優(yōu)化。
舉一個(gè)簡(jiǎn)單的例子,示例表中存儲(chǔ)了不同單位歷年的人員信息,見表1。
表1 示例
當(dāng)需要從表中查詢2012年A 單位的人員姓名時(shí),在查詢語句拼寫過程中很容易出現(xiàn)以下的情況:
select*from tabel_1where year=?and unitName=?
該語句會(huì)根據(jù)查詢條件將所有滿足要求的元組查詢出來,相比之下,如下的語句將大大減少與數(shù)據(jù)庫信息交換時(shí)產(chǎn)生的流量,降低I/O 代價(jià):
select peopleName from tabel_1 where year=?and unitName=?
再進(jìn)一步優(yōu)化成如下語句:
select peopleName from tabel_1 where unitName=?and year=?
該語句較上一語句,調(diào)換了單位名稱和年份的查詢順序。分析該條語句的查詢過程,首先在根據(jù)單位名稱進(jìn)行查詢時(shí),結(jié)果會(huì)篩選出A 單位對(duì)應(yīng)的2條數(shù)據(jù),之后再在這2條數(shù)據(jù)中,篩選出2012 年的信息;而上一條查詢語句,首先是根據(jù)年份進(jìn)行查詢,篩選出3 條數(shù)據(jù),之后在這3條數(shù)據(jù)中,篩選出A 單位對(duì)應(yīng)的信息,過程對(duì)比如圖2所示?;谝陨戏治觯?dāng)進(jìn)行海量數(shù)據(jù)查詢時(shí),這一優(yōu)化策略會(huì)使得中間結(jié)果大大變小,大幅度提高查詢效率。
圖2 中間過程對(duì)比
2.2.3 數(shù)據(jù)分頁技術(shù)
利用分頁技術(shù)使得每次展示給用戶的固定的數(shù)據(jù)量,減少數(shù)據(jù)庫查詢的工作量,降低網(wǎng)絡(luò)傳輸?shù)呢?fù)荷,同時(shí)也可以避免用戶在使用過程中因查閱大量數(shù)據(jù)產(chǎn)生的疲倦感[2]。
例如每一頁顯示的數(shù)據(jù)條數(shù)為PageCount,當(dāng)前頁數(shù)為CurrentBegin,當(dāng)查詢從第PageCount* (CurrentBegin-1)開始的PageCount條數(shù)據(jù)時(shí),得到的結(jié)果就是當(dāng)前頁中的數(shù)據(jù),當(dāng)需查詢 “上一頁”數(shù)據(jù)的時(shí)候,只需將Current-Begin設(shè)置為CurrentBegin-1,重新檢索即可。當(dāng)需查詢“下一頁”數(shù)據(jù)時(shí),將CurrentBegin設(shè)置為CurrentBegin+1,即可得到所需數(shù)據(jù)。
2.2.4 數(shù)據(jù)緩存
每當(dāng)程序與數(shù)據(jù)庫創(chuàng)建連接時(shí),都需要通過匹配用戶名、密碼與數(shù)據(jù)庫進(jìn)行連接驗(yàn)證,該過程耗費(fèi)很大的資源和時(shí)間。在高并發(fā)情況下,程序頻繁訪問數(shù)據(jù)庫表,勢(shì)必會(huì)造成系統(tǒng)性能的降低,因此在數(shù)據(jù)處理過程中,針對(duì)頻繁訪問的數(shù)據(jù),在中間層建立數(shù)據(jù)緩存[3],減少數(shù)據(jù)庫的訪問次數(shù),可以較大程度上提高系統(tǒng)響應(yīng)速度。
對(duì)于會(huì)被頻繁查詢而很少或幾乎不被修改的基準(zhǔn)表,如全國(guó)行政區(qū)劃數(shù)據(jù)庫表,在程序啟動(dòng)時(shí),可以將其數(shù)據(jù)緩存到靜態(tài)類里,在用戶需要用到表中內(nèi)容時(shí),便可直接到緩存內(nèi)進(jìn)行查找,以減輕數(shù)據(jù)庫訪問的壓力,提高系統(tǒng)性能。Spirng中提供了@Component注釋,可以把普通pojo實(shí)例化到Spirng容器中,代碼片段如下:
在對(duì)該類進(jìn)行@Component注釋后,Spring啟動(dòng)時(shí)便會(huì)自動(dòng)調(diào)用initDao方法,查詢一次數(shù)據(jù)庫,將表內(nèi)內(nèi)容以Map格式存儲(chǔ)到全局變量?jī)?nèi)。當(dāng)該數(shù)據(jù)表中的數(shù)據(jù)有所更改時(shí),可在程序相應(yīng)部分調(diào)用initDao方法,以實(shí)現(xiàn)數(shù)據(jù)庫與緩存中內(nèi)容的完全一致。
2.2.5 頁面靜態(tài)化
在類似首頁、門戶等的匯總展示頁面中,不可避免的會(huì)調(diào)用大量的數(shù)據(jù)庫操作語句,獲取信息來填充頁面框架,在讀取存儲(chǔ)在數(shù)據(jù)庫或者其它存儲(chǔ)媒介中內(nèi)容的時(shí)候,由于其操作語句的復(fù)雜性、頻繁性會(huì)造成服務(wù)器端處理數(shù)據(jù)的壓力,影響到系統(tǒng)性能以及用戶體驗(yàn)。針對(duì)該類頁面,可以將其做靜態(tài)化處理,在不改變頁面原本內(nèi)容的情況下作為HTML靜態(tài)頁面存儲(chǔ),可以省去頻繁連接數(shù)據(jù)庫等一系列動(dòng)態(tài)操作的過程,從而使整個(gè)頁面的渲染變得更加迅速。讀取靜態(tài)頁面流程如圖3所示。
圖3 讀取靜態(tài)頁面流程
在用戶發(fā)送請(qǐng)求后,如果存在對(duì)頁面信息的更改操作,則刪除其對(duì)應(yīng)的靜態(tài)頁面,該過程保證了所存儲(chǔ)的HTML頁面內(nèi)始終為最新信息。如果該請(qǐng)求為讀取操作,需要判斷是否存儲(chǔ)了相應(yīng)的HTML 頁面,如果有則直接讀取,沒有則對(duì)請(qǐng)求進(jìn)行編譯,生成靜態(tài)頁面。該過程保證了在頁面沒有更改信息的情況下,只動(dòng)態(tài)讀取一次信息,之后的請(qǐng)求都將直接訪問靜態(tài)頁面,從而避免了與存儲(chǔ)媒介進(jìn)行數(shù)據(jù)交互的過程,訪問速度較動(dòng)態(tài)頁面有大幅度提升,同時(shí)也降低了數(shù)據(jù)庫的訪問壓力,系統(tǒng)在性能上也有顯著改善。
數(shù)據(jù)庫優(yōu)化的主要目的是最大限度的降低數(shù)據(jù)響應(yīng)時(shí)間和提高數(shù)據(jù)庫的吞吐量[4]。為達(dá)到此目的,需要了解系統(tǒng)具體需求以及數(shù)據(jù)的邏輯結(jié)構(gòu),甚至需要在不同優(yōu)化策略之間進(jìn)行權(quán)衡。
2.3.1 創(chuàng)建索引
當(dāng)數(shù)據(jù)庫執(zhí)行操作語句時(shí),在默認(rèn)情況下是根據(jù)條件進(jìn)行全表掃描,每當(dāng)遇到匹配項(xiàng)時(shí),便將其添加到搜索結(jié)果內(nèi);在已經(jīng)對(duì)某唯一標(biāo)識(shí)建立索引的情況下,查詢時(shí)會(huì)先去索引中定位符合條件的紀(jì)錄行數(shù),從而得到所需結(jié)果。如果把數(shù)據(jù)庫理解為一本書,那么索引便是這本書的目錄,根據(jù)目錄去書里查找內(nèi)容顯然比逐頁查找要迅速。索引的結(jié)構(gòu)與二叉樹類似,根據(jù)關(guān)鍵碼完成對(duì)信息的訪問,根據(jù)少量的信息讀取便可以定位到正確的行[5]。建立索引的本質(zhì)目的是提高數(shù)據(jù)庫檢索效率,進(jìn)而提高應(yīng)用系統(tǒng)的性能,但是索引的建立和存儲(chǔ)會(huì)占用一定的物理空間,更改表內(nèi)數(shù)據(jù)時(shí)索引也要進(jìn)行相應(yīng)的動(dòng)態(tài)維護(hù),從而影響到維護(hù)數(shù)據(jù)的速度,通常需要在有下列特征的字段上建立索引[6]:①建立了主鍵或者外鍵的字段;②需要頻繁、快速查詢的字段;③定義了排序規(guī)則的字段;④在檢索過程中,相互之間需要組合到一起的字段。
2.3.2 數(shù)據(jù)分表存儲(chǔ)
對(duì)于存儲(chǔ)大量紀(jì)錄的數(shù)據(jù)庫表,執(zhí)行一次操作會(huì)耗費(fèi)相對(duì)較長(zhǎng)的時(shí)間,尤其在高并發(fā)訪問下,容易造成服務(wù)器負(fù)荷激增,檢索速度急速下降。而將數(shù)據(jù)分表存儲(chǔ),可以減少查詢時(shí)操作的紀(jì)錄條數(shù),避免無關(guān)數(shù)據(jù)的訪問,提高檢索速度。數(shù)據(jù)分表存儲(chǔ),找到適合的分表方法非常重要,例如可以將數(shù)據(jù)按照某種標(biāo)識(shí)進(jìn)行分表,如將標(biāo)記為已刪除的記錄、標(biāo)記為存檔不做修改的記錄進(jìn)行分表存儲(chǔ)。又如:將歷史數(shù)據(jù)與當(dāng)前數(shù)據(jù)分放在不同的數(shù)據(jù)表內(nèi),這樣逐次累積的數(shù)據(jù)量幾乎影響不到當(dāng)前表的大小,可以使得當(dāng)前表的記錄條數(shù)、維護(hù)效率都維持在一定的范圍內(nèi)。
2.3.3 修改缺省配置
數(shù)據(jù)庫可用內(nèi)存是影響其性能的一個(gè)重要因素,但大多數(shù)數(shù)據(jù)庫服務(wù)默認(rèn)安裝后,都設(shè)有一個(gè)缺省內(nèi)存,如SQL服務(wù)使用的缺省內(nèi)存不超過1.8G,在此情況下,即便較大幅度的升級(jí)了服務(wù)器的配置,系統(tǒng)性能也不會(huì)因此而有明顯提升。因此為了提供給數(shù)據(jù)庫最適宜的內(nèi)存需求,需要修改數(shù)據(jù)庫服務(wù)的參數(shù)配置。如可對(duì)NON_HEAP_SE (DBM)、MAXAPPLS (DB)等參數(shù)進(jìn)行重新設(shè)置,具體配置參照有關(guān)數(shù)據(jù)庫專業(yè)資料。
中間件獨(dú)立于服務(wù)器客戶端的操作系統(tǒng)之上,其作用是用來管理網(wǎng)絡(luò)通信以及計(jì)算機(jī)資源[7]。其根本作用是為應(yīng)用層提供運(yùn)行開發(fā)環(huán)境,進(jìn)行信息的交換,以實(shí)現(xiàn)集成復(fù)雜應(yīng)用的目的。中間件原理如圖4所示。
圖4 中間件原理
中間件的結(jié)構(gòu)體系由數(shù)據(jù)庫、中間件、Web服務(wù)構(gòu)成,其本身不能夠獨(dú)立運(yùn)行,必須部署在中間件容器之中,才能夠正常運(yùn)行[8]。中間件的使用不僅可以縮短開發(fā)周期,也減少了維護(hù)、運(yùn)行和管理的工作量。因此,中間件是一個(gè)完整系統(tǒng)的重要組成部分,如果在項(xiàng)目初期沒有制定合理的規(guī)范,將會(huì)嚴(yán)重到系統(tǒng)的性能甚至穩(wěn)定性,所以,制定合理的中間件環(huán)境規(guī)范是十分必要的。
2.4.1 更改默認(rèn)連接數(shù)
在高并發(fā)訪問情況下,請(qǐng)求連接中間件的線程數(shù)量會(huì)增多,這會(huì)導(dǎo)致大部分請(qǐng)求一直處于排隊(duì)的情況中,隨著請(qǐng)求的增多,等待排隊(duì)的最大時(shí)間也會(huì)越來越大,這會(huì)導(dǎo)致響應(yīng)時(shí)間的增大,影響到系統(tǒng)性能。因此需要根據(jù)實(shí)際項(xiàng)目情況,修改中間件的默認(rèn)配置。以tomcat為例,配置文件中和連接相關(guān)的參數(shù)有maxThreads、acceptCount、connnectionTimeout和minSpareThreads等。默認(rèn)配置如下:
如maxThreads表示可創(chuàng)建的最大連接線程數(shù);accept-Count表示當(dāng)連接線程數(shù)達(dá)到最大時(shí),可以接受排隊(duì)的請(qǐng)求個(gè)數(shù)。因此可以適當(dāng)修改默認(rèn)配置的值,增大并發(fā)連接數(shù),以滿足系統(tǒng)需求。
2.4.2 增加中間件可使用內(nèi)存
Tomcat本身不能直接在計(jì)算機(jī)上運(yùn)行,需要依賴于操作系統(tǒng)和一個(gè)java虛擬機(jī)。在大負(fù)載情況下,應(yīng)用程序會(huì)占用更多的內(nèi)存,當(dāng)應(yīng)用程序需要的內(nèi)存超出堆的最大值時(shí),虛擬機(jī)就會(huì)提示內(nèi)存溢出,并且導(dǎo)致應(yīng)用服務(wù)的崩潰,因此需要更改java虛擬機(jī)可使用的內(nèi)存值來提升系統(tǒng)性能。
例如:在文件/bin/catalina.bat的前面,增加如下設(shè)置:JAVA_OPTS='-Xms256m-Xmx512m',表示初始化內(nèi)存為256 MB,可以使用的最大內(nèi)存為512 MB。
在系統(tǒng)實(shí)際應(yīng)用中,尤其在多節(jié)點(diǎn)、高并發(fā)訪問的情況下,經(jīng)常會(huì)出現(xiàn)服務(wù)器負(fù)載過重的情況,而單純的升級(jí)一臺(tái)服務(wù)器的配置已經(jīng)不能滿足需求,必須設(shè)置多臺(tái)物理服務(wù)器,采用負(fù)載均衡技術(shù)構(gòu)建系統(tǒng)。負(fù)載均衡技術(shù)在減少網(wǎng)絡(luò)堵塞以及提高服務(wù)器響應(yīng)速度方面具有顯著的效果,其原理是根據(jù)具體的策略,將接收到的請(qǐng)求分配給特定的服務(wù)器。通過軟件或者硬件技術(shù)均可以實(shí)現(xiàn)負(fù)載均衡,常用的軟件有LVS,ginx等,硬件有F5,A10等。在性能方面,硬件設(shè)備比軟件更為可靠[9]。負(fù)載均衡的方法有很多種,以下是目前較為常用的幾種方式:①軟件負(fù)載均衡;②反向代理負(fù)載均衡;③DNS負(fù)載均衡;④硬件負(fù)載均衡;⑤基于NAT 的負(fù)載均衡[10]。
全國(guó)基層農(nóng)業(yè)技術(shù)推廣體系管理信息系統(tǒng)目前擁有部級(jí)用戶8 人,省級(jí)用戶4000 余人,市級(jí)用戶200 000 人,縣級(jí)用戶400 000人,其中峰值并發(fā)訪問量可達(dá)10 000人。另外系統(tǒng)每季度均會(huì)進(jìn)行一次全國(guó)范圍的數(shù)據(jù)采集工作,每次采集到的各類信息可達(dá)200 0000余條。針對(duì)這種大用戶、大數(shù)據(jù)、高并發(fā)訪問的情況,系統(tǒng)的性能面臨很大的考驗(yàn),因此系統(tǒng)基于本方案對(duì)各部分進(jìn)行了優(yōu)化。
在Web應(yīng)用系統(tǒng)中,請(qǐng)求的響應(yīng)時(shí)間為網(wǎng)絡(luò)響應(yīng)時(shí)間、服務(wù)器響應(yīng)時(shí)間和頁面渲染時(shí)間之和 (圖5),即:TTLB= (N1+N2+N3+N4)+ (A1+A2+A3)+W1。
圖5 請(qǐng)求響應(yīng)時(shí)間構(gòu)成
在網(wǎng)絡(luò)帶寬一定的情況下,只考慮服務(wù)器響應(yīng)時(shí)間以及頁面渲染時(shí)間即可驗(yàn)證系統(tǒng)的響應(yīng)性能是否有顯著優(yōu)化。以并發(fā)訪問量較高的登陸功能為例,單個(gè)請(qǐng)求的各部分響應(yīng)時(shí)間對(duì)比見表2。
表2 各部分響應(yīng)時(shí)間對(duì)比
由表2結(jié)果可知,通過執(zhí)行系統(tǒng)前后端的各項(xiàng)優(yōu)化策略,單個(gè)請(qǐng)求的頁面響應(yīng)時(shí)間縮短了20%。
而在6000用戶并發(fā)訪問的情況下,登陸響應(yīng)時(shí)間、應(yīng)用服務(wù)器CPU 利用率、數(shù)據(jù)庫服務(wù)器CPU 利用率對(duì)比結(jié)果見表3。
表3 響應(yīng)時(shí)間及利用率對(duì)比
通過表3對(duì)比可知,系統(tǒng)無論是在響應(yīng)時(shí)間還是服務(wù)器CPU 利用率上都有了較大幅度的提高,其中應(yīng)用服務(wù)器CPU 利用率降低了40%,數(shù)據(jù)庫服務(wù)器CPU 利用率降低了35%。
在最近一次的數(shù)據(jù)采集工作中,系統(tǒng)的各部分功能運(yùn)行正常,各個(gè)服務(wù)器的利用率均未突破85%,響應(yīng)時(shí)間維持在2.5秒以內(nèi),這也驗(yàn)證了本方案的有效性以及可應(yīng)用性。
本文針對(duì)全國(guó)基層農(nóng)業(yè)技術(shù)推廣體系管理信息系統(tǒng),分析并提供了高并發(fā)Web應(yīng)用系統(tǒng)的性能優(yōu)化策略。首先分析了Web應(yīng)用在大量用戶并發(fā)訪問的情況下,網(wǎng)站響應(yīng)時(shí)間過慢、服務(wù)器超負(fù)載的原因并隨后提出了較為典型的優(yōu)化方案。從Web頁面渲染到服務(wù)器負(fù)載均衡優(yōu)化這五大方面,給出了Web應(yīng)用系統(tǒng)在高并發(fā)情況下的優(yōu)化方案,在最大并發(fā)連接數(shù)、單位時(shí)間內(nèi)處理的HTTP事物數(shù)以及服務(wù)器HTTP帶寬等方面,較大程度上提高了系統(tǒng)性能。該優(yōu)化方案在實(shí)際應(yīng)用中得到了有效驗(yàn)證,成功地提高了Web應(yīng)用系統(tǒng)的響應(yīng)時(shí)間以及負(fù)載能力,對(duì)高并發(fā)Web應(yīng)用系統(tǒng)的優(yōu)化具有重要的意義。
[1]LI Junfeng,HE Mingxin.Design and implementation of Webbased air ticket seckill system with high-concurrency [J].Computer Engineering and Design,2013,34 (3):778-782(in Chinese).[李軍鋒,何明昕.高并發(fā)Web航空票務(wù)秒殺系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) [J].計(jì)算機(jī)工程與設(shè)計(jì),2013,34 (3):778-782.]
[2]SUN Daiyao.Paging technology achieved by java and sqlserver[J].Heilongjiang Science and Technology Information,2009,13 (10):62 (in Chinese).[孫代耀.談java與sqlserver結(jié)合實(shí)現(xiàn)數(shù)據(jù)分頁技術(shù) [J].黑龍江科技信息,2009,13(10):62.]
[3]CHEN Liyan.Design and implementation of medicine distribution system in multiple shops based on J2EE [J].Computer Engineering and Design,2009,30 (4):1010-1012 (in Chinese).[陳立巖.基于J2EE 連鎖醫(yī)藥經(jīng)銷系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30 (4):1010-1012.]
[4]DU Zhiyuan,LIU Gang,WANG Yongzhi.Research on performance optimization of database in university educational administration management system [J].Computer Engineering and Design,2007,28 (20):5066-5068 (in Chinese).[杜志源,劉剛,王永智.高校教務(wù)管理系統(tǒng)數(shù)據(jù)庫性能優(yōu)化的研究 [J].計(jì)算機(jī)工程與設(shè)計(jì),2007,28 (20):5066-5068.]
[5]ZENG Chuanjun,F(xiàn)U Xiufen.Intelligence information management system based on index performance analysis [J].Computer Engineering and Design,2012,33 (2):571-574 (in Chinese).[曾傳軍,傅秀芬.基于索引性能分析的情報(bào)信息管理系統(tǒng)研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2012,33 (2):571-574.]
[6]HE Dongli.Discussion on database design and optimization method in teaching [J].Science and Technology Information(Academic Research),2007,25 (24):329-330 (in Chinese).[何冬黎.數(shù)據(jù)庫原理教學(xué)中數(shù)據(jù)庫設(shè)計(jì)優(yōu)化方法探討[J].科技信息 (學(xué)術(shù)研究),2007,25 (24):329-330.]
[7]QIN Wei,HE Xinhua.Research of Web tickets platform based on high availability load balancing [J].Computer Engineering and Design,2009,30 (23):5321-5324 (in Chinese). [覃偉,何新華.基于高可用性負(fù)載均衡的Web 票務(wù)平臺(tái)研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30 (23):5321-5324.]
[8]ZHANG Yonghua.Research and practice of middleware performance optimization based on Web EOMS [J].Telecommunications Science,2011 (11):147-154 (in Chinese). [張永華.基于Web中間件的運(yùn)維管理系統(tǒng)的性能優(yōu)化方法研究與實(shí)踐 [J].電信科學(xué),2011 (11):147-154.]
[9]BAO Lihui,HUANG Yanfei.Research on architecture of high concurrent website and its solution [J].Computer Science,2012,39 (10):184-187 (in Chinese).[包立輝,黃彥飛.高并發(fā)網(wǎng)站的架構(gòu)研究及解決方案 [J].計(jì)算機(jī)科學(xué),2012,39(10):184-187.]
[10]XUE Zhi.Research and design of performance tunning and high availability in e-commerce Web platform [D].Shanghai:Shanghai Jiao Tong University,2007:41-45 (in Chinese).[薛質(zhì).電子商務(wù)平臺(tái)的性能優(yōu)化和高可靠性研究與實(shí)現(xiàn)[D].上海:上海交通大學(xué),2007:41-45.]