国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

高性能內(nèi)容發(fā)布系統(tǒng)的設(shè)計要點

2015-03-19 03:00:37
新媒體研究 2015年15期
關(guān)鍵詞:高性能靜態(tài)頁面

張 浩

河南人民廣播電臺,河南鄭州 450003

內(nèi)容發(fā)布系統(tǒng)是比較常見的網(wǎng)站管理類系統(tǒng),具備一定規(guī)模的網(wǎng)站后臺都存在對應(yīng)的內(nèi)容發(fā)布系統(tǒng),但有的內(nèi)容發(fā)布系統(tǒng)管理的站點能支持每日百萬級別的訪問量,有的卻只能支持到幾萬用戶的訪問,如此懸殊的差別正是后臺發(fā)布系統(tǒng)不同的設(shè)計思路所造成的,本文討論的重點正是如何構(gòu)建高性能高負(fù)載的后臺內(nèi)容發(fā)布系統(tǒng)。高性能主要體現(xiàn)在響應(yīng)時間較短、并發(fā)數(shù)較大、吞吐容量較大三個指標(biāo),為了說明如何接近指標(biāo),本文將從數(shù)據(jù)庫設(shè)計、應(yīng)用內(nèi)數(shù)據(jù)緩存、前端設(shè)計和模版、內(nèi)容發(fā)布、內(nèi)容分發(fā)網(wǎng)絡(luò)這五個層面逐一討論。

內(nèi)容發(fā)布系統(tǒng)的功能大都具備人員權(quán)限管理、欄目管理、文檔管理、模版管理等功能,功能豐富的發(fā)布系統(tǒng)還包含用戶管理、留言評論管理、瀏覽量統(tǒng)計等功能。但能把每個功能都做的比較深入的系統(tǒng)卻屈指可數(shù),本文主要圍繞欄目、文檔、模版這三個功能來著重說明如何做到高性能。

在技術(shù)選型上,考慮到編譯型JAVA語言具備天生的高性能和穩(wěn)定性,本文采用JavaEE體系構(gòu)建系統(tǒng)。系統(tǒng)以Mac OS系統(tǒng)作為開發(fā)平臺,用開源MySQL實現(xiàn)數(shù)據(jù)存儲,以Freemarker做為模版引擎。

此課題來源于某單位門戶網(wǎng)站,在發(fā)布系統(tǒng)的支撐下,網(wǎng)站頁面瀏覽量日均13萬至20萬之間,100多位新聞編輯人員同時操作,日均發(fā)稿量上千篇,能做到操作流暢,任務(wù)不排隊,響應(yīng)迅速。

1 數(shù)據(jù)庫設(shè)計

采用關(guān)系型數(shù)據(jù)庫MySQL作為后臺數(shù)據(jù)存儲,在設(shè)計數(shù)據(jù)實體表時,遵從數(shù)據(jù)庫設(shè)計范式的基礎(chǔ)上,功能上的滿足系統(tǒng)需求是第一要素,響應(yīng)迅速便是第二要素,這在大型系統(tǒng)中非常重要,下面說明如何滿足第二要素。

1.1 主從數(shù)據(jù)庫實現(xiàn)讀寫分離

部署主從數(shù)據(jù)庫的含義是至少采用兩臺數(shù)據(jù)庫(Master-Slave),分別負(fù)責(zé)寫和讀,主數(shù)據(jù)庫在內(nèi)容變化后能同步到從數(shù)據(jù)庫上,且采用異步復(fù)制的方法,提升系統(tǒng)的吞吐量。

1.2 配置數(shù)據(jù)庫查詢緩存

開啟并配置了查詢緩存后,數(shù)據(jù)庫執(zhí)行SQL查詢會把SQL和對應(yīng)的結(jié)果存在數(shù)據(jù)庫緩存里,如果數(shù)據(jù)不做改動,在下次執(zhí)行查詢SQL時,會直接取出緩存里對應(yīng)的數(shù)據(jù),而跳過SQL解析和查詢階段。結(jié)合讀寫分離,在只負(fù)責(zé)讀的Slave端配置查詢緩存能提高數(shù)據(jù)響應(yīng)時間。

以內(nèi)容發(fā)布系統(tǒng)的文檔為例,文檔的標(biāo)題內(nèi)容等具有相對的穩(wěn)定性,而文檔發(fā)布之后每一次用戶訪問其訪問量數(shù)字就要增加,所以訪問量這個數(shù)字相對變化,在設(shè)計時我們需把相對穩(wěn)定的字段和相對變化的字段分別儲存到不同的表。

1.3 建立字段索引提升查詢速度

數(shù)據(jù)被寫進(jìn)數(shù)據(jù)庫時,由于每一行記錄之間并沒有特定的排列順序,所以行與行的順序就是隨機(jī)無序的,在查詢沒有索引的數(shù)據(jù)表時,往往會對數(shù)據(jù)表做全掃描以篩選出目標(biāo)數(shù)據(jù)。如果針對查詢字段做了索引,就類似對字典做了排序目錄,就能快速的定位到數(shù)據(jù)。在內(nèi)容發(fā)布系統(tǒng)中,分析哪些字段經(jīng)常被用作為查詢條件,有針對性的建立索引能提升查詢速度。

1.4 合理利用字段類型和長度

字段類型盡可能反映真實的數(shù)據(jù)含義,滿足功能外字段應(yīng)該盡可能的短。比如能用int字段的就不要用bigint,比如發(fā)布系統(tǒng)中的文檔表,category代表文檔類型,可選的值有:0圖文、1圖集、2拼條、3引用、4URL、5投票、6調(diào)查、7單頁,他們的長度不超過兩位,在定義這個字段時就選取了TINYINT類型并設(shè)置其長度為1。

2 應(yīng)用內(nèi)數(shù)據(jù)緩存

對于讀取頻繁和修改頻繁的數(shù)據(jù),在應(yīng)用程序內(nèi)部為其建立緩存能有效緩解IO的開銷。

2.1 使用數(shù)據(jù)緩存框架

遵從不重復(fù)發(fā)明輪子的現(xiàn)代軟件開發(fā)哲學(xué),應(yīng)考量優(yōu)秀的開源實現(xiàn),從中選取適合項目的緩存框架。

發(fā)布系統(tǒng)的欄目數(shù)據(jù)、人員和權(quán)限數(shù)據(jù)是在每個功能模塊都會被頻繁用到的數(shù)據(jù),所以我們在應(yīng)用程序內(nèi)部為其建立了緩存,甚至部分業(yè)務(wù)邏輯的計算結(jié)果也建立了緩存,本案例采用EHCache。

2.2 節(jié)省對象聲明的開銷

JAVA語言里,聲明對象會為其分配內(nèi)存地址,會調(diào)用本身以及父類的構(gòu)造函數(shù),頻繁和數(shù)量巨大的創(chuàng)建對象會引發(fā)垃圾回收機(jī)制,對系統(tǒng)帶來性能問題。在開發(fā)設(shè)計中應(yīng)考慮使用如下技術(shù)節(jié)省對象的開銷。

1)使用單例模式,使得整個系統(tǒng)中此對象只有一個。

2)合理聲明集合容量,在聲明List、Map等對象的時候,根據(jù)實際存放數(shù)據(jù)量對其集合容量作出限制,做到避免過度申請和頻繁擴(kuò)容。

3)使用靜態(tài)類變量,保障數(shù)據(jù)全局唯一。

4)謹(jǐn)慎對待循環(huán)語句的內(nèi)容,避免在循環(huán)語句里創(chuàng)建字符串、進(jìn)行自動拆箱封箱等操作。

3 前端設(shè)計

WEB前端的響應(yīng)時間是影響用戶體驗非常重要的因素,即便后臺做的很棒,瀏覽器渲染內(nèi)容即頁面加載時間過長也不能算上高性能。頁面加載整個過程經(jīng)過DNS解析、TCP鏈接、HTTP重定向、HTML內(nèi)容加載、瀏覽器渲染逐步完成,其中每個步驟都會拖慢整個頁面都響應(yīng)時間。

在此只討論提高頁面渲染性能,包括以下方面。

3.1 減少重繪

在HTML頁面完成展現(xiàn)之后,動態(tài)改變頁面元素或調(diào)整CSS樣式都會引起瀏覽器重繪,盡量對小節(jié)點改動,對樣式有多重變動盡量合并到一起修改。

3.2 頁面緩存

通常不設(shè)置緩存的情況下,每次刷新頁面都會重新讀取服務(wù)器的文件,而如果設(shè)置緩存之后,所有文件都可以從本地取得,就加速了訪問效率。

3.3 壓縮合并文件

所有涉及到請求數(shù)據(jù)的文件盡量做壓縮,比如Javascript文件、css文件及圖片文件,特別是圖片文件,如果沒有高清晰要求,完全可以壓縮后再使用。數(shù)量少體積大的文件要比數(shù)量多體積小的文件加載速度快,所以有時候可以考慮將多個js文件、多個css文件合并在一起。

3.4 圖像合并實現(xiàn)CSS Sprites

圖像合并其實就是把網(wǎng)頁中一些背景圖片整合到一張圖片文件中,再利用CSS的“backgroundimage”,“background- repeat”,“backgroundposition”的組合進(jìn)行背景定位,backgroundposition可以用數(shù)字能精確的定位出背景圖片的位置。

3.5 多域名請求

一般來說,瀏覽器對于相同域名的圖片,最多用2-4個線程并行下載(不同瀏覽器的并發(fā)下載數(shù)是不同的)。而相同域名的其他圖片,則要等到其他圖片下載完后才會開始下載。

3.6 使用圖像的BASE64編碼

4 模版和靜態(tài)頁面發(fā)布

大多數(shù)內(nèi)容發(fā)布系統(tǒng)都具備靜態(tài)頁面的生成能力,將內(nèi)容生成為靜態(tài)頁面能有效緩解數(shù)據(jù)庫的壓力,一定程度上應(yīng)對訪問量并發(fā)量只需要提高帶寬和提高磁盤的IO速度,是以內(nèi)容為主導(dǎo)型的網(wǎng)站通用的做法。

靜態(tài)網(wǎng)頁化還可以提高網(wǎng)站穩(wěn)定,從安全角度講,靜態(tài)網(wǎng)頁不宜遭到黑客攻擊,靜態(tài)頁面沒有攻入點,減少黑客進(jìn)行攻擊的可能。從網(wǎng)站穩(wěn)定性來講,如果程序、數(shù)據(jù)庫出了問題,會直接影響網(wǎng)站的訪問,而靜態(tài)網(wǎng)頁就避免了如此情況,不會因為程序等,而損失網(wǎng)站數(shù)據(jù),影響正常打開,損失用戶體驗,影響網(wǎng)站信任度。

服務(wù)器檢索出數(shù)據(jù),根據(jù)模版生成靜態(tài)頁面。模版的展示形式?jīng)Q定了靜態(tài)頁面的形式,同一個模版生成多個靜態(tài)頁面,頭部、底部、側(cè)邊欄等這些外觀都是一樣的,只是內(nèi)容不同。服務(wù)器生成靜態(tài)頁面的速度必須要快,否則就會任務(wù)排隊,影響編輯人員的發(fā)稿,提高生成靜態(tài)頁面的性能和模版有巨大關(guān)系。

1)使用高性能模版引擎。推薦FreeMarker做為生成靜態(tài)頁面的工具,F(xiàn)reeMarker使用純Java編寫,被設(shè)計用來生成HTML Web頁面,簡單易用性能優(yōu)異。

2)將通用部分的模版一次性生成。在批量生成頁面的時候,雖然模版不盡相同但總是能抽取出相同的部分,利用FreeMarker引入公共文件的功能把不同模版的公共部分引入,生成的時候只需要生成一次公共部分已達(dá)到快速生成的目的。

3)在需要分頁的列表頁減少生成靜態(tài)頁面的數(shù)量。對于內(nèi)容為主導(dǎo)的網(wǎng)站分類列表是不可缺少的,如果文稿數(shù)量巨大,會超過上千頁,在有新文稿發(fā)布后,稿件的列表順序一定會發(fā)生改變,如果每次新增稿件把所有的分頁列表頁都生成一遍是相當(dāng)耗時的。由于大量的點擊都集中在前幾頁,所以只把前幾頁生成為靜待頁面,把之后的分頁采用偽靜態(tài)讀取數(shù)據(jù)庫內(nèi)容會比較提高效率。

5 采用內(nèi)容分發(fā)網(wǎng)絡(luò)為訪問提速

內(nèi)容分發(fā)網(wǎng)絡(luò)(CDN)是一種新型網(wǎng)絡(luò)構(gòu)建方式,它是為能在傳統(tǒng)的IP網(wǎng)發(fā)布寬帶豐富媒體而特別優(yōu)化的網(wǎng)絡(luò)覆蓋層;而從廣義的角度,CDN代表了一種基于質(zhì)量與秩序的網(wǎng)絡(luò)服務(wù)模式。

簡單地說,內(nèi)容分發(fā)網(wǎng)絡(luò)(CDN)通過用戶就近性和服務(wù)器負(fù)載的判斷,CDN確保內(nèi)容以一種極為高效的方式為用戶的請求提供服務(wù)。

負(fù)載均衡的準(zhǔn)確性和效率直接決定了整個CDN的效率和性能,和一般的鏡像有所區(qū)別,因為它比鏡像更智能,或者可以做這樣一個比喻:CDN=更智能的鏡像+緩存+流量導(dǎo)流。因而,CDN可以明顯提高Internet網(wǎng)絡(luò)中信息流動的效率。

6 結(jié)束語

提高性能,加快用戶操作的響應(yīng)時間不僅是發(fā)布系統(tǒng)遇到的問題,也會是任何一個BS結(jié)構(gòu)程序所面對的難題,影響系統(tǒng)性能的方面有很多,在系統(tǒng)長時間的運行中,一條低效的SQL語句或某行粗心大意的代碼都可能造成系統(tǒng)緩慢。本文只從設(shè)計方法宏觀上討論,沒有包含代碼質(zhì)量,同時也沒有涉及硬件網(wǎng)絡(luò)等方面。

追求性能沒有極致,在實現(xiàn)需求等基礎(chǔ)上,能做到運行流暢已實屬不易。響應(yīng)時間也并不是衡量系統(tǒng)好壞的唯一標(biāo)準(zhǔn)。開發(fā)設(shè)計之初若能根據(jù)需求特點合理規(guī)劃,有意識的避開嚴(yán)重影響性能的問題點,同時借鑒成熟的設(shè)計模式,促成一個性能優(yōu)異的內(nèi)容發(fā)布系統(tǒng)也不應(yīng)是困難的工作。

[1]霍斯特曼,科內(nèi)爾.Java核心技術(shù)[M].北京:機(jī)械工業(yè)出版社,2014.

[2]布洛克.Effective Java[M].北京:機(jī)械工業(yè)出版社,2009.

[3]施瓦茨(Schwartz,B.),扎伊采夫(Zaitsev,P.),特卡琴科(Tkachenko,V.).高性能MySQL[M].北京:電子工業(yè)出版社,2013.

[4]郭欣.構(gòu)建高性能Web站點[M].北京:電子工業(yè)出版社,2012.

[5]雷葆華.CDN技術(shù)詳解[M].北京:電子工業(yè)出版社,2014.

猜你喜歡
高性能靜態(tài)頁面
刷新生活的頁面
靜態(tài)隨機(jī)存儲器在軌自檢算法
一款高性能BGO探測器的研發(fā)
電子制作(2017年19期)2017-02-02 07:08:49
高性能砼在橋梁中的應(yīng)用
SATA推出全新高性能噴槍SATAjet 5000 B
機(jī)床靜態(tài)及動態(tài)分析
具7μA靜態(tài)電流的2A、70V SEPIC/升壓型DC/DC轉(zhuǎn)換器
高性能可變進(jìn)氣岐管降低二氧化碳排放
汽車零部件(2014年8期)2014-12-28 02:03:03
50t轉(zhuǎn)爐靜態(tài)控制模型開發(fā)及生產(chǎn)實踐
上海金屬(2013年6期)2013-12-20 07:57:59
同一Word文檔 縱橫頁面并存
嘉祥县| 沅陵县| 雷波县| 泸西县| 安乡县| 景德镇市| 德化县| 左权县| 澄迈县| 曲阳县| 彝良县| 扬中市| 曲靖市| 通河县| 和龙市| 眉山市| 文山县| 前郭尔| 吉林省| 平顶山市| 郧西县| 浦东新区| 泰州市| 宝丰县| 武义县| 祁门县| 永昌县| 宜都市| 中宁县| 恩平市| 阳原县| 新邵县| 夏河县| 平阴县| 佛坪县| 广丰县| 泸水县| 泽库县| 察隅县| 彭山县| 石门县|