目錄
目錄X

SmartGov3.5版——基于緩存隊(duì)列的在線訪談性能改進(jìn)實(shí)現(xiàn)

在SmartGov3.0發(fā)布后,我們就一直在想辦法把在線訪談文字直播所支持的并發(fā)性和負(fù)載能力至少增加1倍以上,開(kāi)發(fā)部經(jīng)過(guò)一個(gè)多月的努力,完成了對(duì)線訪談文字直播部分的優(yōu)化。我們總結(jié)了優(yōu)化的過(guò)程分享給可能遇到相同問(wèn)題的朋友做為參考,非常歡迎大家指出我們的不足,我們會(huì)繼續(xù)加以改進(jìn)。
基于在線訪談對(duì)高實(shí)時(shí)性、大并發(fā)性和高負(fù)載性的需求,我們針對(duì)在線訪談模塊分別在多級(jí)緩存與緩存的可擴(kuò)展性、網(wǎng)絡(luò)帶寬的節(jié)省、多客戶端支持和代碼執(zhí)行性能等方面進(jìn)行了改進(jìn)。
首先我們來(lái)看一下改進(jìn)前后的部署結(jié)構(gòu)圖

           
改進(jìn)前部署圖

 

             

  在對(duì)在線訪談部分改進(jìn)之前,訪談?dòng)脩舻膶?xiě)入時(shí)直接存放到數(shù)據(jù)庫(kù)中,而讀取是通過(guò)一個(gè)緩存的List列表完成。當(dāng)訪談開(kāi)始的時(shí)候,后臺(tái)管理員錄入訪談內(nèi)容,寫(xiě)入數(shù)據(jù)庫(kù),然后更新整個(gè)List列表。對(duì)于前臺(tái)文字直播頁(yè)面,首先由DetialList.aspx頁(yè)去請(qǐng)求直播內(nèi)容,DetailList.aspx根據(jù)情況是去選擇讀取數(shù)據(jù)庫(kù)還是直接返回List緩存列表。從改進(jìn)前的請(qǐng)求流程來(lái)看,存在著以下問(wèn)題:
1、添加訪談內(nèi)容時(shí),會(huì)更新整個(gè)List列表,而更新整個(gè)List列表會(huì)讀取數(shù)據(jù)庫(kù),并且經(jīng)過(guò)監(jiān)測(cè)發(fā)現(xiàn)前臺(tái)讀取緩存List時(shí)緩存命中率也比較低。
2、目前的SmartGov的在線直播是直接采用HttpRuntim.Cache,而不能夠在發(fā)布后更改成其他緩存方式。
3、直接采用的是DetialList.aspx頁(yè)面來(lái)顯示直播內(nèi)容,而作為前臺(tái)動(dòng)態(tài)頁(yè),每次請(qǐng)求的輸出會(huì)經(jīng)過(guò)模板綁定、解析、其他多余的HTML代碼、頁(yè)面事件等流程。
基于以上問(wèn)題,我們對(duì)在線訪談做多重改進(jìn)來(lái)解決潛在的瓶頸。首先看一下改進(jìn)后的部署結(jié)構(gòu)圖:
 

 
改進(jìn)后部署圖







從兩個(gè)結(jié)構(gòu)圖的對(duì)比來(lái)看,改進(jìn)后的部署結(jié)構(gòu)的復(fù)雜性、擴(kuò)展性有了一個(gè)層次的提高。在新的結(jié)構(gòu)下,部署改進(jìn)了如下內(nèi)容:
1、可支持獨(dú)立的緩存服務(wù)器。新的結(jié)構(gòu)圖下,我們既可以沿用原有的部署方式,從而節(jié)省硬件的開(kāi)支。當(dāng)系統(tǒng)需要支持高負(fù)載、高并發(fā)的運(yùn)行環(huán)境時(shí),就可以根據(jù)所承擔(dān)的負(fù)載性進(jìn)行擴(kuò)展部署,更換緩存接口,實(shí)現(xiàn)獨(dú)立的緩存服務(wù)器(可以通過(guò)自己實(shí)現(xiàn)我們提供的緩存接口或者定制來(lái)滿足要求)。緩存部分可以采用Memcached等其他分布式緩存來(lái)代替原來(lái)的HttpRuntim.Cache。
2、在代碼方面,我們優(yōu)化了代碼的執(zhí)行性能,并且增加了緩存隊(duì)列來(lái)代替原來(lái)的List列表緩存方式。這樣在更新緩存內(nèi)容時(shí),只更新最新的數(shù)據(jù),而不用重新獲取整個(gè)List列表。這樣大大的提高了緩存命中率,我們檢測(cè)發(fā)現(xiàn)文字直播讀取時(shí)幾乎不會(huì)讀取數(shù)據(jù)庫(kù),所有的內(nèi)容都在緩存隊(duì)列中。
3、通過(guò)直接調(diào)用DetialList.aspx來(lái)顯示訪談?dòng)涗浉淖兂闪薟ebServices的方式,這樣既可以把WebServices來(lái)做二級(jí)緩存,也可以用來(lái)支持多客戶端、多應(yīng)用程序直播的方式。采用WebServices減少了aspx頁(yè)面事件和模板綁定流程,從而會(huì)大大減少頁(yè)面的請(qǐng)求的時(shí)間,更快的反饋給用戶請(qǐng)求結(jié)果;采用WebServices減少了頁(yè)面大小,降低了對(duì)帶寬的需求和節(jié)省流量。
a) 對(duì)于改進(jìn)前后我們還使用了測(cè)試工具對(duì)它們的性能進(jìn)行了一次測(cè)試比較。在沒(méi)有改進(jìn)之前,一次頁(yè)面請(qǐng)求大概需要消耗86毫秒的時(shí)間,但改進(jìn)后一次web服務(wù)的請(qǐng)求,大概需要消耗22毫秒的時(shí)間。從數(shù)據(jù)上來(lái)看,性能幾乎提升了3倍多。
以下為測(cè)試請(qǐng)求DetailList.aspx頁(yè)面執(zhí)行Page_Load方法的截圖:
 


改進(jìn)前性能測(cè)試



b) 請(qǐng)求DetailListService  web服務(wù)的截圖

 


改進(jìn)后性能測(cè)試



4、節(jié)省服務(wù)器帶寬,降低應(yīng)用單位的流量費(fèi)用。對(duì)于訪談數(shù)據(jù)是采用.NET webservice的方式進(jìn)行調(diào)用。使用這種方式,數(shù)據(jù)將可以用Json格式或xml格式進(jìn)行傳輸,相比每次請(qǐng)求的都返回整個(gè)HTML格式的頁(yè)面數(shù)據(jù)來(lái)看,每次的請(qǐng)求流量比原來(lái)頁(yè)面方式降低了4倍。
a)  使用firebug來(lái)測(cè)試頁(yè)面的加載流量,下圖是改進(jìn)前傳輸?shù)娇蛻舳说臄?shù)據(jù)為8kb

 


改進(jìn)前的請(qǐng)求大小比較



b)  改進(jìn)后請(qǐng)求返回的數(shù)據(jù)僅為2KB

 


改進(jìn)后的請(qǐng)求大小比較



從上面的數(shù)據(jù)來(lái)對(duì)比看,內(nèi)容直接壓縮了4倍左右。返回的數(shù)據(jù)少,當(dāng)然加載也就快了。  

 

【打印正文】 發(fā)布時(shí)間:2010-01-19 09:57:51 瀏覽次數(shù): 作者:動(dòng)易網(wǎng)絡(luò) 來(lái)源:本站原創(chuàng)
×

用戶登錄