電信級(jí)寬帶應(yīng)用網(wǎng)站并發(fā)性承載均衡研究

張凱 趙剛 金洋 遼寧省通信公司數(shù)據(jù)通信局

  摘要 當(dāng)前互聯(lián)網(wǎng)寬帶增值服務(wù)成為發(fā)展熱點(diǎn),本文從寬帶網(wǎng)站W(wǎng)eb應(yīng)用系統(tǒng)的共性出發(fā),通過(guò)系統(tǒng)架構(gòu)設(shè)計(jì),軟件開(kāi)發(fā),數(shù)據(jù)庫(kù)連接池技術(shù)和網(wǎng)絡(luò)布置等方面的研究,探討了如何解決Web應(yīng)用的承載能力問(wèn)題,并結(jié)合遼寧當(dāng)?shù)鼐W(wǎng)上招考查詢平臺(tái)技術(shù)情況,介紹了解決并發(fā)訪問(wèn)的經(jīng)驗(yàn)。

  關(guān)鍵詞 B/S Jsp JavaBean組件 數(shù)據(jù)庫(kù)連接池 SLB技術(shù)

  隨著全球信息產(chǎn)業(yè)蓬勃發(fā)展,計(jì)算機(jī)寬帶網(wǎng)絡(luò)構(gòu)成了信息通信的高速公路。有了寬帶的支持,企業(yè)的生產(chǎn)水平、服務(wù)質(zhì)量及工作效率都得到了提高,使網(wǎng)上應(yīng)用成為企業(yè)7x24小時(shí)開(kāi)放的“網(wǎng)上營(yíng)業(yè)廳”。但同時(shí)由于客戶訪問(wèn)量不斷增長(zhǎng),使后臺(tái)系統(tǒng)的并發(fā)承載能力面臨極大的挑戰(zhàn)?蛻舳藶g覽器

  結(jié)合遼寧通信幾年來(lái)網(wǎng)上招考查詢等寬帶應(yīng)用開(kāi)展的經(jīng)驗(yàn)和電信級(jí)的服務(wù)要求,我們從應(yīng)用系統(tǒng)架構(gòu)設(shè)計(jì),軟件開(kāi)發(fā),數(shù)據(jù)庫(kù)連接池技術(shù)和網(wǎng)絡(luò)設(shè)備的并發(fā)承載等幾個(gè)方面進(jìn)行了研究,總結(jié)出一套適用于寬帶網(wǎng)站應(yīng)用建設(shè)的解決方案。

1 寬帶應(yīng)用架構(gòu)設(shè)計(jì)

  應(yīng)用系統(tǒng)的發(fā)展經(jīng)歷了從兩層架構(gòu)到三層(或多層)架構(gòu)的過(guò)程,在應(yīng)用系統(tǒng)中通常包含三個(gè)邏輯組成部分:表達(dá)邏輯、事物邏輯、數(shù)據(jù)存儲(chǔ)。目前的三層(或三層以上的)B/S架構(gòu)通常是以Brower/Web server/DataBase形式為主,這可以將表達(dá)邏輯分布在客戶瀏覽器上,數(shù)據(jù)存儲(chǔ)分布在數(shù)據(jù)庫(kù)服務(wù)器端,而事務(wù)邏輯單獨(dú)作為一層,結(jié)合在Web服務(wù)器(或其它服務(wù)器)中。這樣可簡(jiǎn)化應(yīng)用發(fā)布和維護(hù),更利于軟件集群化的分擔(dān)模式,增加并發(fā)處理能力,靈活的完成多主機(jī)的分擔(dān)切換和相互備份作用,實(shí)現(xiàn)了并發(fā)性保障。

  按照客戶表達(dá)層、事物邏輯處理層和服務(wù)器數(shù)據(jù)存儲(chǔ)層三個(gè)方面設(shè)計(jì)的系統(tǒng),可根據(jù)業(yè)務(wù)量的多少分配多臺(tái)主機(jī),可實(shí)現(xiàn)客戶端的簡(jiǎn)潔性、系統(tǒng)的邏輯安全性、服務(wù)器的負(fù)載均衡等特點(diǎn)。遼寧通信在設(shè)計(jì)網(wǎng)上招考查詢平臺(tái)系統(tǒng)時(shí)就是按照以上思路進(jìn)行的。

2 數(shù)據(jù)存取的并發(fā)效率

  數(shù)據(jù)庫(kù)存取訪問(wèn)是WEB應(yīng)用系統(tǒng)中的重要操作,又相當(dāng)消耗資源,是制約整個(gè)應(yīng)用系統(tǒng)效率的關(guān)鍵因素之一,這里所說(shuō)的效率包含兩方面:訪問(wèn)效率和連接效率。

  訪問(wèn)效率是指在與數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)交換時(shí)的效率,我們可以從減少數(shù)據(jù)訪問(wèn)次數(shù),增加數(shù)據(jù)的共享性等方面使訪問(wèn)效率得以提高;連接效率是指建立數(shù)據(jù)庫(kù)連接的效率,在應(yīng)用程序中頻繁地進(jìn)行數(shù)據(jù)庫(kù)連接,是造成數(shù)據(jù)庫(kù)訪問(wèn)效率低下的重要原因,解決數(shù)據(jù)庫(kù)連接效率問(wèn)題的思路是:一旦建立數(shù)據(jù)庫(kù)連接,就盡可能地保持這個(gè)數(shù)據(jù)庫(kù)連接,在執(zhí)行完其它操作后再使用這個(gè)連接進(jìn)行數(shù)據(jù)庫(kù)訪問(wèn);也可以維護(hù)一個(gè)可重用的連接池,應(yīng)用系統(tǒng)一啟動(dòng)就建立一些數(shù)據(jù)庫(kù)連接,存儲(chǔ)到數(shù)據(jù)庫(kù)連接池,應(yīng)用程序可以使用這些連接,任務(wù)完成后可以把這些連接放回到連接池,供其它應(yīng)用使用。

2.1 Java Bean并發(fā)與訪問(wèn)效率

  遼寧通信網(wǎng)上招考查詢平臺(tái)使用Java Bean方法實(shí)現(xiàn)重載,提高了訪問(wèn)效率。JavaBean(或Bean)是一種具有特定架構(gòu)的可重用Java組件,Java開(kāi)發(fā)語(yǔ)言中引入用實(shí)體Bean組件來(lái)處理并發(fā)控制問(wèn)題,基本原理是:其定義了一個(gè)抽象級(jí),用來(lái)統(tǒng)一所有軟件實(shí)體,并且允許每個(gè)這樣的實(shí)體變成一個(gè)組件。通過(guò)允許不同來(lái)源的獨(dú)立代碼在處理方式上“看上去相同”,從而使得Bean能夠?qū)崿F(xiàn)在Java領(lǐng)域內(nèi)部的軟件重用。

在多個(gè)客戶端程序需要同時(shí)訪問(wèn)某一個(gè)數(shù)據(jù)時(shí),數(shù)據(jù)端不直接訪問(wèn)實(shí)際的數(shù)據(jù)存儲(chǔ),而是通過(guò)訪問(wèn)對(duì)應(yīng)的實(shí)體Bean的實(shí)例來(lái)進(jìn)行,這樣同一數(shù)據(jù)可以實(shí)現(xiàn)多個(gè)客戶端同時(shí)引用,而在內(nèi)存中只保留一份實(shí)例,避免多客戶端檢索同一記錄時(shí)對(duì)數(shù)據(jù)庫(kù)的重復(fù)操作,提高了應(yīng)用效率。

2.2 數(shù)據(jù)庫(kù)連接池

  Java的數(shù)據(jù)庫(kù)連接通常利用JDBC(Java Database Connectivity)來(lái)做的,JDBC是一個(gè)Java擴(kuò)展API,它為編程者提供了基于SQL查詢的數(shù)據(jù)訪問(wèn)能力。但是,通過(guò)JDBC連接訪問(wèn)數(shù)據(jù)庫(kù)服務(wù)器的能力,對(duì)于電信級(jí)應(yīng)用程序還是不夠的。引入連接池的目的就是改善依賴于數(shù)據(jù)庫(kù)的java服務(wù)器代碼的性能和并發(fā)性,解決三層架構(gòu)中的中間層與第三層之間的開(kāi)銷。

  池(pooling)本質(zhì)上是一種資源共享形式。連接池不需要每個(gè)用戶的請(qǐng)求都經(jīng)歷一個(gè)連接操作的開(kāi)銷,因?yàn)檫B接池是預(yù)先準(zhǔn)備好或按照需要?jiǎng)討B(tài)創(chuàng)建的,并且該連接池由容器(Web容器或EJB容器)管理,同時(shí)被容器中所有元素共享,這樣java就不等待數(shù)據(jù)庫(kù)連接。如果一個(gè)連接可用,那么該連接立刻就處于準(zhǔn)備狀態(tài)。如果沒(méi)有連接可用,那么將創(chuàng)建一個(gè)新連接。這時(shí)將會(huì)增加由于建立連接所帶來(lái)的一些開(kāi)銷,但在后來(lái)的請(qǐng)求中,就又有一個(gè)連接添加到連接池中。在最壞的情況下,就是當(dāng)?shù)竭_(dá)連接池允許的最大連接數(shù)時(shí),正在請(qǐng)求的應(yīng)用就需要等待正在使用的連接釋放并返回到連接池中去。由于大多數(shù)數(shù)據(jù)庫(kù)交互都是很短的,這個(gè)等待時(shí)間不會(huì)很長(zhǎng)。同樣,連接池也避免了斷開(kāi)連接所需要的開(kāi)銷,因?yàn)檫B接是一直打開(kāi)的。

  基于Web的中間件產(chǎn)品較多,它們都可以實(shí)現(xiàn)池的作用,在遼寧通信招考查詢平臺(tái)應(yīng)用中選用WebSphere作為數(shù)據(jù)庫(kù)中間件進(jìn)行數(shù)據(jù)庫(kù)連接池管理,提高程序效率,利用其自身的管理機(jī)制來(lái)監(jiān)視數(shù)據(jù)庫(kù)連接的數(shù)量、使用情況等。通常,一個(gè)數(shù)據(jù)庫(kù)連接池(ConnectionPool)有以下幾個(gè)基本的屬性:

  m_ConnectionPoolSize:連接池中連接數(shù)量下限

  m_ConnectionPoolMax:連接池中連接數(shù)量上限

  m_ConnectionUseCount:一個(gè)連接的最大使用次數(shù)

  m_ConnectionTimeout:一個(gè)連接的最長(zhǎng)空閑時(shí)間

  m_MaxConnections:同一時(shí)間的最大連接數(shù)

  m_timer:定時(shí)器

  這些屬性定義了連接池與其中連接的有效狀態(tài)值。連接池的自我管理,實(shí)際上就是通過(guò)定時(shí)的對(duì)每個(gè)連接的狀態(tài)、連接的數(shù)量進(jìn)行判斷而進(jìn)行相應(yīng)操作。

3 SLB網(wǎng)絡(luò)處理技術(shù)

  前面介紹的是在軟件開(kāi)發(fā)和數(shù)據(jù)庫(kù)連接方面的并發(fā)承載技術(shù)。在網(wǎng)絡(luò)硬件方面,以往解決并發(fā)性問(wèn)題主要是采用更強(qiáng)計(jì)算能力的服務(wù)器來(lái)替換,舊的服務(wù)器被淘汰掉。而單臺(tái)服務(wù)器的負(fù)載能力終歸是有限的,不能無(wú)限擴(kuò)展,同時(shí)成本投入也很大。近幾年提出了SLB(Server Load Balance)服務(wù)器承載均衡網(wǎng)絡(luò)設(shè)備解決方案,并日漸成為主流。

  負(fù)載分擔(dān)的主要手段是將用戶的接入請(qǐng)求分散給多個(gè)服務(wù)器,一般支持的網(wǎng)絡(luò)設(shè)備具有四/七層交換功能;我們將負(fù)載均衡方法歸納為兩大類型:靜態(tài)和動(dòng)態(tài)兩種負(fù)載均衡算法,包括:輪詢,比率,優(yōu)先權(quán),最少連接數(shù),最快響應(yīng)速度,觀察方法,預(yù)測(cè)法,動(dòng)態(tài)性能分配,動(dòng)態(tài)服務(wù)器補(bǔ)充,服務(wù)質(zhì)量,服務(wù)類型,規(guī)則模式等等。在工作時(shí)根據(jù)服務(wù)器的狀態(tài)采取適當(dāng)?shù)木廪k法,例如兩臺(tái)Web服務(wù)器的CPU利用率分別是25%和50%,則可以按2:1的比例來(lái)分配通信量,實(shí)現(xiàn)比率(Ratio)負(fù)載分擔(dān)算法的負(fù)載均衡,當(dāng)某個(gè)服務(wù)器發(fā)生故障,SLB就把其從服務(wù)器隊(duì)列中拿出,不參加下一次的用戶請(qǐng)求分配,直到其恢復(fù)正常。

  遼寧通信網(wǎng)上招考查詢平臺(tái)的SLB網(wǎng)絡(luò)布置實(shí)例是采用哈希算法規(guī)則進(jìn)行處理的,利用Alteon Websystem四層交換機(jī)設(shè)備做負(fù)載分擔(dān)控制。

配置過(guò)程:

(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é)束語(yǔ)

  目前各網(wǎng)絡(luò)運(yùn)營(yíng)商們已開(kāi)始從單純組網(wǎng)接入服務(wù)向網(wǎng)上寬帶增值應(yīng)用的方向發(fā)展,這使得并發(fā)性問(wèn)題在寬帶應(yīng)用中越來(lái)越重要。這里推出的這套解決方案,體現(xiàn)了后臺(tái)服務(wù)器集群化承載業(yè)務(wù)的思路,適合電信級(jí)服務(wù)質(zhì)量要求。在遼寧地區(qū)經(jīng)受過(guò)130多萬(wàn)人次的高峰期并發(fā)訪問(wèn),總體性能表現(xiàn)穩(wěn)定。

參 考 文 獻(xiàn)

[1] 施伯樂(lè)等編著,數(shù)據(jù)庫(kù)系統(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實(shí)用大全,清華大學(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,電子資料手冊(cè)

[7] F5 Networks公司,Technical&&Application Solutions,f5.coa.cn/adm/upload/UIE.pdf

[8] 王磊等譯, Oracle 8/8i 開(kāi)發(fā)使用手冊(cè), 機(jī)械工業(yè)出版社,2000年

張 凱,男,在遼寧省通信公司數(shù)據(jù)通信局從事數(shù)據(jù)業(yè)務(wù)的集成開(kāi)發(fā)工作。

趙 剛,男,在遼寧省通信公司數(shù)據(jù)通信局工作,主要從事計(jì)算機(jī)軟件開(kāi)發(fā)工作。

金 洋,男,在遼寧省通信公司數(shù)據(jù)通信局工作,主要從事網(wǎng)絡(luò)運(yùn)行維護(hù)工作。

----《中國(guó)數(shù)據(jù)通信》


微信掃描分享本文到朋友圈
掃碼關(guān)注5G通信官方公眾號(hào),免費(fèi)領(lǐng)取以下5G精品資料

本周熱點(diǎn)本月熱點(diǎn)

 

  最熱通信招聘

業(yè)界最新資訊


  最新招聘信息