企業大型網站建設的係統架構;
1、HTML靜態化
其實大家都知道,效率最高、消耗最小的就是純靜態化的html頁(ye)麵(mian),所(suo)以(yi)我(wo)們(men)盡(jin)可(ke)能(neng)使(shi)我(wo)們(men)的(de)網(wang)站(zhan)上(shang)的(de)頁(ye)麵(mian)采(cai)用(yong)靜(jing)態(tai)頁(ye)麵(mian)來(lai)實(shi)現(xian),這(zhe)個(ge)最(zui)簡(jian)單(dan)的(de)方(fang)法(fa)其(qi)實(shi)也(ye)是(shi)最(zui)有(you)效(xiao)的(de)方(fang)法(fa)。但(dan)是(shi)對(dui)於(yu)大(da)量(liang)內(nei)容(rong)並(bing)且(qie)頻(pin)繁(fan)更(geng)新(xin)的(de)網(wang)站(zhan),我(wo)們(men)無(wu)法(fa)全(quan)部(bu)手(shou)動(dong)去(qu)挨(ai)個(ge)實(shi)現(xian),於(yu)是(shi)出(chu)現(xian)了(le)我(wo)們(men)常(chang)見(jian)的(de)信(xin)息(xi)發(fa)布(bu)係(xi)統(tong)CMS,xiangwomenchangfangwendegegemenhuzhandiandexinwenpindao,shenzhitamendeqitapindao,doushitongguoxinxifabuxitonglaiguanliheshixiande,xinxifabuxitongkeyishixianzuijiandandexinxiluruzidongshengchengjingtaiyemian,hainengjubeipindaoguanli、權限管理、自動抓取等功能,對於一個大型網站來說,擁有一套高效、可管理的CMS是必不可少的。

除(chu)了(le)門(men)戶(hu)和(he)信(xin)息(xi)發(fa)布(bu)類(lei)型(xing)的(de)網(wang)站(zhan),對(dui)於(yu)交(jiao)互(hu)性(xing)要(yao)求(qiu)很(hen)高(gao)的(de)社(she)區(qu)類(lei)型(xing)網(wang)站(zhan)來(lai)說(shuo),盡(jin)可(ke)能(neng)的(de)靜(jing)態(tai)化(hua)也(ye)是(shi)提(ti)高(gao)性(xing)能(neng)的(de)必(bi)要(yao)手(shou)段(duan),將(jiang)社(she)區(qu)內(nei)的(de)帖(tie)子(zi)、文章進行實時的靜態化,有更新的時候再重新靜態化也是大量使用的策略,像Mop的大雜燴就是使用了這樣的策略,網易社區等也是如此。
同時,html靜態化也是某些緩存策略使用的手段,對於係統中頻繁使用數據庫查詢但是內容更新很小的應用,可以考慮使用htmljingtaihualaishixian,biruluntanzhongluntandegongyongshezhixinxi,zhexiexinximuqiandezhuliuluntandoukeyijinxinghoutaiguanlibingqiecunchuzaishujukuzhong,zhexiexinxiqishidaliangbeiqiantaichengxutiaoyong,danshigengxinpinlvhenxiao,keyikaolvjiangzhebufenneirongjinxinghoutaigengxindeshihoujinxingjingtaihua,zheyangbimianledaliangdeshujukufangwenqingqiu。
2、圖片服務器分離
大家知道,對於Web服務器來說,不管是Apache、IIS還hai是shi其qi他ta容rong器qi,圖tu片pian是shi最zui消xiao耗hao資zi源yuan的de,於yu是shi我wo們men有you必bi要yao將jiang圖tu片pian與yu頁ye麵mian進jin行xing分fen離li,這zhe是shi基ji本ben上shang大da型xing網wang站zhan都dou會hui采cai用yong的de策ce略lve,他ta們men都dou有you獨du立li的de圖tu片pian服fu務wu器qi,甚shen至zhi很hen多duo台tai圖tu片pian服fu務wu器qi。這zhe樣yang的de架jia構gou可ke以yi降jiang低di提ti供gong頁ye麵mian訪fang問wen請qing求qiu的de服fu務wu器qi係xi統tong壓ya力li,並bing且qie可ke以yi保bao證zheng係xi統tong不bu會hui因yin為wei圖tu片pian問wen題ti而er崩beng潰kui,在zai應ying用yong服fu務wu器qi和he圖tu片pian服fu務wu器qi上shang,可ke以yi進jin行xing不bu同tong的de配pei置zhi優you化hua,比bi如ruapache在配置ContentType的時候可以盡量少支持,盡可能少的 LoadModule,保證更高的係統消耗和執行效率。
3、數據庫集群和庫表散列
daxingwangzhandouyoufuzadeyingyong,zhexieyingyongbixushiyongshujuku,namezaimianduidaliangfangwendeshihou,shujukudepingjinghenkuaijiunengxianxianchulai,zheshiyitaishujukujianghenkuaiwufamanzuyingyong,yushiwomenxuyaoshiyongshujukujiqunhuozhekubiaosanlie。
在數據庫集群方麵,很多數據庫都有自己的解決方案,Oracle、Sybase等都有很好的方案,常用的MySQL提供的Master/Slave也是類似的方案,您使用了什麼樣的DB,就參考相應的解決方案來實施即可。
上麵提到的數據庫集群由於在架構、成本、擴張性方麵都會受到所采用DB類(lei)型(xing)的(de)限(xian)製(zhi),於(yu)是(shi)我(wo)們(men)需(xu)要(yao)從(cong)應(ying)用(yong)程(cheng)序(xu)的(de)角(jiao)度(du)來(lai)考(kao)慮(lv)改(gai)善(shan)係(xi)統(tong)架(jia)構(gou),庫(ku)表(biao)散(san)列(lie)是(shi)常(chang)用(yong)並(bing)且(qie)最(zui)有(you)效(xiao)的(de)解(jie)決(jue)方(fang)案(an)。我(wo)們(men)在(zai)應(ying)用(yong)程(cheng)序(xu)中(zhong)安(an)裝(zhuang)業(ye)務(wu)和(he)應(ying)用(yong)或(huo)者(zhe)功(gong)能(neng)模(mo)塊(kuai)將(jiang)數(shu)據(ju)庫(ku)進(jin)行(xing)分(fen)離(li),不(bu)同(tong)的(de)模(mo)塊(kuai)對(dui)應(ying)不(bu)同(tong)的(de)數(shu)據(ju)庫(ku)或(huo)者(zhe)表(biao),再(zai)按(an)照(zhao)一(yi)定(ding)的(de)策(ce)略(lve)對(dui)某(mou)個(ge)頁(ye)麵(mian)或(huo)者(zhe)功(gong)能(neng)進(jin)行(xing)更(geng)小(xiao)的(de)數(shu)據(ju)庫(ku)散(san)列(lie),比(bi)如(ru)用(yong)戶(hu)表(biao),按(an)照(zhao)用(yong)戶(hu)ID進行表散列,這樣就能夠低成本的提升係統的性能並且有很好的擴展性。sohu的論壇就是采用了這樣的架構,將論壇的用戶、設置、帖子等信息進行數據庫分離,然後對帖子、用戶按照板塊和ID進行散列數據庫和表,最終可以在配置文件中進行簡單的配置便能讓係統隨時增加一台低成本的數據庫進來補充係統性能。
4、緩存
huancunyicigaojishudedoujiechuguo,henduodifangyongdaohuancun。wangzhanjiagouhewangzhankaifazhongdehuancunyeshifeichangzhongyao。zhelixianjiangshuzuijibendeliangzhonghuancun。gaojihefenbushidehuancunzaihoumianjiangshu。
架構方麵的緩存,對Apache比較熟悉的人都能知道Apache提供了自己的緩存模塊,也可以使用外加的Squid模塊進行緩存,這兩種方式均可以有效的提高Apache的訪問響應能力。
網站程序開發方麵的緩存,Linux上提供的Memory Cache是常用的緩存接口,可以在web開發中使用,比如用Java開發的時候就可以調用MemoryCache對一些數據進行緩存和通訊共享,一些大型社區使用了這樣的架構。另外,在使用web語言開發的時候,各種語言基本都有自己的緩存模塊和方法,PHP有Pear的Cache模塊,Java就更多了,.net不是很熟悉,相信也肯定有。
5、鏡像
鏡像是大型網站常采用的提高性能和數據安全性的方式,鏡像的技術可以解決不同網絡接入商和地域帶來的用戶訪問速度差異,比如ChinaNet和 EduNet之(zhi)間(jian)的(de)差(cha)異(yi)就(jiu)促(cu)使(shi)了(le)很(hen)多(duo)網(wang)站(zhan)在(zai)教(jiao)育(yu)網(wang)內(nei)搭(da)建(jian)鏡(jing)像(xiang)站(zhan)點(dian),數(shu)據(ju)進(jin)行(xing)定(ding)時(shi)更(geng)新(xin)或(huo)者(zhe)實(shi)時(shi)更(geng)新(xin)。在(zai)鏡(jing)像(xiang)的(de)細(xi)節(jie)技(ji)術(shu)方(fang)麵(mian),這(zhe)裏(li)不(bu)闡(chan)述(shu)太(tai)深(shen),有(you)很(hen)多(duo)專(zhuan)業(ye)的(de)現(xian)成(cheng)的(de)解(jie)決(jue)架(jia)構(gou)和(he)產(chan)品(pin)可(ke)選(xuan)。也(ye)有(you)廉(lian)價(jia)的(de)通(tong)過(guo)軟(ruan)件(jian)實(shi)現(xian)的(de)思(si)路(lu),比(bi)如(ru)Linux上的rsync等工具。
6、負載均衡
負載均衡將是大型網站解決高負荷訪問和大量並發請求采用的終極解決辦法。
負(fu)載(zai)均(jun)衡(heng)技(ji)術(shu)發(fa)展(zhan)了(le)多(duo)年(nian),有(you)很(hen)多(duo)專(zhuan)業(ye)的(de)服(fu)務(wu)提(ti)供(gong)商(shang)和(he)產(chan)品(pin)可(ke)以(yi)選(xuan)擇(ze),我(wo)個(ge)人(ren)接(jie)觸(chu)過(guo)一(yi)些(xie)解(jie)決(jue)方(fang)法(fa),其(qi)中(zhong)有(you)兩(liang)個(ge)架(jia)構(gou)可(ke)以(yi)給(gei)大(da)家(jia)做(zuo)參(can)考(kao)。
硬件四層交換
第(di)四(si)層(ceng)交(jiao)換(huan)使(shi)用(yong)第(di)三(san)層(ceng)和(he)第(di)四(si)層(ceng)信(xin)息(xi)包(bao)的(de)報(bao)頭(tou)信(xin)息(xi),根(gen)據(ju)應(ying)用(yong)區(qu)間(jian)識(shi)別(bie)業(ye)務(wu)流(liu),將(jiang)整(zheng)個(ge)區(qu)間(jian)段(duan)的(de)業(ye)務(wu)流(liu)分(fen)配(pei)到(dao)合(he)適(shi)的(de)應(ying)用(yong)服(fu)務(wu)器(qi)進(jin)行(xing)處(chu)理(li)。 第四層交換功能就象是虛IP,指向物理服務器。它傳輸的業務服從的協議多種多樣,有HTTP、FTP、NFS、Telnet或其他協議。這些業務在物理服務器基礎上,需要複雜的載量平衡算法。在IP世界,業務類型由終端TCP或UDP端口地址來決定,在第四層交換中的應用區間則由源端和終端IP地址、TCP和UDP端口共同決定。
在硬件四層交換產品領域,有一些知名的產品可以選擇,比如Alteon、F5等,這些產品很昂貴,但是物有所值,能夠提供非常優秀的性能和很靈活的管理能力。Yahoo中國當初接近2000台服務器使用了三四台Alteon就搞定了。
軟件四層交換
大家知道了硬件四層交換機的原理後,基於OSImoxinglaishixianderuanjiansicengjiaohuanyejiuyingyunersheng,zheyangdejiejuefanganshixiandeyuanliyizhi,buguoxingnengshaocha。danshimanzuyidingliangdeyalihaishiyourenyouyude,yourenshuoruanjianshixianfangshiqishigenglinghuo,chulinengliwanquankannipeizhideshuxinengli。
軟件四層交換我們可以使用Linux上常用的LVS來解決,LVS就是Linux Virtual Server,他提供了基於心跳線heartbeat的實時災難應對解決方案,提高係統的魯棒性,同時可供了靈活的虛擬VIP配置和管理功能,可以同時滿足多種應用需求,這對於分布式的係統來說必不可少。
一個典型的使用負載均衡的策略就是,在軟件或者硬件四層交換的基礎上搭建squid集群,這種思路在很多大型網站包括搜索引擎上被采用,這樣的架構低成本、高性能還有很強的擴張性,隨時往架構裏麵增減節點都非常容易。這樣的架構我準備空了專門詳細整理一下和大家探討。
duiyudaxingwangzhanlaishuo,qianmiantidaodemeigefangfakenengdouhuibeitongshishiyongdao,wozhelijieshaodebijiaoqianxian,jutishixianguochengzhonghenduoxijiehaixuyaodajiamanmanshuxihetihui,youshiyigehenxiaodesquid參數或者apache參數設置,對於係統性能的影響就會很大,希望大家一起討論,達到拋磚引玉之效。
大型網站建設問題;
1、多個服務器集群後session同步問題
可以通過算法計算使同一個ip訪問同一台服務器
可以複製sessio各個服務器(不推薦開銷大)
session存在第三方中間件如redis中
2、數據庫壓力過大
利用數據庫主從數據複製的特性進行數據庫讀寫分離
添加nosql中間件存放熱點數據
用搜索引擎存放部分要讀的數據
根據業務拆分數據或者分表需要考慮分布式主鍵的問題
3、頁麵緩存
將訪問生成的response緩存起來 定時更新 下次訪問直接返回緩存的response
4、拆分應用
做到服務化,各個服務可能會出現重複代碼,注意分布式事物,需要消息中間件支撐

大型網站建設需要注意事項;
網站所選擇的網絡提供商:網通電信兩個交叉通信很慢,考慮那些兩個都接入速度很快的,比如網信通(我以前公司的網站和遊戲都在上麵)
1.網站架構體係(WEB服務器?多少、數據庫服務器多少?、緩存服務器、圖片服務器、備份服務器)
2.數據結構及數據算法(數據庫結構一定要優化,如果表太大,請用分表設置模式,如果能分數據庫參考petshop)
3.緩存(大網站不能沒有緩存:數據庫緩存、數據緩存、頁麵緩存、圖片緩存)
4.壓力測試(沒有這個測試的大網站表搞笑了)
5.代碼優化(算法真tmd的很重要)
6.開發架構(架構擴展性一定要考慮,很多時候架構能解決很多問題)
7.測試測試再測試
8.不停的監控在監控性能及運行狀態
具體的來說涉及到:
1. 網站運行技術框架要求
技術範圍 說明
.net2.0
MSSQL2005
JMAIL
IIS6.0
SERV-U
AJAX
HTML
W3C
JAVASCRIPT
2. 網站瀏覽速度要求(10月份速度、頁麵大小要求)
網頁的加載速度與網頁內容大小成正比,網頁越大,加載越慢,網頁越小加載越快
1) 網頁加載速度
標準 6秒
慢 > 10秒
非常慢 > 20秒
快 <5秒
非常快 <2秒
2) 網頁大小
標準 350k
大 > 400k
非常大 > 500k
小 <250k
非常小 <150k
3) 首頁加載速度必須小於6秒
4) 訂餐網頁加載速度必須小於8秒
5) 網頁服務器緩存
6) 網頁圖片緩存
7) 減少頁麵圖片大小
說明:此要求為10月份網站速度、頁麵大小要求。
3. 網站兼容性要求
兼容瀏覽器 說明
IE6 完全兼容
Ie6補丁打全後 完全兼容
IE7 完全兼容
FIREFOX 完全兼容
TT 完全兼容
遨遊 流暢訂餐流程
4. 網站安全性要求
1) 無SQL注入點
1. 字符注入
2. 數字注入
3. 其他注入
2) 敏感Cookie必須加密
1. 用戶數字id
2. 訂單信息
3) 過濾cookie欺騙程序
4) 無錯誤明細輸出給客戶,返回我們定義好的錯誤信息給客戶
5) 權限受限嚴格驗證
5. 穩定性要求
1) 程序無明顯錯誤,如:不定期出現某些亂碼問題
2) 並發用戶達到500人/秒正常運行
6. 可靠性要求
1) 保證安全性能
2) 保證穩定性
7. 搜索引擎優化需求
1) 頁麵TITLE要求顯示不同頁不同TITLE,並顯示名稱關鍵字
2) 頁麵內關鍵字
3) 網站遍曆功能
各大門戶網站都用了CDN. 你們可以考慮自己做.
3台Linux服務器,1台Windows服務器. 或者更多. windows服務器放主站點,URL靜態化.
linux1做電信squid服務器. 緩存整個站點的電信訪問.
linux2做網通squid服務器. 緩存網通訪問.
linux3做DNS服務器,做個智能DNS解析.
這樣做,電信用戶訪問站點,則訪問電信緩存服務器. 網通用戶訪問站點,則訪問網通緩存服務器.
當緩存沒有查詢內容的時候,才由緩存服務器去windows服務器取數據,並緩存.
當然你也可以架設鐵通的服務器. 或者搞緩存服務器隊列.












