• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

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

      張 浩

      河南人民廣播電臺(tái),河南鄭州 450003

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

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

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

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

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

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

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

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

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

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

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

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

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

      1.4 合理利用字段類(lèi)型和長(zhǎng)度

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

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

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

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

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

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

      2.2 節(jié)省對(duì)象聲明的開(kāi)銷(xiāo)

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

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

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

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

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

      3 前端設(shè)計(jì)

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

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

      3.1 減少重繪

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

      3.2 頁(yè)面緩存

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

      3.3 壓縮合并文件

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

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

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

      3.5 多域名請(qǐng)求

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

      3.6 使用圖像的BASE64編碼

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

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

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

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

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

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

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

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

      內(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ù)模式。

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

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

      6 結(jié)束語(yǔ)

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

      追求性能沒(méi)有極致,在實(shí)現(xiàn)需求等基礎(chǔ)上,能做到運(yùn)行流暢已實(shí)屬不易。響應(yīng)時(shí)間也并不是衡量系統(tǒng)好壞的唯一標(biāo)準(zhǔn)。開(kāi)發(fā)設(shè)計(jì)之初若能根據(jù)需求特點(diǎn)合理規(guī)劃,有意識(shí)的避開(kāi)嚴(yán)重影響性能的問(wèn)題點(diǎn),同時(shí)借鑒成熟的設(shè)計(jì)模式,促成一個(gè)性能優(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站點(diǎn)[M].北京:電子工業(yè)出版社,2012.

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

      猜你喜歡
      高性能靜態(tài)頁(yè)面
      大狗熊在睡覺(jué)
      刷新生活的頁(yè)面
      靜態(tài)隨機(jī)存儲(chǔ)器在軌自檢算法
      一款高性能BGO探測(cè)器的研發(fā)
      電子制作(2017年19期)2017-02-02 07:08:49
      高性能砼在橋梁中的應(yīng)用
      SATA推出全新高性能?chē)姌孲ATAjet 5000 B
      機(jī)床靜態(tài)及動(dòng)態(tài)分析
      具7μA靜態(tài)電流的2A、70V SEPIC/升壓型DC/DC轉(zhuǎn)換器
      高性能可變進(jìn)氣岐管降低二氧化碳排放
      50t轉(zhuǎn)爐靜態(tài)控制模型開(kāi)發(fā)及生產(chǎn)實(shí)踐
      上海金屬(2013年6期)2013-12-20 07:57:59
      普兰县| 桐梓县| 济源市| 洮南市| 东光县| 遂溪县| 萝北县| 昆明市| 苗栗市| 宁明县| 米泉市| 会泽县| 六枝特区| 潍坊市| 榆树市| 平原县| 开阳县| 邯郸市| 泰安市| 侯马市| 开原市| 南汇区| 隆林| 庆云县| 长垣县| 仙桃市| 江达县| 杭州市| 响水县| 梧州市| 泉州市| 芜湖县| 科技| 十堰市| 铜梁县| 布拖县| 白水县| 安顺市| 施秉县| 金华市| 西林县|