在WEB網(wǎng)站的規(guī)模從小到大不斷擴(kuò)展的過程中,用戶訪問量和并發(fā)量不斷增加。
構(gòu)建大型的商業(yè)網(wǎng)站絕對(duì)不可能像構(gòu)建普通的小型網(wǎng)站一樣一蹴而就,需要從嚴(yán)格的軟件工程管理的角度進(jìn)行認(rèn)真規(guī)劃,有步驟有邏輯地進(jìn)行開發(fā)。
對(duì)于大型網(wǎng)站來說,所采用的技術(shù)涉及面極其廣泛,從硬件到軟件、編程語言、數(shù)據(jù)庫(kù)、Web服務(wù)器、防火墻等各個(gè)領(lǐng)域都有了很高的要求,已經(jīng)不是原來簡(jiǎn)單的html靜態(tài)網(wǎng)站所能比擬的。
那如何優(yōu)化程序和網(wǎng)站進(jìn)行部署呢?
以下是我的幾點(diǎn)個(gè)人看法(個(gè)人用NHibernater + MySQL或MSSQL)
一:頁(yè)面緩存和數(shù)據(jù)緩存
這絕對(duì)不單指低級(jí)的緩存技術(shù)相關(guān)的編程,應(yīng)從整個(gè)架構(gòu)角度著眼,深入研究Web服務(wù)器、數(shù)據(jù)庫(kù)服務(wù)器的各層級(jí)的緩沖策略,最后才是低級(jí)的緩沖技術(shù)的編程。
1:為了讓網(wǎng)站支持更好的緩存機(jī)制,在開發(fā)過程中所有ASPX文件和ASCX文件不能直接訪問Session或Cookie,因?yàn)槿绻苯釉L問這些數(shù)據(jù),會(huì)造成服務(wù)器把當(dāng)前用戶的緩存給到另外一個(gè)用戶的情況,任何個(gè)人信息都通過客戶端的javascript訪問Cookie或Ajax請(qǐng)求數(shù)據(jù)取得。
2:Hibernate的緩存包括Session的緩存和SessionFactory的緩存,在系統(tǒng)設(shè)計(jì)的時(shí)候就要設(shè)定好數(shù)據(jù)的變更周期,以更好的設(shè)置數(shù)據(jù)的緩存時(shí)間,防止加載數(shù)據(jù)庫(kù)數(shù)據(jù);
3:在對(duì)外數(shù)據(jù)的展現(xiàn),也就是所有非事務(wù)的Select語句中一定要用:"SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED" 來聲明事務(wù)級(jí)別(MSSQL可以用NOLOCK方式,但為程序可以兼容多種數(shù)據(jù)庫(kù),建議用臟讀方式),提高讀取性能,防止出現(xiàn)讀取到鎖定數(shù)據(jù),造成阻塞。
二:Web服務(wù)器分布式負(fù)載均衡
1:運(yùn)用LVS+Keepalived進(jìn)行負(fù)載均衡部署(同時(shí)防止單點(diǎn)故障,參考:Linux 下 LVS+Keepalived 負(fù)載均衡安裝)
2:負(fù)載均衡后用Memcached 進(jìn)行集群緩存,并實(shí)現(xiàn)Session共享,防止因?yàn)樨?fù)載均衡后Session丟失。
三:數(shù)據(jù)庫(kù)優(yōu)化
1:優(yōu)化索引
2:讀寫主從分離:運(yùn)用MySQL的MHA來保證數(shù)據(jù)庫(kù)系統(tǒng)的高可用.在宕機(jī)的時(shí)間內(nèi)(通常10—30秒內(nèi)),完成故障切換,實(shí)現(xiàn)主從分離,再利用Altas進(jìn)行讀寫分離提高數(shù)據(jù)庫(kù)性能(參考:Mysql MHA 主從配置+Keepalived測(cè)試使用說明 、MySQL+Altas 讀寫分離測(cè)試(Altas 不能用存儲(chǔ)過程,Update和Delete必須要有參數(shù)))
3:分庫(kù):將數(shù)據(jù)庫(kù)按照不同的業(yè)務(wù)進(jìn)行分庫(kù)
4:分表:將同一個(gè)表,按照不同的業(yè)務(wù)邏輯進(jìn)行區(qū)分,如訂單表可分為1星期內(nèi),一個(gè)月內(nèi),三個(gè)月內(nèi),一年內(nèi),四個(gè)不同的表,正常業(yè)務(wù)邏輯最多的都是查詢今天或這幾天的數(shù)據(jù),面其他數(shù)據(jù)一般都不會(huì)查到
聯(lián)系客服