本發(fā)明涉及計算機系統(tǒng)數(shù)據(jù)處理,具體是一種用于處理論壇高并發(fā)數(shù)據(jù)請求的系統(tǒng)和方法。
背景技術(shù):
論壇也被大家稱為BBS,是Internet上常見的用于信息服務(wù)的WEB系統(tǒng),它為用戶提供相互溝通的平臺,每個用戶都可發(fā)布信息或提出看法,是一種交互性強,內(nèi)容豐富而及時的Internet電子信息服務(wù)系統(tǒng),用戶在BBS站點上可以獲得各種信息服務(wù)、發(fā)布信息、進行討論、聊天等等。
在網(wǎng)絡(luò)發(fā)達的今天,各種論壇如同雨后春筍般出現(xiàn),并迅速的發(fā)展壯大。論壇幾乎涵蓋了人們生活的各個方面,幾乎每一個人都可以找到自己感興趣或者需要了解的專題性論壇,而各類網(wǎng)站,綜合性門戶網(wǎng)站或者功能性專題網(wǎng)站也都青睞于開設(shè)自己的論壇,以促進網(wǎng)友之間的交流,增加互動性和豐富網(wǎng)站的內(nèi)容。
現(xiàn)有一些普通中小網(wǎng)站的架構(gòu)是應(yīng)用服務(wù)器+數(shù)據(jù)庫服務(wù)器兩層結(jié)構(gòu),這種架構(gòu)應(yīng)對普通的用戶訪問不存在大問題,但是,論壇隨著時間的推移,每天不斷積累的數(shù)據(jù)量以及日益增長迅速的訪問量都會讓整個系統(tǒng)壓力倍增,尤其是當(dāng)某些新聞事件發(fā)生后,論壇的發(fā)帖和回帖數(shù)量會在短時間內(nèi)劇增,為應(yīng)對這種局面,可以通過增加應(yīng)用服務(wù)器這種橫向擴展的方式來滿足巨大的用戶訪問量。但是,增加應(yīng)用服務(wù)器并不能緩解數(shù)據(jù)量和訪問量增加造成的壓力瓶頸,最后壓力瓶頸都會壓在數(shù)據(jù)庫服務(wù)器層,同時也會反過來影響應(yīng)用服務(wù)器,然而,數(shù)據(jù)庫服務(wù)器是屬于稀缺的、難以方便擴展的資源,因此需要對論壇整體系統(tǒng)進行改造,提升系統(tǒng)的抗壓能力,減少對數(shù)據(jù)庫的訪問,讓系統(tǒng)的每一層水平擴展都變成極其簡單的事情。
技術(shù)實現(xiàn)要素:
為了克服現(xiàn)有技術(shù)的缺陷,本發(fā)明提供一種用于處理論壇高并發(fā)數(shù)據(jù)請求的系統(tǒng)和方法,通過改變傳統(tǒng)的網(wǎng)站架構(gòu),在應(yīng)用服務(wù)器前端增設(shè)一頁面緩存服務(wù)器,應(yīng)用服務(wù)器與存儲服務(wù)器之間增設(shè)緩存服務(wù)器,實現(xiàn)了分解數(shù)據(jù)庫服務(wù)器壓力,提高系統(tǒng)的抗壓性能,避免高并發(fā)訪問情況下數(shù)據(jù)庫堵塞,同時,對應(yīng)用服務(wù)器和數(shù)據(jù)庫服務(wù)器起到很好的保護作用。
本發(fā)明采用技術(shù)方案如下:
一種用于處理論壇高并發(fā)數(shù)據(jù)請求的系統(tǒng),包括數(shù)據(jù)庫服務(wù)器、數(shù)據(jù)緩存服務(wù)器、應(yīng)用服務(wù)器和頁面緩存服務(wù)器,
所述頁面緩存服務(wù)器,用于緩存應(yīng)用服務(wù)器發(fā)送的HTML頁面源碼,響應(yīng)客戶端訪問頁面的請求,從本地或應(yīng)用服務(wù)器獲取請求頁面的HTML頁面源碼;
所述應(yīng)用服務(wù)器包括數(shù)據(jù)讀取模塊和源碼構(gòu)造模塊,所述數(shù)據(jù)讀取模塊用于從數(shù)據(jù)緩存服務(wù)器或數(shù)據(jù)庫服務(wù)器中讀取頁面數(shù)據(jù),所述源碼構(gòu)造模塊用于將所述頁面數(shù)據(jù)構(gòu)造成HTML頁面源碼,并返回給頁面緩存服務(wù)器;
所述數(shù)據(jù)緩存服務(wù)器,用于存儲所述應(yīng)用服務(wù)器從數(shù)據(jù)庫服務(wù)器中讀取的頁面數(shù)據(jù);
所述數(shù)據(jù)庫服務(wù)器,用于存儲頁面數(shù)據(jù),響應(yīng)應(yīng)用服務(wù)器讀取頁面數(shù)據(jù)的請求。
進一步地,所述應(yīng)用服務(wù)器還包括數(shù)據(jù)寫入模塊,
所述數(shù)據(jù)寫入模塊,用于接收客戶端提交的新數(shù)據(jù),將所述新數(shù)據(jù)同步到數(shù)據(jù)庫服務(wù)器,從而對數(shù)據(jù)庫服務(wù)器中相應(yīng)的頁面數(shù)據(jù)進行更新。
進一步地,所述應(yīng)用服務(wù)器還包括第一主動更新模塊,
所述第一主動更新模塊用于主動從數(shù)據(jù)庫服務(wù)器中讀取更新后的頁面數(shù)據(jù),將所述更新后的頁面數(shù)據(jù)發(fā)送給數(shù)據(jù)緩存服務(wù)器。
進一步地,所述應(yīng)用服務(wù)器還包括第二主動更新模塊,
所述第二主動更新模塊用于主動從數(shù)據(jù)庫服務(wù)器中讀取更新后的頁面數(shù)據(jù),將所述更新后的頁面數(shù)據(jù)構(gòu)造成HTML頁面源碼,并發(fā)送給頁面緩存服務(wù)器。
優(yōu)選地,所述頁面緩存服務(wù)器中數(shù)據(jù)的緩存期限為1-3個月,所述數(shù)據(jù)緩存服務(wù)器中緩存數(shù)據(jù)的緩存期限為永久緩存。
相應(yīng)地,本發(fā)明還提供了一種處理論壇高并發(fā)數(shù)據(jù)請求的方法,所述方法利用上述的用于處理論壇高并發(fā)數(shù)據(jù)請求的系統(tǒng)來實現(xiàn),包括讀取數(shù)據(jù)的方法,所述讀取數(shù)據(jù)的方法包括如下步驟:
S101、響應(yīng)客戶端訪問頁面的請求,判斷頁面緩存服務(wù)器中是否緩存有該請求頁面的HTML頁面源碼,若否,則向應(yīng)用服務(wù)器發(fā)送頁面數(shù)據(jù)請求;
S102、應(yīng)用服務(wù)器根據(jù)所述頁面數(shù)據(jù)請求,查詢數(shù)據(jù)緩存服務(wù)器中是否緩存有與所述頁面數(shù)據(jù)請求對應(yīng)的頁面數(shù)據(jù),若否,則從數(shù)據(jù)庫服務(wù)器中讀取與所述頁面數(shù)據(jù)請求對應(yīng)的頁面數(shù)據(jù),
S103、應(yīng)用服務(wù)器將所述頁面數(shù)據(jù)構(gòu)造成HTML頁面源碼,將所述頁面數(shù)據(jù)發(fā)送給數(shù)據(jù)緩存服務(wù)器,將構(gòu)造的HTML頁面源碼反饋給頁面緩存服務(wù)器;
S104、數(shù)據(jù)緩存服務(wù)器存儲所述頁面數(shù)據(jù),頁面緩存服務(wù)器緩存所述HTML頁面源碼,并將所述HTML頁面源碼返回給客戶端。
所述步驟S101中,若判斷出頁面緩存服務(wù)器中已緩存該請求頁面的HTML頁面源碼,則將頁面緩存服務(wù)器中緩存的所述HTML頁面源碼返回給客戶端。
所述步驟S102中,若查詢到數(shù)據(jù)緩存服務(wù)器中緩存有與所述頁面數(shù)據(jù)請求對應(yīng)的頁面數(shù)據(jù),則應(yīng)用服務(wù)器從所述數(shù)據(jù)緩存服務(wù)器中讀取所述頁面數(shù)據(jù)。
進一步地,所述方法還包括更新數(shù)據(jù)的方法,所述更新數(shù)據(jù)的方法包括:
S201、應(yīng)用服務(wù)器接收客戶端提交的新數(shù)據(jù),將所述新數(shù)據(jù)同步到數(shù)據(jù)庫服務(wù)器,從而對數(shù)據(jù)庫服務(wù)器中相應(yīng)的頁面數(shù)據(jù)進行更新;
S202、應(yīng)用服務(wù)器主動從數(shù)據(jù)庫服務(wù)器中讀取更新后的頁面數(shù)據(jù),將所述更新后的頁面數(shù)據(jù)構(gòu)造成HTML頁面源碼,并將所述HTML頁面源碼存入頁面緩存服務(wù)器,將更新后的頁面數(shù)據(jù)存入數(shù)據(jù)緩存服務(wù)器。
所述步驟S202具體包括:
應(yīng)用服務(wù)器主動從數(shù)據(jù)庫服務(wù)器中讀取更新后的頁面數(shù)據(jù),將所述更新后的頁面數(shù)據(jù)構(gòu)造成HTML頁面源碼,并將所述HTML頁面源碼發(fā)送給頁面緩存服務(wù)器,將更新后的頁面數(shù)據(jù)發(fā)送給數(shù)據(jù)緩存服務(wù)器,所述頁面緩存服務(wù)器存儲所述HTML頁面源碼,所述數(shù)據(jù)緩存服務(wù)器存儲所述更新后的頁面數(shù)據(jù)。
本發(fā)明的有益效果是:
現(xiàn)有網(wǎng)站架構(gòu)普遍為應(yīng)用服務(wù)器+數(shù)據(jù)庫服務(wù)器的兩層結(jié)構(gòu),其在應(yīng)對論壇高并發(fā)請求情況時容易出現(xiàn)響應(yīng)速率低、數(shù)據(jù)庫堵塞等缺陷;針對這一情況,本發(fā)明提出在應(yīng)用服務(wù)器前端增加頁面緩存服務(wù)器,在應(yīng)用服務(wù)器和數(shù)據(jù)庫服務(wù)器服務(wù)器之間增加數(shù)據(jù)緩存服務(wù)器的架構(gòu);利用頁面緩存服務(wù)器緩存HTML頁面源碼,從而減少應(yīng)用服務(wù)器邏輯運算工作,對應(yīng)用服務(wù)器起到良好的保護作用,并能提高緩存服務(wù)器的命中率;利用數(shù)據(jù)緩存服務(wù)器緩存頁面數(shù)據(jù),應(yīng)用服務(wù)器首先從數(shù)據(jù)緩存服務(wù)器中查找數(shù)據(jù),在未找到所需數(shù)據(jù)情況下才會直接從數(shù)據(jù)庫服務(wù)器中查找數(shù)據(jù),顯著降低了數(shù)據(jù)庫服務(wù)器被訪頻率,對應(yīng)用服務(wù)器和數(shù)據(jù)庫服務(wù)器起到較好的保護作用,提高了整個系統(tǒng)的抗壓性能和穩(wěn)定性。
在數(shù)據(jù)更新方面,本發(fā)明采用主動更新的方式,即應(yīng)用服務(wù)器主動從數(shù)據(jù)庫服務(wù)器中讀取更新后的頁面數(shù)據(jù),將更新后的頁面數(shù)據(jù)發(fā)送給數(shù)據(jù)緩存服務(wù)器存儲,并構(gòu)造HTML頁面源碼,將其發(fā)送給頁面緩存服務(wù)器存儲,主動更新的速率非???,使得頁面緩存服務(wù)器和數(shù)據(jù)緩存服務(wù)器中存儲內(nèi)容更全面,提高了系統(tǒng)應(yīng)對高并發(fā)請求的抗壓能力,對數(shù)據(jù)庫服務(wù)器起到很好的保護作用。
本發(fā)明的頁面緩存服務(wù)器和數(shù)據(jù)緩存服務(wù)器都具有較高的水平擴展性,實用性強。
附圖說明
為了更清楚地說明本發(fā)明的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其它附圖。
圖1是本發(fā)明系統(tǒng)的結(jié)構(gòu)框圖;
圖2是本發(fā)明系統(tǒng)數(shù)據(jù)更新功能的結(jié)構(gòu)框圖;
圖3是讀取數(shù)據(jù)的方法流程示意圖;
圖4是更新數(shù)據(jù)的方法流程示意圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動的前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
實施例一:
如圖1-3所示,本發(fā)明提供一種用于處理論壇高并發(fā)數(shù)據(jù)請求的系統(tǒng),包括數(shù)據(jù)庫服務(wù)器、數(shù)據(jù)緩存服務(wù)器、應(yīng)用服務(wù)器和頁面緩存服務(wù)器。
所述頁面緩存服務(wù)器用于緩存應(yīng)用服務(wù)器發(fā)送的HTML頁面源碼,響應(yīng)客戶端訪問頁面的請求,從本地或應(yīng)用服務(wù)器獲取請求頁面的HTML頁面源碼。
參見圖3,所述應(yīng)用服務(wù)器包括數(shù)據(jù)讀取模塊、源碼構(gòu)造模塊、數(shù)據(jù)寫入模塊、第一主動更新模塊和第二主動更新模塊。其中,所述數(shù)據(jù)讀取模塊用于從數(shù)據(jù)緩存服務(wù)器或數(shù)據(jù)庫服務(wù)器中讀取頁面數(shù)據(jù);所述源碼構(gòu)造模塊用于將所述頁面數(shù)據(jù)構(gòu)造成HTML頁面源碼,并返回給頁面緩存服務(wù)器;所述數(shù)據(jù)寫入模塊用于接收客戶端提交的新數(shù)據(jù),將所述新數(shù)據(jù)同步到數(shù)據(jù)庫服務(wù)器,從而對數(shù)據(jù)庫服務(wù)器中相應(yīng)的頁面數(shù)據(jù)進行更新;所述第一主動更新模塊用于主動從數(shù)據(jù)庫服務(wù)器中讀取更新后的頁面數(shù)據(jù),將所述更新后的頁面數(shù)據(jù)發(fā)送給數(shù)據(jù)緩存服務(wù)器;所述第二主動更新模塊用于主動從數(shù)據(jù)庫服務(wù)器中讀取更新后的頁面數(shù)據(jù),將所述更新后的頁面數(shù)據(jù)構(gòu)造成HTML頁面源碼,并發(fā)送給頁面緩存服務(wù)器。
所述數(shù)據(jù)緩存服務(wù)器,用于存儲所述應(yīng)用服務(wù)器從數(shù)據(jù)庫服務(wù)器中讀取的頁面數(shù)據(jù)。
所述數(shù)據(jù)庫服務(wù)器,用于存儲頁面數(shù)據(jù),響應(yīng)應(yīng)用服務(wù)器讀取頁面數(shù)據(jù)的請求。
本發(fā)明根據(jù)論壇這類產(chǎn)品的特點,在網(wǎng)站應(yīng)用服務(wù)器前端,搭設(shè)頁面緩存服務(wù)層。AST(Apache Traffic Server)是一款高性能的、模塊化的HTTP代理和緩存服務(wù)器,可以作為本發(fā)明的頁面緩存服務(wù)器。頁面緩存服務(wù)器中數(shù)據(jù)的緩存期限可適當(dāng)延長,較佳的為1~3個月。通過延長頁面緩存服務(wù)器中數(shù)據(jù)的緩存期限可對后端的應(yīng)用服務(wù)器起到較好的保護作用,同時也會大大提高緩存服務(wù)器的命中率,橫向擴展也很方便,只需動態(tài)加緩存服務(wù)器修改配置即可。
本發(fā)明把頁面里面的動態(tài)數(shù)據(jù)(如訪問數(shù)、回帖數(shù)、當(dāng)前用戶信息等)提取出來做成接口服務(wù),并通過AJAX(Asynchronous Javascript And XML,異步JavaScript和XML)技術(shù)把這些數(shù)據(jù)加載到論壇的帖子頁面中,由于這些數(shù)據(jù)都屬于小數(shù)據(jù)量,對應(yīng)用服務(wù)器不會構(gòu)成大的壓力,未來擴展僅需增加應(yīng)用服務(wù)器來支撐高并發(fā)連接數(shù)即可。
通過以上設(shè)置,頁面緩存服務(wù)器集群命中率可以做到85%以上。
現(xiàn)有技術(shù)中處理訪問請求的方法為:接收到訪問請求后,應(yīng)用服務(wù)器被動的到后端數(shù)據(jù)庫服務(wù)器中讀取相應(yīng)的數(shù)據(jù),然后將數(shù)據(jù)放到緩存服務(wù)器中。這種用法可適用于中小型網(wǎng)站,但遇到有高并發(fā)請求時,后端數(shù)據(jù)庫服務(wù)器的壓力很大,容易造成數(shù)據(jù)庫堵塞,進而又會反過來影響應(yīng)用服務(wù)器,造成請求排隊甚至嚴重時會造成雪崩效應(yīng)。針對此缺陷,本發(fā)明提出了在應(yīng)用服務(wù)器和數(shù)據(jù)庫服務(wù)器之間再增加數(shù)據(jù)緩存服務(wù)器,選用內(nèi)存型NOSQL(Not Only SQL)緩存服務(wù)器來搭建,常用的軟件選型有:Memcached、Redis、SSDB等。其處理方法為:用戶提交帖子內(nèi)容后,后端負責(zé)邏輯處理的應(yīng)用服務(wù)器主動去更新數(shù)據(jù)緩存服務(wù)器中的緩存內(nèi)容,由于更換內(nèi)容速度非???,可以在1-2毫秒內(nèi)完成,因此大大提升了抗壓性能,對后端的數(shù)據(jù)庫服務(wù)器進行很好的壓力分解。
數(shù)據(jù)緩存服務(wù)器集群同樣也是具有水平高擴展性,命中率最高也可以做到90%以上。
本發(fā)明經(jīng)過這兩層的緩存服務(wù)的部署保護,最終到達數(shù)據(jù)庫服務(wù)器端的訪問壓力可以減少至5%以下,同時整個論壇網(wǎng)站的抗壓能力得到較大提升,抵御DDOS(Distributed Denial of Service,分布式拒絕服務(wù))攻擊的能力也得到大幅提升。
實施例二:
本發(fā)明還提供了一種處理論壇高并發(fā)數(shù)據(jù)請求的方法,所述方法利用上述的用于處理論壇高并發(fā)數(shù)據(jù)請求的系統(tǒng)來實現(xiàn),包括讀取數(shù)據(jù)的方法和更新數(shù)據(jù)的方法,所述讀取數(shù)據(jù)的方法包括如下步驟:
S101、響應(yīng)客戶端訪問頁面的請求,判斷頁面緩存服務(wù)器中是否緩存有該請求頁面的HTML頁面源碼,若是,則將頁面緩存服務(wù)器中緩存的所述HTML頁面源碼返回給客戶端,若否,則向應(yīng)用服務(wù)器發(fā)送頁面數(shù)據(jù)請求;
S102、應(yīng)用服務(wù)器根據(jù)所述頁面數(shù)據(jù)請求,查詢數(shù)據(jù)緩存服務(wù)器中是否緩存有與所述頁面數(shù)據(jù)請求對應(yīng)的頁面數(shù)據(jù),若是,則從所述數(shù)據(jù)緩存服務(wù)器中讀取所述頁面數(shù)據(jù),若否,則從數(shù)據(jù)庫服務(wù)器中讀取與所述頁面數(shù)據(jù)請求對應(yīng)的頁面數(shù)據(jù),
S103、應(yīng)用服務(wù)器將所述頁面數(shù)據(jù)構(gòu)造成HTML頁面源碼,將所述頁面數(shù)據(jù)發(fā)送給數(shù)據(jù)緩存服務(wù)器,將構(gòu)造的HTML頁面源碼反饋給頁面緩存服務(wù)器;
S104、數(shù)據(jù)緩存服務(wù)器存儲所述頁面數(shù)據(jù),頁面緩存服務(wù)器緩存所述HTML頁面源碼,并將所述HTML頁面源碼返回給客戶端。
所述更新數(shù)據(jù)的方法包括:
S201、應(yīng)用服務(wù)器接收客戶端提交的新數(shù)據(jù),將所述新數(shù)據(jù)同步到數(shù)據(jù)庫服務(wù)器,從而對數(shù)據(jù)庫服務(wù)器中相應(yīng)的頁面數(shù)據(jù)進行更新;
S202、應(yīng)用服務(wù)器主動從數(shù)據(jù)庫服務(wù)器中讀取更新后的頁面數(shù)據(jù),將所述更新后的頁面數(shù)據(jù)構(gòu)造成HTML頁面源碼,并將所述HTML頁面源碼發(fā)送給頁面緩存服務(wù)器,將更新后的頁面數(shù)據(jù)發(fā)送給數(shù)據(jù)緩存服務(wù)器,所述頁面緩存服務(wù)器存儲所述HTML頁面源碼,所述數(shù)據(jù)緩存服務(wù)器存儲所述更新后的頁面數(shù)據(jù)。
以上所揭露的僅為本發(fā)明的較佳實施例而已,當(dāng)然不能以此來限定本發(fā)明的權(quán)利范圍,依據(jù)本發(fā)明權(quán)利要求所作的等同變化,仍屬本發(fā)明所涵蓋的范圍。