動態可緩存的內容管理系統(CMS)(轉)

摘要:內容管理系統(CMS)在各大商業站點和門戶站點中扮演著重要的角色,是內容有效組織和快速發布極為重要的基礎平臺。目前主流的內容發布系統都使用靜態頁面進行內容發布,在我們的實際使用過程中我們深切的感受到靜態內容發布存在著很多弊端,本文討論全搜索目前正在使用的基于動態可緩存內容發布系統的考慮和實現。

一、什么是內容管理系統?

內容發布系統也即CMS,英文全稱為:Content?management?system,用于對企業業務數據進行組織、管理和發布,這里的內容不僅僅指文字內容,還包括圖片、聲音、視頻、Flash等富媒體資源,CMS的應用極大的提高了站點的建設效率并降低了維護成本。目前市面上的CMS種類繁多,開源的內容管理系統主要有:

PHP:

國內PHPCMSVeryCMSDeDeCMSEmpireCMS,HBCMS

國外:MamboJoomla!XOOPSDrupal

更多見:http://www.php-open.com/9.htm

Java見http://www.open-open.com/39.htm

ASP主要考察使用過風訊,對其它ASPCMS感興趣的可以查看這篇文章

http://hi.baidu.com/liberty88/blog/item/56e147fbd8271a176c22eb0e.html

商業CMS主要有:方正翔宇CMS,北方網CMSTRS?WAS,其中方正翔宇CMS在媒體行業應用非常廣泛,TRS在政府部門應用非常廣泛,北方網CMS在一些媒體網站中也有些應用。

就目前的總體情況來看,開源類CMS和商業類CMS還存在很大的差距,商業CMS在工作流,權限控制,內容的編采發以及系統的性能,擴展和可維護性上已經非常成熟和完善;對比開源CMS,則在這些方面存在很大的差距。由于個人覺得國外的CMS不太符合國人的使用習慣和國情,所以對他們研究的比較少也不太清楚他們在國內的應用情況,就國內的CMS而言目前也還沒有看到較大規模應用的案例(如果有請告訴我),我透露幾個目前已知的商業CMS內容發布系統的應用情況關鍵性能指標,最大數據量千萬級,同時最高終端用戶數500,發布時間1-2秒,每日更新1-2萬篇內容,相關內容自動更新。總之,開源CMS要走的路還長。

二、什么是動態可緩存的內容管理系統?

動態可緩存的內容管理系統是指前臺頁面動態解析執行并且動態解析執行的頁面可被客戶端和代理服務器進行緩存從而達到和生成靜態頁面同樣的執行性能和效果的管理系統。

三、為什么使用動態可緩存的內容管理系統?

第一節面提供的內容發布系統包括商業類CMS基本都是以生成靜態頁面的方式進行內容發布,我們早期的系統也全部使用靜態靜態頁面進行內容發布,在我們的實際使用過程中,生成靜態頁面的方式給我們帶來了很多麻煩,主要有下面幾個問題:

1、在設計、開發上,使用靜態頁面進行發布,系統需要很多額外的設計和開發,以靜態頁面的方式進行發布,涉及到生成規則,更新規則,發布規則等方方面面的事務,特別是當系統對內容的發布和更新有苛刻的性能要求時,這些規則更是需要進行仔細的設計和權衡。使用靜態頁進行發布主要是考慮到系統的執行性能,我當然同意靜態頁的執行性能是很高的,但是多數系統卻遠遠大不到預想的訪問量而引入了高度的系統復雜,也并非是系統一開始就有巨大的訪問量,我也不認同動態執行頁面就無法承受大訪問量的說法,其實我看到的大多數CMS中都沒有對靜態頁的處理規則進行很好的設計,比如:經常是在后臺撤銷了內容發現原始html沒有刪除,內容依然可以訪問或者一篇內容更新時,相關引用的內容無法做到關聯更新;靜態發布方式并不是那樣容易的,相反我覺得動態發布更容易開發和維護。

2、在系統維護上,生成的靜態頁面會占用很大的磁盤空間,我們所有的靜態頁面加起來應該有100-200G了。這樣龐大的數據量備份,恢復都是很麻煩的,無形之中給系統的運維工作增加了很大的難度,但實際上CMS有個顯著的特點就是發布多,修改少,越早的數據越少被訪問,應該說這100200G的數據中有99%以上的數據是有效期過后很少或再也沒被訪問過的,所以磁盤幾乎是白白的被浪費了。

所以,在我們的實際使用過程中我們更傾向于動態內容執行+多重cache的方式,新的系統中我們是這樣做的,最后完成的系統非常簡單并在Squid的幫助下達到靜態頁面的執行性能

四、如何實現動態可緩存的內容管理系統?

(可緩存的內容管理系統用戶訪問流程)

實現過程:

1.?所有前臺頁面使用URL?rewrite重寫成.html進行訪問,方便搜索引擎收錄。

2.?WEB程序執行時,向Squid服務器發送Expires頭,用于控制squid服務器的緩存時間。Expires用戶設置Squid服務器和客戶端的緩存時間。如:

PHP
php代碼

header("Expires:" . gmdate("D, d M Y H:i:s", time() + 120). "GMT"); //緩存120秒 

Java

Java代碼

?
java.text.SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
java.util.Calendar cal = Calendar.getInstance(new SimpleTimeZone(0, "GMT"));
format.setCalendar(cal); 
java.util.Date expires = format.parse(format.format(new Date(System.currentTimeMillis() + 120 * 1000)));
response.setHeader('Expires: ' + expires); 
?

?3.?配置Squid服務器指向源服務器,并配置ignore-reloa來忽略no-cache和reload請求以提升Squid的命中率。

4.?將最新最熱的數據緩存到Memcached服務器,減少數據庫的查詢。

至此整個過程已經完成,早期系統的訪問量一般比較小,這時候可直接將WEB服務器對外提供服務,由于CMS所管理內容發布快,修改少的特性,最新最熱的內容都將在Memcached中命中;當訪問量增加到一定程度的時候就可以在前端加上squid服務器,這樣就實現了和靜態頁面一樣的效果,同時也兼備了系統的可維護性和靈活性。我們的全搜索首頁,母嬰頻道,娛樂頻道使用這種方法實現獲得了很好的效果。

五、擴展

使用squid作為前端時,過期時間的設置就變得非常重要,如果設置得太長用戶就很容易看到過期內容,如果設置得太短又降低了命中率不能有效發揮前端緩存的優勢。那過期時間應該設置為多長比較合適呢?通常情況下首頁的更新頻道很高,內容頁更新的頻率較低,所以首頁的過期時間應該設置得短一些,內容頁可以設置的長一些。

新浪?????????

新浪首頁60秒過期,內容頁120秒過期

搜狐??

搜狐首頁70秒過期,內容頁120秒過期

163

163首頁80秒過期,內容頁120秒過期

經過測試成都全搜索的系統里首頁設置60秒過期,內容頁設置120秒過期,這樣的設置經過長時間的運行沒有收到任何編輯和用戶的不良使用反饋,這樣的設置使得每隔60秒鐘首頁去原始服務器執行一次;每隔120秒對內容頁去原始服務器執行一次。由于后端使用memcached作為緩存,即使是突發流量也可以輕松自如的應對。

學習資料:

http://delicious.com/wuyong/cache

?? - 點擊:15次

轉載于:https://www.cnblogs.com/codecrazy/archive/2010/10/15/1851933.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/378949.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/378949.shtml
英文地址,請注明出處:http://en.pswp.cn/news/378949.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

反轉字符串中的元音字符_C程序消除字符串中的所有元音

反轉字符串中的元音字符Given a string and we have to eliminate/ remove all vowels from the string using C program. 給定一個字符串,我們必須使用C程序從字符串中消除/刪除所有元音。 To eliminate/remove the vowels 消除/刪除元音 We will traverse (reac…

mysql 自動化 安裝_mysql自動化安裝

MySQL安裝一般使用RPM或者源碼安裝的方式。RPM安裝的優點是快速,方便.缺點是不能自定義安裝目錄.如果需要調整數據文件和日志文件的存放位置,還需要進行一些手動調整。源碼安裝的優點是可以自定義安裝目錄,缺點是編譯時間長,過程復雜其實還有一種方式,定制RPM包.它相當于用源碼…

hls協議分析

目錄1、簡介1.1、 綜述1.2 、HLS 協議編碼格式要求1.3 、HLS 協議優勢1.4 、HLS 協議劣勢1.5 、框架圖2、m3u8文件2.1 、單碼率適配流m3u8文件2.2 、多碼率適配流m3u8文件2.3 、Playlist file2.4 、Tags3、ts文件3.1 、ts文件結構3.2、ts文件結構部分截圖3.3、ts層(…

OpenGL 學習筆記(1)初始化窗體

前言 學習OpenGL只是興趣愛好,因為對圖形比較感興趣.將以OpenGl的紅寶書(7)和藍寶石書(4)為基礎,雖然手頭有紅寶書書,但感覺沒藍寶石書寫的好 準備工作 首先要下載一個工具庫(GLUT) http://www.opengl.org/resources/libraries/glut/ 只要把相應文件放在…

基于云平臺的家居綜合監測管理系統的設計與實現

時間過得飛快,轉眼間大四即將畢業,有點留戀和不舍。可能是越是到了離別的時候,越開始珍惜吧。大一開始,通過考核進入了學校院系實驗室開始學習,這期間自學了很多東西,很充實,也參加過很多比賽&a…

小白學數據分析-----留存率分析_I[次日留存率突然下降了50%?]

最近在做留存分析時,遇到了不少的情況,也經常會有人問我,為什么我的游戲突然次日留存率降了一半。如果留存率是單單作為一個簡單的指標的話,那對你價值還是蠻有限的,今天就和大家說說一個case,這是不久前解…

mysql映射mapper_SQL映射器Mapper接口(MyBatis)

SQL映射器Mapper接口MyBatis基于代理機制,可以讓我們無需再寫Dao的實現。直接把以前的dao接口定義成符合規則的Mapper。注意事項:1.接口必須以Mapper結尾,名字是DomainMapper2.mapper.xml文件要和Mapper接口建立關系,通過namespac…

計算機圖形學畫線_在計算機圖形學中直接使用線方程

計算機圖形學畫線計算機圖形學| 直接使用線方程 (Computer Graphics | Direct Use of Line Equation) The standard line equation, as we all know is used for drawing a line. It is given by: y mx c. 眾所周知,標準線方程式用于繪制線。 由下式給出&#xff…

Request.ServerVariables (server environment variable)

參數 服務器環境變量指定要檢索的服務器環境變量名。可以使用下面列出的值。 變量說明ALL_HTTP客戶端發送的所有 HTTP 標題文件。ALL_RAW檢索未處理表格中所有的標題。ALL_RAW 和 ALL_HTTP 不同,ALL_HTTP 在標題文件名前面放置 HTTP_ prefix,并且標題名稱…

c/c++ 編程試題

c/c 編程試題 帶*號為選作題&#xff0c;給出代碼截屏和編譯運算結果截屏 1.編程:選取M個最大的數 編程實現從N個無序數中選取M個最大的數(0 < M < N ) 思路&#xff1a;通過冒泡排序或者選擇排序對N個數進行遞減排序&#xff0c;然后輸入前M個數即可。這里我想到的是通…

Java String startsWith()方法與示例

字符串startsWith()方法 (String startsWith() Method) startsWith() method is a String class method, it is used to check whether a given string starts with specific character sequences or not. startsWith()方法是一個String類方法&#xff0c;用于檢查給定的字符串…

mysql inception web_基于Inception搭建MySQL SQL審核平臺Yearing

Inception1. Inceptionj簡介Inception是一款針對MySQL的SQL語句審核自動化運維工具。使用Inception&#xff0c;將會給DBA帶來更大的便利性&#xff0c;將DBA從繁冗的工作中解放出來&#xff0c;做更多的自動化工作&#xff0c;或者從架構方面研究如何更大程度地保證數據庫的高…

C---日常練習

若有以下定義語句&#xff1a;int a5;printf("%d\n",a);則輸出結果是&#xff08;&#xff09; 解析&#xff1a;a 即先使用再自增&#xff0c;a的初始值即為5&#xff0c;則先使用&#xff0c;輸出結果為5 舉個例子&#xff1a; int a5,b; ba;//等價于 ba;aa1 prin…

VS2010 運行庫設置

如下圖所示&#xff0c;當在一個EXE工程中調用lib或dll時&#xff0c;2個工程的下面選項一定要一致&#xff0c;否則會導致exe工程編譯不過。 原則&#xff1a; Debug下&#xff0c;默認是MTd&#xff1b; Release下&#xff0c;默認是MT。 轉載于:https://www.cnblogs.com/lgh…

算法中的Strassen矩陣乘法

Introduction 介紹 Strassen in 1969 which gives an overview that how we can find the multiplication of two 2*2 dimension matrix by the brute-force algorithm. But by using divide and conquer technique the overall complexity for multiplication two matrices i…

零拷貝、mmap、sendfile

目錄零拷貝mmapsendFile總結零拷貝 要了解零拷貝&#xff0c;首先得先了解一下傳統 IO 的執行流程&#xff0c;這里舉個例子&#xff0c;通過傳統的 IO 進行網絡傳輸來傳輸一個文件。 先上一張圖&#xff0c;這張圖就代表了傳統 IO 傳輸文件的流程。 讀取文件的時候&#xf…

網頁服務器和mysql服務器_實現Web服務器之間使用同一個MYSQL和相同的網頁配置文件的方法...

實現Web服務器之間使用同一個MYSQL和相同的網頁配置文件的方法發布時間&#xff1a;2020-04-15 16:42:41來源&#xff1a;億速云閱讀&#xff1a;133作者&#xff1a;三月欄目&#xff1a;數據庫億速云負載均衡(Cloud Load Balancer)是對多臺云服務器進行流量分發的服務。億速云…

傳128GB版iPad4售價為799/929美元

外媒9to5mac報道&#xff0c;蘋果將推出一款升級版iPad4&#xff0c;外觀和iPad 4相同&#xff0c;還是黑白兩色的&#xff0c;只加入了新的SKU。 據報道&#xff0c;這款升級版iPad4還有128GB版&#xff0c;隨著這條消息傳出&#xff0c;不久關于128GB版iPad4的售價信息也傳出…

(西工程-金花)小米路由器連接哆點設置WiFi保姆式教程

小米路由器連接電源,用根網線一端插入寢室的網口處,另一端插入小米路由器的WAN口手機或者電腦連接WiFi,我這里是通過手機瀏覽器打開192.168.31.1進入無線路由器管理頁面進行配置小米路由器&#xff0c;配置WiFi的一些基本參數,例如:WiFi名稱,密碼之類的信息 進入無線路由器管理…

基于MINA框架快速開發網絡應用程序

1&#xff0e;MINA框架簡介 Netty、Mina、Cindy都是不錯的NIO開源框架&#xff0c;后兩者都是在Netty的基礎上演化出來的。MINA(Multipurpose Infrastructure for Network Applications)是用于開發高性能和高可用性的網絡應用程序的基礎框架。通過使用MINA框架可以可以省下處理…