設計高可用和高負載的網站系統的幾個注意事項
2024-07-21 02:02:25
供稿:網友
其實要設計一個高可用、高負載的系統還是有一定的規矩可循的,其手段無外乎向上擴展(Sacle Up 硬件擴展)或者向外擴展(Scale Out 軟件擴展),這兩種方案在某一階段時期,會顯著改善網站的性能,但不久之后,問題依舊。本文參考網上相關資料,試圖提供一個可行的 "有限" 解決方案。
早期
1. 對業務應用進行垂直分割,將不同的業務邊界劃分出來。程序員常說的 "多層體系" 只是縱向解決了不同編程層次的劃分,相對于業務而言,并沒有做出什么處理?,F在 SOA 大行其道,除了人們認識到面向服務帶來的互聯、擴展性以外,它也將不同服務的變化區分開來,各自擁有獨立的實現和存儲機制。每個服務使用不同的數據庫或數據表,從一定程度上減輕了以往單個數據庫頻繁造成的 "鎖" 和 I/O 瓶頸問題。
2. 將網站系統中的動態內容和靜態資源分離出來,使用單獨的更加高效的服務器(諸如 Apache + Linux)提供靜態信息。多數情況下,流量的極大部分來源于圖片、視頻等,用多臺服務器同時提供頁面顯示除了可以提高頁面響應和現實速度外,同時他將流量分解到多臺服務器上。另外,我們應該避免使用動態解析 (ASPNET_ISAPI.dll / HttpModule / HttpHandler) 來處理靜態數據的過濾和路徑重寫。
3. 使用緩存機制,包括使用諸如 ASP.NET Cache、PageCache、創建靜態頁面等手段。設計良好的緩存機制能極大提高系統性能和響應速度。
4. 使用 64 位數據庫系統。SQL Server 2005 在 64 位系統上可以使用更多的內存(最高64GB),而且在多 CPU 下也擁有更好的性能。有了更大的內存,我們甚至可以將某些常用且極少變化的表(比如分類目錄表等)設置為內存表以提高響應速度。
5. 關閉操作系統的某些安全設置,比如 Windows 2003 預防 DDOS 攻擊的一些設置,也可以避免一些意外的訪問瓶頸。
運行期
6. 建立多數據庫體系。使用單個或多個用于數據更新的數據庫服務器,然后利用數據庫的復制和訂閱功能同步到其他多臺專門用于顯示的數據庫服務器上,這樣可以有效減少因為更新帶來的數據庫訪問等待。當然,這種體系并不適用所有的業務。
7. 對大數據表進行分區?,F在的主流數據庫基本都支持數據表分區功能,我們可以橫向分區,將不同時期的數據存放到多個分區表中;也可以縱向分區,將不常用的字段放到其他分區表中。分區表并不會影響到我們的開發模式,無須對代碼進行調整,但數據表尺寸從 TB 減小到 GB 所帶來的好處是無法忽略的。
8. 使用負載均衡等手段提升性能。包括DNS負載均衡、代理服務器負載均衡、地址轉換網關負載均衡、協議內部支持負載均衡、NAT負載均衡、反向代理負載均衡等,負載均衡作為最常用的上擴手段,其效果也非常明顯。
9. 使用 SAN 等專用的存儲系統來提高 I/O 性能。SAN 使用光纖通道連接多個存儲設備,可以改善多個服務器硬盤之間使用網線傳輸數據的性能問題。此外,SAN 還可以動態調整存儲容量,更加有利于系統備份和恢復。
10. 電力備份。如果是自主機房,除了配置 UPS 電源外,最好擁有獨立的發電設備。當然,對中小型網站而言,這過于奢侈了些。