張凱 趙剛 金洋 遼寧省通信公司數(shù)據(jù)通信局
摘要 當(dāng)前互聯(lián)網(wǎng)寬帶增值服務(wù)成為發(fā)展熱點,本文從寬帶網(wǎng)站W(wǎng)eb應(yīng)用系統(tǒng)的共性出發(fā),通過系統(tǒng)架構(gòu)設(shè)計,軟件開發(fā),數(shù)據(jù)庫連接池技術(shù)和網(wǎng)絡(luò)布置等方面的研究,探討了如何解決Web應(yīng)用的承載能力問題,并結(jié)合遼寧當(dāng)?shù)鼐W(wǎng)上招考查詢平臺技術(shù)情況,介紹了解決并發(fā)訪問的經(jīng)驗。
關(guān)鍵詞 B/S Jsp JavaBean組件 數(shù)據(jù)庫連接池 SLB技術(shù)
隨著全球信息產(chǎn)業(yè)蓬勃發(fā)展,計算機寬帶網(wǎng)絡(luò)構(gòu)成了信息通信的高速公路。有了寬帶的支持,企業(yè)的生產(chǎn)水平、服務(wù)質(zhì)量及工作效率都得到了提高,使網(wǎng)上應(yīng)用成為企業(yè)7x24小時開放的“網(wǎng)上營業(yè)廳”。但同時由于客戶訪問量不斷增長,使后臺系統(tǒng)的并發(fā)承載能力面臨極大的挑戰(zhàn)?蛻舳藶g覽器
結(jié)合遼寧通信幾年來網(wǎng)上招考查詢等寬帶應(yīng)用開展的經(jīng)驗和電信級的服務(wù)要求,我們從應(yīng)用系統(tǒng)架構(gòu)設(shè)計,軟件開發(fā),數(shù)據(jù)庫連接池技術(shù)和網(wǎng)絡(luò)設(shè)備的并發(fā)承載等幾個方面進行了研究,總結(jié)出一套適用于寬帶網(wǎng)站應(yīng)用建設(shè)的解決方案。
1 寬帶應(yīng)用架構(gòu)設(shè)計
應(yīng)用系統(tǒng)的發(fā)展經(jīng)歷了從兩層架構(gòu)到三層(或多層)架構(gòu)的過程,在應(yīng)用系統(tǒng)中通常包含三個邏輯組成部分:表達(dá)邏輯、事物邏輯、數(shù)據(jù)存儲。目前的三層(或三層以上的)B/S架構(gòu)通常是以Brower/Web server/DataBase形式為主,這可以將表達(dá)邏輯分布在客戶瀏覽器上,數(shù)據(jù)存儲分布在數(shù)據(jù)庫服務(wù)器端,而事務(wù)邏輯單獨作為一層,結(jié)合在Web服務(wù)器(或其它服務(wù)器)中。這樣可簡化應(yīng)用發(fā)布和維護,更利于軟件集群化的分擔(dān)模式,增加并發(fā)處理能力,靈活的完成多主機的分擔(dān)切換和相互備份作用,實現(xiàn)了并發(fā)性保障。
按照客戶表達(dá)層、事物邏輯處理層和服務(wù)器數(shù)據(jù)存儲層三個方面設(shè)計的系統(tǒng),可根據(jù)業(yè)務(wù)量的多少分配多臺主機,可實現(xiàn)客戶端的簡潔性、系統(tǒng)的邏輯安全性、服務(wù)器的負(fù)載均衡等特點。遼寧通信在設(shè)計網(wǎng)上招考查詢平臺系統(tǒng)時就是按照以上思路進行的。
2 數(shù)據(jù)存取的并發(fā)效率
數(shù)據(jù)庫存取訪問是WEB應(yīng)用系統(tǒng)中的重要操作,又相當(dāng)消耗資源,是制約整個應(yīng)用系統(tǒng)效率的關(guān)鍵因素之一,這里所說的效率包含兩方面:訪問效率和連接效率。
訪問效率是指在與數(shù)據(jù)庫進行數(shù)據(jù)交換時的效率,我們可以從減少數(shù)據(jù)訪問次數(shù),增加數(shù)據(jù)的共享性等方面使訪問效率得以提高;連接效率是指建立數(shù)據(jù)庫連接的效率,在應(yīng)用程序中頻繁地進行數(shù)據(jù)庫連接,是造成數(shù)據(jù)庫訪問效率低下的重要原因,解決數(shù)據(jù)庫連接效率問題的思路是:一旦建立數(shù)據(jù)庫連接,就盡可能地保持這個數(shù)據(jù)庫連接,在執(zhí)行完其它操作后再使用這個連接進行數(shù)據(jù)庫訪問;也可以維護一個可重用的連接池,應(yīng)用系統(tǒng)一啟動就建立一些數(shù)據(jù)庫連接,存儲到數(shù)據(jù)庫連接池,應(yīng)用程序可以使用這些連接,任務(wù)完成后可以把這些連接放回到連接池,供其它應(yīng)用使用。
2.1 Java Bean并發(fā)與訪問效率
遼寧通信網(wǎng)上招考查詢平臺使用Java Bean方法實現(xiàn)重載,提高了訪問效率。JavaBean(或Bean)是一種具有特定架構(gòu)的可重用Java組件,Java開發(fā)語言中引入用實體Bean組件來處理并發(fā)控制問題,基本原理是:其定義了一個抽象級,用來統(tǒng)一所有軟件實體,并且允許每個這樣的實體變成一個組件。通過允許不同來源的獨立代碼在處理方式上“看上去相同”,從而使得Bean能夠?qū)崿F(xiàn)在Java領(lǐng)域內(nèi)部的軟件重用。
在多個客戶端程序需要同時訪問某一個數(shù)據(jù)時,數(shù)據(jù)端不直接訪問實際的數(shù)據(jù)存儲,而是通過訪問對應(yīng)的實體Bean的實例來進行,這樣同一數(shù)據(jù)可以實現(xiàn)多個客戶端同時引用,而在內(nèi)存中只保留一份實例,避免多客戶端檢索同一記錄時對數(shù)據(jù)庫的重復(fù)操作,提高了應(yīng)用效率。
2.2 數(shù)據(jù)庫連接池
Java的數(shù)據(jù)庫連接通常利用JDBC(Java Database Connectivity)來做的,JDBC是一個Java擴展API,它為編程者提供了基于SQL查詢的數(shù)據(jù)訪問能力。但是,通過JDBC連接訪問數(shù)據(jù)庫服務(wù)器的能力,對于電信級應(yīng)用程序還是不夠的。引入連接池的目的就是改善依賴于數(shù)據(jù)庫的java服務(wù)器代碼的性能和并發(fā)性,解決三層架構(gòu)中的中間層與第三層之間的開銷。
池(pooling)本質(zhì)上是一種資源共享形式。連接池不需要每個用戶的請求都經(jīng)歷一個連接操作的開銷,因為連接池是預(yù)先準(zhǔn)備好或按照需要動態(tài)創(chuàng)建的,并且該連接池由容器(Web容器或EJB容器)管理,同時被容器中所有元素共享,這樣java就不等待數(shù)據(jù)庫連接。如果一個連接可用,那么該連接立刻就處于準(zhǔn)備狀態(tài)。如果沒有連接可用,那么將創(chuàng)建一個新連接。這時將會增加由于建立連接所帶來的一些開銷,但在后來的請求中,就又有一個連接添加到連接池中。在最壞的情況下,就是當(dāng)?shù)竭_(dá)連接池允許的最大連接數(shù)時,正在請求的應(yīng)用就需要等待正在使用的連接釋放并返回到連接池中去。由于大多數(shù)數(shù)據(jù)庫交互都是很短的,這個等待時間不會很長。同樣,連接池也避免了斷開連接所需要的開銷,因為連接是一直打開的。
基于Web的中間件產(chǎn)品較多,它們都可以實現(xiàn)池的作用,在遼寧通信招考查詢平臺應(yīng)用中選用WebSphere作為數(shù)據(jù)庫中間件進行數(shù)據(jù)庫連接池管理,提高程序效率,利用其自身的管理機制來監(jiān)視數(shù)據(jù)庫連接的數(shù)量、使用情況等。通常,一個數(shù)據(jù)庫連接池(ConnectionPool)有以下幾個基本的屬性:
m_ConnectionPoolSize:連接池中連接數(shù)量下限
m_ConnectionPoolMax:連接池中連接數(shù)量上限
m_ConnectionUseCount:一個連接的最大使用次數(shù)
m_ConnectionTimeout:一個連接的最長空閑時間
m_MaxConnections:同一時間的最大連接數(shù)
m_timer:定時器
這些屬性定義了連接池與其中連接的有效狀態(tài)值。連接池的自我管理,實際上就是通過定時的對每個連接的狀態(tài)、連接的數(shù)量進行判斷而進行相應(yīng)操作。
3 SLB網(wǎng)絡(luò)處理技術(shù)
前面介紹的是在軟件開發(fā)和數(shù)據(jù)庫連接方面的并發(fā)承載技術(shù)。在網(wǎng)絡(luò)硬件方面,以往解決并發(fā)性問題主要是采用更強計算能力的服務(wù)器來替換,舊的服務(wù)器被淘汰掉。而單臺服務(wù)器的負(fù)載能力終歸是有限的,不能無限擴展,同時成本投入也很大。近幾年提出了SLB(Server Load Balance)服務(wù)器承載均衡網(wǎng)絡(luò)設(shè)備解決方案,并日漸成為主流。
負(fù)載分擔(dān)的主要手段是將用戶的接入請求分散給多個服務(wù)器,一般支持的網(wǎng)絡(luò)設(shè)備具有四/七層交換功能;我們將負(fù)載均衡方法歸納為兩大類型:靜態(tài)和動態(tài)兩種負(fù)載均衡算法,包括:輪詢,比率,優(yōu)先權(quán),最少連接數(shù),最快響應(yīng)速度,觀察方法,預(yù)測法,動態(tài)性能分配,動態(tài)服務(wù)器補充,服務(wù)質(zhì)量,服務(wù)類型,規(guī)則模式等等。在工作時根據(jù)服務(wù)器的狀態(tài)采取適當(dāng)?shù)木廪k法,例如兩臺Web服務(wù)器的CPU利用率分別是25%和50%,則可以按2:1的比例來分配通信量,實現(xiàn)比率(Ratio)負(fù)載分擔(dān)算法的負(fù)載均衡,當(dāng)某個服務(wù)器發(fā)生故障,SLB就把其從服務(wù)器隊列中拿出,不參加下一次的用戶請求分配,直到其恢復(fù)正常。
遼寧通信網(wǎng)上招考查詢平臺的SLB網(wǎng)絡(luò)布置實例是采用哈希算法規(guī)則進行處理的,利用Alteon Websystem四層交換機設(shè)備做負(fù)載分擔(dān)控制。
配置過程:
(1)指定IP interface,并分配到相應(yīng)的Vlan中。
#/cfg/ip/if 1
IP Interface 1# addr 10.10.10.8
IP Interface 1# mask 255.255.255.0
IP Interface 1# ena
IP Interface 1# vlan 1
(2)設(shè)置缺省網(wǎng)關(guān)
#/cfg/ip/gw 1
Default gateway 1# addr 10.10.10.1
Default gateway 1# ena
Default gateway 2# addr 10.10.10.2
Default gateway 2# ena
(3)定義real server
#/cfg/slb/real 1
Real server 1#rip 10.10.10.3
Real server 1#ena
按照以上方法再分別定義RealServer2、3、4。
(4)定義相應(yīng)的real server group組,指定SLB算法為Hash規(guī)則模式,并增加realserver1、2、3、4到group組中
#/cfg/slb/group 1
Real serve group 1#metric hash
Real serve group 1#add 1 2 3 4
(5)定義相應(yīng)的virtual server
#/cfg/slb/virt 1
Virtual server 1# vip 10.10.10.7
Virtual server 1# service http
Virtual Server 1 domain Service#group 1
Virtual Server 1 domain Service#../ena
(6)定義相應(yīng)的健康檢查策略
#/cfg/slb/group 1
Real server group 1#health tcp
(7)定義相應(yīng)的端口信息
#/cfg/slb/port 1
SLB port 1# client ena
SLB port 2# client ena
SLB port 3# server ena
SLB port 4# server ena
SLB port 5# server ena
SLB port 6# server ena
4 結(jié)束語
目前各網(wǎng)絡(luò)運營商們已開始從單純組網(wǎng)接入服務(wù)向網(wǎng)上寬帶增值應(yīng)用的方向發(fā)展,這使得并發(fā)性問題在寬帶應(yīng)用中越來越重要。這里推出的這套解決方案,體現(xiàn)了后臺服務(wù)器集群化承載業(yè)務(wù)的思路,適合電信級服務(wù)質(zhì)量要求。在遼寧地區(qū)經(jīng)受過130多萬人次的高峰期并發(fā)訪問,總體性能表現(xiàn)穩(wěn)定。
參 考 文 獻(xiàn)
[1] 施伯樂等編著,數(shù)據(jù)庫系統(tǒng)教程,高等教育出版社,1999(2001重。
[2] 張金濤編著,基于Linux的Apache +Jsp+Oracle,清華大學(xué)出版社,2002.3
[3] 王軍等譯, JSP編程指南,Simon Brown等著,電子工業(yè)出版社,2002.10
[4] RonBen-Natan && Ori Sasson著,熊志輝譯,IBM Websphere Application Server實用大全,清華大學(xué)出版社,
2003年3月
[5] Sun公司,iPlanet Messaging Server Administrator's Guide,www.sun.com網(wǎng)站發(fā)布docs.sun.
com/source/816-6013-10
[6] 北電公司,ASW80 Application Guide,電子資料手冊
[7] F5 Networks公司,Technical&&Application Solutions,f5.coa.cn/adm/upload/UIE.pdf
[8] 王磊等譯, Oracle 8/8i 開發(fā)使用手冊, 機械工業(yè)出版社,2000年
張 凱,男,在遼寧省通信公司數(shù)據(jù)通信局從事數(shù)據(jù)業(yè)務(wù)的集成開發(fā)工作。
趙 剛,男,在遼寧省通信公司數(shù)據(jù)通信局工作,主要從事計算機軟件開發(fā)工作。
金 洋,男,在遼寧省通信公司數(shù)據(jù)通信局工作,主要從事網(wǎng)絡(luò)運行維護工作。
----《中國數(shù)據(jù)通信》