2019-08-17
大(dà)型網站建設的(de)系統架構;
1、HTML靜态化(huà)
其實大(dà)家都知道,效率最高(gāo)、消耗最小的(de)就是純靜态化(huà)的(de)html頁面,所以我們盡可(kě)能使我們的(de)網站上的(de)頁面采用(yòng)靜态頁面來(lái)實現,這(zhè)個(gè)最簡單的(de)方法其實也(yě)是最有效的(de)方法。但是對(duì)于大(dà)量内容并且頻(pín)繁更新的(de)網站,我們無法全部手動去挨個(gè)實現,于是出現了(le)我們常見的(de)信息發布系統CMS,像我們常訪問的(de)各個(gè)門戶站點的(de)新聞頻(pín)道,甚至他(tā)們的(de)其他(tā)頻(pín)道,都是通(tōng)過信息發布系統來(lái)管理(lǐ)和(hé)實現的(de),信息發布系統可(kě)以實現最簡單的(de)信息錄入自動生成靜态頁面,還(hái)能具備頻(pín)道管理(lǐ)、權限管理(lǐ)、自動抓取等功能,對(duì)于一個(gè)大(dà)型網站來(lái)說,擁有一套高(gāo)效、可(kě)管理(lǐ)的(de)CMS是必不可(kě)少的(de)。
除了(le)門戶和(hé)信息發布類型的(de)網站,對(duì)于交互性要求很高(gāo)的(de)社區(qū)類型網站來(lái)說,盡可(kě)能的(de)靜态化(huà)也(yě)是提高(gāo)性能的(de)必要手段,将社區(qū)内的(de)帖子、文章(zhāng)進行實時(shí)的(de)靜态化(huà),有更新的(de)時(shí)候再重新靜态化(huà)也(yě)是大(dà)量使用(yòng)的(de)策略,像Mop的(de)大(dà)雜(zá)燴就是使用(yòng)了(le)這(zhè)樣的(de)策略,網易社區(qū)等也(yě)是如此。
同時(shí),html靜态化(huà)也(yě)是某些緩存策略使用(yòng)的(de)手段,對(duì)于系統中頻(pín)繁使用(yòng)數據庫查詢但是内容更新很小的(de)應用(yòng),可(kě)以考慮使用(yòng)html靜态化(huà)來(lái)實現,比如論壇中論壇的(de)公用(yòng)設置信息,這(zhè)些信息目前的(de)主流論壇都可(kě)以進行後台管理(lǐ)并且存儲再數據庫中,這(zhè)些信息其實大(dà)量被前台程序調用(yòng),但是更新頻(pín)率很小,可(kě)以考慮将這(zhè)部分(fēn)内容進行後台更新的(de)時(shí)候進行靜态化(huà),這(zhè)樣避免了(le)大(dà)量的(de)數據庫訪問請求。
2、圖片服務器分(fēn)離
大(dà)家知道,對(duì)于Web服務器來(lái)說,不管是Apache、IIS還(hái)是其他(tā)容器,圖片是最消耗資源的(de),于是我們有必要将圖片與頁面進行分(fēn)離,這(zhè)是基本上大(dà)型網站都會采用(yòng)的(de)策略,他(tā)們都有獨立的(de)圖片服務器,甚至很多(duō)台圖片服務器。這(zhè)樣的(de)架構可(kě)以降低提供頁面訪問請求的(de)服務器系統壓力,并且可(kě)以保證系統不會因爲圖片問題而崩潰,在應用(yòng)服務器和(hé)圖片服務器上,可(kě)以進行不同的(de)配置優化(huà),比如apache在配置ContentType的(de)時(shí)候可(kě)以盡量少支持,盡可(kě)能少的(de) LoadModule,保證更高(gāo)的(de)系統消耗和(hé)執行效率。
3、數據庫集群和(hé)庫表散列
大(dà)型網站都有複雜(zá)的(de)應用(yòng),這(zhè)些應用(yòng)必須使用(yòng)數據庫,那麽在面對(duì)大(dà)量訪問的(de)時(shí)候,數據庫的(de)瓶頸很快(kuài)就能顯現出來(lái),這(zhè)時(shí)一台數據庫将很快(kuài)無法滿足應用(yòng),于是我們需要使用(yòng)數據庫集群或者庫表散列。
在數據庫集群方面,很多(duō)數據庫都有自己的(de)解決方案,Oracle、Sybase等都有很好的(de)方案,常用(yòng)的(de)MySQL提供的(de)Master/Slave也(yě)是類似的(de)方案,您使用(yòng)了(le)什(shén)麽樣的(de)DB,就參考相應的(de)解決方案來(lái)實施即可(kě)。
上面提到的(de)數據庫集群由于在架構、成本、擴張性方面都會受到所采用(yòng)DB類型的(de)限制,于是我們需要從應用(yòng)程序的(de)角度來(lái)考慮改善系統架構,庫表散列是常用(yòng)并且最有效的(de)解決方案。我們在應用(yòng)程序中安裝業務和(hé)應用(yòng)或者功能模塊将數據庫進行分(fēn)離,不同的(de)模塊對(duì)應不同的(de)數據庫或者表,再按照(zhào)一定的(de)策略對(duì)某個(gè)頁面或者功能進行更小的(de)數據庫散列,比如用(yòng)戶表,按照(zhào)用(yòng)戶ID進行表散列,這(zhè)樣就能夠低成本的(de)提升系統的(de)性能并且有很好的(de)擴展性。sohu的(de)論壇就是采用(yòng)了(le)這(zhè)樣的(de)架構,将論壇的(de)用(yòng)戶、設置、帖子等信息進行數據庫分(fēn)離,然後對(duì)帖子、用(yòng)戶按照(zhào)闆塊和(hé)ID進行散列數據庫和(hé)表,最終可(kě)以在配置文件中進行簡單的(de)配置便能讓系統随時(shí)增加一台低成本的(de)數據庫進來(lái)補充系統性能。
4、緩存
緩存一詞搞技術的(de)都接觸過,很多(duō)地方用(yòng)到緩存。網站架構和(hé)網站開發中的(de)緩存也(yě)是非常重要。這(zhè)裏先講述最基本的(de)兩種緩存。高(gāo)級和(hé)分(fēn)布式的(de)緩存在後面講述。
架構方面的(de)緩存,對(duì)Apache比較熟悉的(de)人(rén)都能知道Apache提供了(le)自己的(de)緩存模塊,也(yě)可(kě)以使用(yòng)外加的(de)Squid模塊進行緩存,這(zhè)兩種方式均可(kě)以有效的(de)提高(gāo)Apache的(de)訪問響應能力。
網站程序開發方面的(de)緩存,Linux上提供的(de)Memory Cache是常用(yòng)的(de)緩存接口,可(kě)以在web開發中使用(yòng),比如用(yòng)Java開發的(de)時(shí)候就可(kě)以調用(yòng)MemoryCache對(duì)一些數據進行緩存和(hé)通(tōng)訊共享,一些大(dà)型社區(qū)使用(yòng)了(le)這(zhè)樣的(de)架構。另外,在使用(yòng)web語言開發的(de)時(shí)候,各種語言基本都有自己的(de)緩存模塊和(hé)方法,PHP有Pear的(de)Cache模塊,Java就更多(duō)了(le),.net不是很熟悉,相信也(yě)肯定有。
5、鏡像
鏡像是大(dà)型網站常采用(yòng)的(de)提高(gāo)性能和(hé)數據安全性的(de)方式,鏡像的(de)技術可(kě)以解決不同網絡接入商和(hé)地域帶來(lái)的(de)用(yòng)戶訪問速度差異,比如ChinaNet和(hé) EduNet之間的(de)差異就促使了(le)很多(duō)網站在教育網内搭建鏡像站點,數據進行定時(shí)更新或者實時(shí)更新。在鏡像的(de)細節技術方面,這(zhè)裏不闡述太深,有很多(duō)專業的(de)現成的(de)解決架構和(hé)産品可(kě)選。也(yě)有廉價的(de)通(tōng)過軟件實現的(de)思路,比如Linux上的(de)rsync等工具。
6、負載均衡
負載均衡将是大(dà)型網站解決高(gāo)負荷訪問和(hé)大(dà)量并發請求采用(yòng)的(de)終極解決辦法。
負載均衡技術發展了(le)多(duō)年,有很多(duō)專業的(de)服務提供商和(hé)産品可(kě)以選擇,我個(gè)人(rén)接觸過一些解決方法,其中有兩個(gè)架構可(kě)以給大(dà)家做(zuò)參考。
硬件四層交換
第四層交換使用(yòng)第三層和(hé)第四層信息包的(de)報頭信息,根據應用(yòng)區(qū)間識别業務流,将整個(gè)區(qū)間段的(de)業務流分(fēn)配到合适的(de)應用(yòng)服務器進行處理(lǐ)。 第四層交換功能就象是虛IP,指向物(wù)理(lǐ)服務器。它傳輸的(de)業務服從的(de)協議(yì)多(duō)種多(duō)樣,有HTTP、FTP、NFS、Telnet或其他(tā)協議(yì)。這(zhè)些業務在物(wù)理(lǐ)服務器基礎上,需要複雜(zá)的(de)載量平衡算(suàn)法。在IP世界,業務類型由終端TCP或UDP端口地址來(lái)決定,在第四層交換中的(de)應用(yòng)區(qū)間則由源端和(hé)終端IP地址、TCP和(hé)UDP端口共同決定。
在硬件四層交換産品領域,有一些知名的(de)産品可(kě)以選擇,比如Alteon、F5等,這(zhè)些産品很昂貴,但是物(wù)有所值,能夠提供非常優秀的(de)性能和(hé)很靈活的(de)管理(lǐ)能力。Yahoo中國當初接近2000台服務器使用(yòng)了(le)三四台Alteon就搞定了(le)。
軟件四層交換
大(dà)家知道了(le)硬件四層交換機的(de)原理(lǐ)後,基于OSI模型來(lái)實現的(de)軟件四層交換也(yě)就應運而生,這(zhè)樣的(de)解決方案實現的(de)原理(lǐ)一緻,不過性能稍差。但是滿足一定量的(de)壓力還(hái)是遊刃有餘的(de),有人(rén)說軟件實現方式其實更靈活,處理(lǐ)能力完全看你配置的(de)熟悉能力。
軟件四層交換我們可(kě)以使用(yòng)Linux上常用(yòng)的(de)LVS來(lái)解決,LVS就是Linux Virtual Server,他(tā)提供了(le)基于心跳線heartbeat的(de)實時(shí)災難應對(duì)解決方案,提高(gāo)系統的(de)魯棒性,同時(shí)可(kě)供了(le)靈活的(de)虛拟VIP配置和(hé)管理(lǐ)功能,可(kě)以同時(shí)滿足多(duō)種應用(yòng)需求,這(zhè)對(duì)于分(fēn)布式的(de)系統來(lái)說必不可(kě)少。
一個(gè)典型的(de)使用(yòng)負載均衡的(de)策略就是,在軟件或者硬件四層交換的(de)基礎上搭建squid集群,這(zhè)種思路在很多(duō)大(dà)型網站包括搜索引擎上被采用(yòng),這(zhè)樣的(de)架構低成本、高(gāo)性能還(hái)有很強的(de)擴張性,随時(shí)往架構裏面增減節點都非常容易。這(zhè)樣的(de)架構我準備空了(le)專門詳細整理(lǐ)一下(xià)和(hé)大(dà)家探討(tǎo)。
對(duì)于大(dà)型網站來(lái)說,前面提到的(de)每個(gè)方法可(kě)能都會被同時(shí)使用(yòng)到,我這(zhè)裏介紹得(de)比較淺顯,具體實現過程中很多(duō)細節還(hái)需要大(dà)家慢(màn)慢(màn)熟悉和(hé)體會,有時(shí)一個(gè)很小的(de)squid參數或者apache參數設置,對(duì)于系統性能的(de)影(yǐng)響就會很大(dà),希望大(dà)家一起討(tǎo)論,達到抛磚引玉之效。
大(dà)型網站建設問題;
1、多(duō)個(gè)服務器集群後session同步問題
可(kě)以通(tōng)過算(suàn)法計算(suàn)使同一個(gè)ip訪問同一台服務器
可(kě)以複制sessio各個(gè)服務器(不推薦開銷大(dà))
session存在第三方中間件如redis中
2、數據庫壓力過大(dà)
利用(yòng)數據庫主從數據複制的(de)特性進行數據庫讀寫分(fēn)離
添加nosql中間件存放熱(rè)點數據
用(yòng)搜索引擎存放部分(fēn)要讀的(de)數據
根據業務拆分(fēn)數據或者分(fēn)表需要考慮分(fēn)布式主鍵的(de)問題
3、頁面緩存
将訪問生成的(de)response緩存起來(lái) 定時(shí)更新 下(xià)次訪問直接返回緩存的(de)response
4、拆分(fēn)應用(yòng)
做(zuò)到服務化(huà),各個(gè)服務可(kě)能會出現重複代碼,注意分(fēn)布式事物(wù),需要消息中間件支撐
大(dà)型網站建設需要注意事項;
網站所選擇的(de)網絡提供商:網通(tōng)電信兩個(gè)交叉通(tōng)信很慢(màn),考慮那些兩個(gè)都接入速度很快(kuài)的(de),比如網信通(tōng)(我以前公司的(de)網站和(hé)遊戲都在上面)
1.網站架構體系(WEB服務器?多(duō)少、數據庫服務器多(duō)少?、緩存服務器、圖片服務器、備份服務器)
2.數據結構及數據算(suàn)法(數據庫結構一定要優化(huà),如果表太大(dà),請用(yòng)分(fēn)表設置模式,如果能分(fēn)數據庫參考petshop)
3.緩存(大(dà)網站不能沒有緩存:數據庫緩存、數據緩存、頁面緩存、圖片緩存)
4.壓力測試(沒有這(zhè)個(gè)測試的(de)大(dà)網站表搞笑(xiào)了(le))
5.代碼優化(huà)(算(suàn)法真tmd的(de)很重要)
6.開發架構(架構擴展性一定要考慮,很多(duō)時(shí)候架構能解決很多(duō)問題)
7.測試測試再測試
8.不停的(de)監控在監控性能及運行狀态
具體的(de)來(lái)說涉及到:
1. 網站運行技術框架要求
技術範圍 說明(míng)
.net2.0
MSSQL2005
JMAIL
IIS6.0
SERV-U
AJAX
HTML
W3C
JAVASCRIPT
2. 網站浏覽速度要求(10月(yuè)份速度、頁面大(dà)小要求)
網頁的(de)加載速度與網頁内容大(dà)小成正比,網頁越大(dà),加載越慢(màn),網頁越小加載越快(kuài)
1) 網頁加載速度
标準 6秒
慢(màn) > 10秒
非常慢(màn) > 20秒
快(kuài) <5秒
非常快(kuài) <2秒
2) 網頁大(dà)小
标準 350k
大(dà) > 400k
非常大(dà) > 500k
小 <250k
非常小 <150k
3) 首頁加載速度必須小于6秒
4) 訂餐網頁加載速度必須小于8秒
5) 網頁服務器緩存
6) 網頁圖片緩存
7) 減少頁面圖片大(dà)小
說明(míng):此要求爲10月(yuè)份網站速度、頁面大(dà)小要求。
3. 網站兼容性要求
兼容浏覽器 說明(míng)
IE6 完全兼容
Ie6補丁打全後 完全兼容
IE7 完全兼容
FIREFOX 完全兼容
TT 完全兼容
遨遊 流暢訂餐流程
4. 網站安全性要求
1) 無SQL注入點
1. 字符注入
2. 數字注入
3. 其他(tā)注入
2) 敏感Cookie必須加密
1. 用(yòng)戶數字id
2. 訂單信息
3) 過濾cookie欺騙程序
4) 無錯誤明(míng)細輸出給客戶,返回我們定義好的(de)錯誤信息給客戶
5) 權限受限嚴格驗證
5. 穩定性要求
1) 程序無明(míng)顯錯誤,如:不定期出現某些亂碼問題
2) 并發用(yòng)戶達到500人(rén)/秒正常運行
6. 可(kě)靠性要求
1) 保證安全性能
2) 保證穩定性
7. 搜索引擎優化(huà)需求
1) 頁面TITLE要求顯示不同頁不同TITLE,并顯示名稱關鍵字
2) 頁面内關鍵字
3) 網站遍曆功能
各大(dà)門戶網站都用(yòng)了(le)CDN. 你們可(kě)以考慮自己做(zuò).
3台Linux服務器,1台Windows服務器. 或者更多(duō). windows服務器放主站點,URL靜态化(huà).
linux1做(zuò)電信squid服務器. 緩存整個(gè)站點的(de)電信訪問.
linux2做(zuò)網通(tōng)squid服務器. 緩存網通(tōng)訪問.
linux3做(zuò)DNS服務器,做(zuò)個(gè)智能DNS解析.
這(zhè)樣做(zuò),電信用(yòng)戶訪問站點,則訪問電信緩存服務器. 網通(tōng)用(yòng)戶訪問站點,則訪問網通(tōng)緩存服務器.
當緩存沒有查詢内容的(de)時(shí)候,才由緩存服務器去windows服務器取數據,并緩存.
當然你也(yě)可(kě)以架設鐵通(tōng)的(de)服務器. 或者搞緩存服務器隊列.
責任編輯:中山網站建設
【網訊網絡】國家高(gāo)新技術企業》十年專注軟件開發,網站建設,網頁設計,APP開發,小程序,微信公衆号開發,定制各類企業管理(lǐ)軟件(OA、CRM、ERP、訂單管理(lǐ)系統、進銷存管理(lǐ)軟件等)!
服務熱(rè)線:0760-88610046、13924923903,http://www.wansion.net
下(xià)一篇:Android開發性能如何優化(huà)
*請認真填寫需求,我們會在24小時(shí)内與您取得(de)聯系。