《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 其他 > 業(yè)界動(dòng)態(tài) > 集群環(huán)境下CMS的核心架構(gòu)設(shè)計(jì)

集群環(huán)境下CMS的核心架構(gòu)設(shè)計(jì)

2009-09-23
作者:祁 暉,,王 佳

  摘 要: 通過對(duì)非集群環(huán)境與集群環(huán)境的比較分析,,提出了一種適合集群環(huán)境的CMS最核心部分(發(fā)布、查看新聞,,上傳,、下載新聞附件)的架構(gòu)設(shè)計(jì),,它是對(duì)非集群環(huán)境架構(gòu)設(shè)計(jì)的改良。通過將文件存儲(chǔ)在數(shù)據(jù)庫服務(wù)器中,,而應(yīng)用服務(wù)器存儲(chǔ)文件的副本,,從而解決了非集群環(huán)境的架構(gòu)移植到集群環(huán)境時(shí)導(dǎo)致文件無法正常更新的問題。最后通過引入緩存機(jī)制,,使得這種架構(gòu)設(shè)計(jì)在性能方面有了較大的改進(jìn),。
  關(guān)鍵詞: 集群;內(nèi)容管理系統(tǒng),;新聞發(fā)布系統(tǒng),;架構(gòu);緩存

?

  CMS的應(yīng)用相當(dāng)廣泛,,大到門戶或商業(yè)網(wǎng)站,,小到個(gè)人網(wǎng)站。開源的CMS也非常多,,如OpenCMS,、Infoglue等。一個(gè)功能強(qiáng)大的CMS可以對(duì)內(nèi)容進(jìn)行分類管理,,定制內(nèi)容屬性,,定制界面,,增加、刪除,、修改,、查看內(nèi)容,增加,、刪除,、查看附件等。筆者曾經(jīng)開發(fā)過一個(gè)具備以上功能的CMS,,此系統(tǒng)所使用的技術(shù)與Infoglue十分相似,,都是基于J2EE技術(shù)構(gòu)建的。這個(gè)CMS先后被2個(gè)政府網(wǎng)站所使用,,運(yùn)行在單應(yīng)用服務(wù)器環(huán)境,,到目前為止一直運(yùn)行穩(wěn)定。系統(tǒng)的核心部分,,即內(nèi)容管理和附件管理部分還被集成到一個(gè)職稱評(píng)審系統(tǒng)中,,起初在測(cè)試環(huán)境(單應(yīng)用服務(wù)器環(huán)境)下運(yùn)行還很穩(wěn)定,但被部署到生產(chǎn)環(huán)境(集群環(huán)境)時(shí)就出現(xiàn)了很多問題,,因此需要對(duì)系統(tǒng)的架構(gòu)進(jìn)行重新設(shè)計(jì),。
1 非集群環(huán)境下CMS的核心架構(gòu)
  非集群環(huán)境系統(tǒng)結(jié)構(gòu)如圖1所示。這是1個(gè)非常典型的單服務(wù)器環(huán)境,,由1臺(tái)Web服務(wù)器,、1臺(tái)應(yīng)用服務(wù)器和1臺(tái)數(shù)據(jù)庫服務(wù)器組成。CMS主要被部署到應(yīng)用服務(wù)器上,。

?

  一條新聞通常由標(biāo)題,、作者、更新日期,、正文以及附件等部分組成,。一種設(shè)計(jì)是將所有這些信息都保存到數(shù)據(jù)庫中,當(dāng)用戶查看新聞時(shí),,需要從數(shù)據(jù)庫中讀取新聞的所有信息,。這種設(shè)計(jì)有2個(gè)非常大的缺點(diǎn):(1)對(duì)于新聞?wù)摹⒏郊却髷?shù)據(jù)量的信息(正文長度通常在幾KB到幾十KB之間,,附件更大),,在傳輸?shù)接脩魹g覽器的過程中必須從數(shù)據(jù)庫服務(wù)器傳輸?shù)綉?yīng)用服務(wù)器,然后再傳輸?shù)絎eb服務(wù)器,,最后傳輸?shù)綖g覽器,。其傳輸路徑長,經(jīng)過的節(jié)點(diǎn)多,,當(dāng)用戶訪問量大的時(shí)候,,響應(yīng)用戶的時(shí)間長,。(2)不利于建立全文檢索。由于正文或附件等是以字節(jié)流的形式存儲(chǔ)在數(shù)據(jù)庫服務(wù)器中,,而數(shù)據(jù)庫并不提供針對(duì)字節(jié)流數(shù)據(jù)的搜索功能,,因此,幾乎不可能為正文或附件建立全文檢索,。
  一種改進(jìn)的設(shè)計(jì)是將新聞?wù)暮透郊晕募问酱鎯?chǔ)在應(yīng)用服務(wù)器的磁盤中,,而新聞的其他信息則存儲(chǔ)在數(shù)據(jù)庫里。這樣,,用戶在查看新聞或者下載附件時(shí),,獲取正文,、附件這些信息就不需要進(jìn)行數(shù)據(jù)庫操作,,而直接從應(yīng)用服務(wù)器磁盤中讀取文件,從而減少了應(yīng)用服務(wù)器與數(shù)據(jù)庫服務(wù)器之間的通信量,,提高了系統(tǒng)的響應(yīng)速度,。此外,還可以對(duì)正文和附件文件建立全文檢索,。這種設(shè)計(jì)也有缺點(diǎn),,由于存儲(chǔ)在應(yīng)用服務(wù)器的可靠性不如存儲(chǔ)在數(shù)據(jù)庫服務(wù)器高,因此,,需要經(jīng)常備份應(yīng)用服務(wù)器中存儲(chǔ)的正文,、附件等文件。相比于對(duì)系統(tǒng)性能的提高和提供全文檢索功能來說,,代價(jià)還是比較小的,,因此筆者開發(fā)的CMS采用第二種設(shè)計(jì)。
2?系統(tǒng)部署在集群環(huán)境下時(shí)遇到的問題
  職稱評(píng)審系統(tǒng)在正式使用時(shí)需要部署在集群環(huán)境中,,集群環(huán)境的系統(tǒng)結(jié)構(gòu)如圖2所示,。

  集群環(huán)境通常有多臺(tái)Web服務(wù)器、多臺(tái)應(yīng)用服務(wù)器和多臺(tái)數(shù)據(jù)庫服務(wù)器,。集群環(huán)境能夠提供更高的性能,、更可靠的服務(wù)。CMS主要部署在應(yīng)用服務(wù)器集群上,,每臺(tái)應(yīng)用服務(wù)器上都有一個(gè)獨(dú)立的CMS,。假設(shè)如圖3所示情形,設(shè)A,、B兩臺(tái)應(yīng)用服務(wù)器的時(shí)間是同步的,。
????????

?

  a時(shí)刻:管理員請(qǐng)求添加新聞,應(yīng)用服務(wù)器集群中只會(huì)有一臺(tái)服務(wù)器提供服務(wù),,即應(yīng)用服務(wù)器A,。此時(shí),,應(yīng)用服務(wù)器A中就保存了新聞的正文文件、附件文件,,而數(shù)據(jù)庫服務(wù)器中保存了新聞的標(biāo)題,、作者和更新時(shí)間等。
  b時(shí)刻:用戶請(qǐng)求查看新添加的新聞,,請(qǐng)求被路由到應(yīng)用服務(wù)器B,,此時(shí),可以從數(shù)據(jù)庫中讀取新聞的標(biāo)題,、作者和更新時(shí)間等信息,,但是新聞的正文和附件卻無法獲取,因?yàn)檎暮透郊鎯?chǔ)在應(yīng)用服務(wù)器A上,,而集群環(huán)境下各臺(tái)應(yīng)用服務(wù)器是相對(duì)獨(dú)立的,,A服務(wù)器的改變并不會(huì)影響到B服務(wù)器。為此,,需重新設(shè)計(jì)系統(tǒng)的結(jié)構(gòu),,以適應(yīng)集群環(huán)境。
3?系統(tǒng)的重新設(shè)計(jì)
  系統(tǒng)在集群環(huán)境下遇到的問題主要是由于正文和附件只保存在應(yīng)用服務(wù)器上,,而各個(gè)應(yīng)用服務(wù)器之間又是互相獨(dú)立的,,不能得到同步更新。為解決這個(gè)問題,,決定將正文和附件保存到應(yīng)用服務(wù)器上的同時(shí),,保存到數(shù)據(jù)庫服務(wù)器上,在數(shù)據(jù)庫中還必須存儲(chǔ)應(yīng)用服務(wù)器上正文和附件的文件更新時(shí)間,。當(dāng)用戶請(qǐng)求查看新聞?wù)幕蛳螺d附件時(shí),,系統(tǒng)先在應(yīng)用服務(wù)器上查找該文件,如果文件不存在,,則到數(shù)據(jù)庫服務(wù)器上查找,,并將文件從數(shù)據(jù)庫服務(wù)器導(dǎo)入到應(yīng)用服務(wù)器上,然后再將應(yīng)用服務(wù)器上的文件傳輸?shù)綖g覽器,;如果文件存在應(yīng)用服務(wù)器上,,此時(shí)是否可以直接將應(yīng)用服務(wù)器上的文件傳輸?shù)綖g覽器?這是一個(gè)需要進(jìn)一步討論的問題,。假設(shè)存在如圖4所示一種情況,,設(shè)A、B兩臺(tái)應(yīng)用服務(wù)器的時(shí)間是同步的,。

?

?

  a時(shí)刻:管理員請(qǐng)求添加正文,,此時(shí)正文文件被保存到應(yīng)用服務(wù)器A上,同時(shí)保存到數(shù)據(jù)庫服務(wù)器上,,數(shù)據(jù)庫中記錄的正文文件更新時(shí)間是a,。
  b時(shí)刻:用戶請(qǐng)求查看管理員在a時(shí)刻添加的正文,,b必定大于a。用戶被路由到應(yīng)用服務(wù)器B上,,由于B上并不存在正文文件,,于是系統(tǒng)到數(shù)據(jù)庫服務(wù)器上查找正文,并將正文從數(shù)據(jù)庫服務(wù)器傳輸?shù)綉?yīng)用服務(wù)器B上,,保存成正文文件,。此時(shí),應(yīng)用服務(wù)器B上就記錄了正文文件的更新時(shí)間b,。
  c時(shí)刻:管理員請(qǐng)求修改正文,,假設(shè)c>b。管理員被路由到應(yīng)用服務(wù)器A上,,此時(shí)應(yīng)用服務(wù)器A上修改了正文文件,,同時(shí)數(shù)據(jù)庫服務(wù)器上修改正文文件的更新時(shí)間為c。
  d時(shí)刻:用戶請(qǐng)求查看正文,,假設(shè)d>c,。用戶被路由到應(yīng)用服務(wù)器B上,此時(shí)B上已經(jīng)存在正文文件,。如果直接將這個(gè)正文文件傳輸給用戶,則用戶看到的是管理員在a時(shí)刻添加的正文,,而管理員在c時(shí)刻修改了正文,,因此用戶看到的并不是最新的正文。
  解決方案如下:如果系統(tǒng)能夠在應(yīng)用服務(wù)器上查找到正文文件,,則需要將正文文件的更新時(shí)間與數(shù)據(jù)庫中記錄的正文更新時(shí)間進(jìn)行比較,,如果前者大于等于后者,則證明應(yīng)用服務(wù)器中的正文文件是最新的,,可以直接傳輸給用戶,;否則,證明在應(yīng)用服務(wù)器載入正文文件之后管理員更新了正文,,應(yīng)用服務(wù)器中的正文文件不是最新的,,如上例中b

4?系統(tǒng)性能的改進(jìn)
  系統(tǒng)經(jīng)過重新設(shè)計(jì)之后,已經(jīng)可以在集群環(huán)境下正常地運(yùn)行,。但是,,當(dāng)用戶請(qǐng)求查看新聞?wù)幕蛘?qǐng)求下載附件時(shí),,假定系統(tǒng)能夠在應(yīng)用服務(wù)器上直接命中正文文件或附件文件(絕大多數(shù)情況下也正是如此),系統(tǒng)還需要比較文件在應(yīng)用服務(wù)器上的更新時(shí)間和數(shù)據(jù)庫服務(wù)器中記錄的文件更新時(shí)間,,這樣就需要一次數(shù)據(jù)庫查詢操作,。用戶每查看一次新聞?wù)幕蛘?qǐng)求下載附件就需要查詢一次數(shù)據(jù)庫,增加了數(shù)據(jù)庫的負(fù)擔(dān),。為了減少數(shù)據(jù)庫訪問次數(shù),,可以為系統(tǒng)添加緩存組件,用于緩存數(shù)據(jù)庫中的數(shù)據(jù),。對(duì)于CMS來說,,緩存中存儲(chǔ)的就是新聞對(duì)象和附件對(duì)象,前者包含標(biāo)題,、作者和正文更新時(shí)間等屬性,,后者包含文件名和文件更新時(shí)間等屬性。緩存組件被添加到系統(tǒng)后,,當(dāng)用戶請(qǐng)求查看新聞?wù)幕蛳螺d附件時(shí),,緩存組件的活動(dòng)如圖6所示。
????????


  當(dāng)需要比較文件在應(yīng)用服務(wù)器上的更新時(shí)間與數(shù)據(jù)庫中記錄的文件更新時(shí)間時(shí),,就向緩存組件請(qǐng)求新聞對(duì)象或附件對(duì)象,。圖6所示為請(qǐng)求新聞對(duì)象時(shí)緩存組件的活動(dòng),請(qǐng)求附件對(duì)象時(shí)緩存組件的活動(dòng)與此類似,。
  使用緩存容易產(chǎn)生臟數(shù)據(jù),。為了保證緩存中的對(duì)象能夠得到更新,可以設(shè)定緩存的過期時(shí)間,,例如5 min,。經(jīng)過這番改進(jìn),能夠有效地減少數(shù)據(jù)庫的訪問次數(shù),,減輕數(shù)據(jù)庫的負(fù)擔(dān),,提高系統(tǒng)的響應(yīng)速度。
  本文所介紹的CMS核心架構(gòu)設(shè)計(jì)可以用于構(gòu)建大型的門戶或商業(yè)網(wǎng)站,,能夠在集群環(huán)境下穩(wěn)定運(yùn)行,。當(dāng)用戶訪問量增加時(shí),并不會(huì)明顯增加數(shù)據(jù)庫服務(wù)器的負(fù)擔(dān),,系統(tǒng)的負(fù)載能力主要和應(yīng)用服務(wù)器集群中的服務(wù)器數(shù)量有關(guān),。由于系統(tǒng)的所有數(shù)據(jù)都存儲(chǔ)在數(shù)據(jù)庫服務(wù)器中,應(yīng)用服務(wù)器中的文件只不過是數(shù)據(jù)庫中數(shù)據(jù)的副本,,因此數(shù)據(jù)的可靠性和安全性都有了很大的提高,,同時(shí),還可以對(duì)應(yīng)用服務(wù)器中的文件建立全文檢索以提供更強(qiáng)大的搜索功能。系統(tǒng)穩(wěn)定運(yùn)行的一個(gè)前提是應(yīng)用服務(wù)器集群中的各個(gè)服務(wù)器的時(shí)間必須同步,,目前已經(jīng)有技術(shù)可以保證這一需求,。

參考文獻(xiàn)
[1]?ARLOW J, NEUSTADT I.UML 2 and the unified process[M].Addison-Wesley Professional, 2005.
[2]?孫衛(wèi)琴.精通Hibernate—Java對(duì)象持久化技術(shù)詳解[M].北京:電子工業(yè)出版社,2005.
[3]?吳少剛,,陳曉玲.J2EE應(yīng)用服務(wù)器集群性能研究[J].計(jì)算機(jī)工程與設(shè)計(jì),,2007,28(18):4410-4412.
[4]?叢林,,楊揚(yáng),,李曉東,等.基于企業(yè)服務(wù)總線的內(nèi)容管理系統(tǒng)的研究應(yīng)用[J].計(jì)算機(jī)應(yīng)用研究,2007(1):255-257.
[5]?夏純中.輕量級(jí)企業(yè)內(nèi)容管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),,2007,,28(17):4233-4236.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn),。轉(zhuǎn)載的所有的文章、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有,。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容,、版權(quán)和其它問題,,請(qǐng)及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失,。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com,。