應(yīng)對(duì)高并發(fā)訪問的四個(gè)建議
A1.jpg
互聯(lián)網(wǎng)不斷擴(kuò)大的規(guī)模、日益增長的用戶群以及Web2.0的興起,對(duì)網(wǎng)站建設(shè)提出了新的要求,它要具備高性能和高可擴(kuò)展性,同時(shí)要支持高度并發(fā)的訪問。將硬盤讀寫分離、功能和展示分開、基本功能封狀成類及在設(shè)計(jì)架構(gòu)時(shí)保證其擴(kuò)容性,對(duì)大型網(wǎng)站建設(shè)至關(guān)重要。
將硬盤讀寫分離
如果網(wǎng)站硬盤的讀寫性能是整個(gè)網(wǎng)站性能提升的瓶頸,那么可考慮將硬盤的讀、寫功能分開,分別進(jìn)行優(yōu)化。在用來寫的硬盤上,如果我們提升硬盤的I/O,那么肯定會(huì)增加整個(gè)文件系統(tǒng)的故障率,因?yàn)樗撬序?qū)動(dòng)器的故障率之和。硬盤的I/O和故障率不能兼得。而用來讀的硬盤,則可用普通的服務(wù)器硬盤來降低開銷。
均衡CPU和I/O消耗,不僅可以獲得更充分的服務(wù)器資源利用,還能支持暫時(shí)的過載,遇到突發(fā)事件、訪問流量劇增時(shí),出現(xiàn)的結(jié)果是系統(tǒng)的整體性能下降,而不是立即崩潰。
功能和展示必須分開
在網(wǎng)站的后期運(yùn)營中,肯定會(huì)有很多需求變更。如果每次變更都需要修改源代碼,那么,這個(gè)網(wǎng)站的開發(fā)可以說是失敗的。
最重要的是功能和展示必須分開。核心功能使用腳本語言編寫,前臺(tái)展示使用帶特殊標(biāo)簽的HTML,這樣不僅能加快開發(fā)速度,而且會(huì)為以后的維護(hù)和升級(jí)提供方便。對(duì)于前臺(tái)模板,一般還需要將頁面的頭、尾單獨(dú)提取出來,頁面的主體部分也按模塊或功能拆分,這樣能切實(shí)減輕服務(wù)器的壓力。
封裝使開發(fā)事半功倍
在功能塊層次,如果使用JSP,應(yīng)將數(shù)據(jù)庫連接、會(huì)話管理等基本功能經(jīng)封裝成類。如果使用PHP,則要在腳本代碼中顯式封裝,將每個(gè)功能塊封裝成一個(gè)函數(shù)、文件或類。
在更高的層次,可以將網(wǎng)站分為表示層、邏輯層和持久層,分別進(jìn)行封裝,做到當(dāng)某一層架構(gòu)發(fā)生變化時(shí),不會(huì)影響到其他層。近來流行的MVC架構(gòu),將整個(gè)網(wǎng)站拆分成Model、View和Controller三個(gè)部分,而且有很多優(yōu)秀的代碼框架可供選擇使用,像JSP的Structs、Spring,PHP的php.MVC及Studs等。使用現(xiàn)成的代碼框架,可以使網(wǎng)站開發(fā)事半功倍。
擴(kuò)容性應(yīng)對(duì)突增流量
一個(gè)大型網(wǎng)站,在設(shè)計(jì)架構(gòu)的時(shí)候,必須考慮到以后可能的容量擴(kuò)充。對(duì)于活動(dòng)類網(wǎng)站來說,不定時(shí)的突增流量是巨大的。在網(wǎng)站主存儲(chǔ)服務(wù)器上,采用配置文件形式指定每一個(gè)存儲(chǔ)盤柜上存儲(chǔ)的數(shù)據(jù)文件的ID范圍。當(dāng)前臺(tái)服務(wù)器需要讀取一個(gè)數(shù)據(jù)的時(shí)候,首先通過詢問主存儲(chǔ)服務(wù)器上的接口獲得該數(shù)據(jù)所在的盤柜及目錄地址,然后再去該盤柜讀取實(shí)際的數(shù)據(jù)文件。如果需要增加盤柜,只需要修改配置文件即可,前臺(tái)程序絲毫不受影響。