web服務器搭建要考慮的因素有:1、HTML靜態化頁面,以一定頻率更新緩存的靜態頁面能提升資源利用與網站訪問效率;2、圖片服務器分離,將圖片與網頁進行分離,能降低服務器訪問系統壓力;3、數據庫集群或庫表散列,能改善系統架構,提升數據庫性能,且可以做到很好的擴展性;4、緩存,包括架構緩存、應用緩存和分布式緩存;5、鏡像,接入鏡像技術能解決不同網絡接入商和地域帶來的用戶訪問速度差異;6、負載均衡,能解決網站高負荷訪問和大量并發請求。
具體內容如下:
1、HTML靜態化
資源占用最小、效率最高的就是純靜態化 HTML 頁面,事實上,即便是內容時長變化的頁面,其動態請求的內容在很長一段時間內也是不會變化的。如果將動態請求靜態化,以一定的頻率去更新緩存的靜態頁面,對于資源利用與網站訪問效率都有很大的提升。
2、圖片服務器分離
對于 web 服務器來說,圖片都是最消耗資源的,因此如果將圖片與網頁進行分離,用獨立甚至多臺服務器專門存儲圖片,這樣的架構對于降低服務器訪問系統壓力來說是很有效的。對于圖片服務器,可以通過盡量少支持 ContentType、LoadModule 來保證更高的效率。
3、數據庫集群、庫表散列
大型網站都有復雜的應用,他們依賴于數據庫存儲,當面對大量訪問時,數據庫瓶頸很快就會顯現出來,這時一臺數據庫將很快無法滿足應用,需要考慮使用數據庫集群或庫表散列。
有時候我們還需要從應用程序的角度考慮改善系統架構,庫表離散是最常用的且有效的解決方案,不同的模塊對應不同的數據庫或表,這樣的細分不僅能夠以低廉的成本提升數據庫性能,并且可以做到很好的擴展性。例如,sohu的論壇就是采用了這樣的架構,將論壇的用戶、設置、帖子等信息進行數據庫分離,然后對帖子、用戶按照板塊和ID進行散列數據庫和表,最終可以在配置文件中進行簡單的配置便能讓系統隨時增加一臺低成本的數據庫進來補充系統性能。同時,越來越多優秀的 NoSQL 數據庫提供了應對高并發業務需求的能力。
4、緩存
(1)架構緩存
架構方面的緩存,對Apache比較熟悉的人都能知道Apache提供了自己的緩存模塊,也可以使用外加的Squid模塊進行緩存,這兩種方式均可以有效的提高Apache的訪問響應能力。
(2)應用緩存
網站程序開發方面的緩存,Linux上提供的Memory Cache是常用的緩存接口,可以在web開發中使用,比如用Java開發的時候就可以調用MemoryCache對一些數據進行緩存和通訊共享,一些大型社區使用了這樣的架構。
(3)分布式緩存
分布式的緩存不僅提供了快速的高可用性存儲,而且可以避免緩存中數據的丟失,常用的有 memcache、redis 做 session 等頻繁使用的數據的存儲服務器,緩解應用服務器的壓力,并且做到數據的統一管理和備份。
5、鏡像
鏡像是大型網站常采用的提高性能和數據安全性的方式,鏡像的技術可以解決不同網絡接入商和地域帶來的用戶訪問速度差異,比如 ChinaNet 和 EduNet 之間的差異就促使了很多網站在教育網內搭建鏡像站點,數據進行定時更新或者實時更新。在鏡像的細節技術方面,這里不闡述太深,有很多專業的現成的解決架構和產品可選。也有廉價的通過軟件實現的思路,比如 Linux 上的 rsync 等工具。
6、負載均衡
負載均衡將是大型網站解決高負荷訪問和大量并發請求采用的解決方法。通過多臺服務器分擔網絡壓力來提升系統的并發性能。
(1)硬件四層交換
第四層交換使用第三層和第四層信息包的報頭信息,根據應用區間識別業務流,將整個區間段的業務流分配到合適的應用服務器進行處理。
第四層交換功能就像是虛IP,指向物理服務器。它傳輸的業務服從的協議多種多樣,有HTTP、FTP、NFS、Telnet或其他協議。這些業務在物理服務器基礎上,需要復雜的載量平衡算法。在IP世界,業務類型由終端TCP或UDP端口地址來決定,在第四層交換中的應用區間則由源端和終端IP地址、TCP和UDP端口共同決定。在硬件四層交換產品領域,有一些知名的產品可以選擇,比如Alteon、F5等,這些產品很昂貴,但是物有所值,能夠提供非常優秀的性能和很靈活的管理能力。
(2)軟件四層交換
了解硬件四層交換機的原理后,基于OSI模型來實現的軟件四層交換也就應運而生,這樣的解決方案實現的原理是一樣的,不過軟件交換的性能稍遜于硬件交換。
軟件四層交換我們可以使用Linux上常用的LVS來解決,LVS就是Linux Virtual Server,他提供了基于心跳線heartbeat的實時災難應對解決方案,提高系統的強壯性,同時可供了靈活的虛擬VIP配置和管理功能,可以同時滿足多種應用需求,這對于分布式的系統來說必不可少。
一個典型的使用負載均衡的策略就是,在軟件或者硬件四層交換的基礎上搭建squid集群,這種思路在很多大型網站包括搜索引擎上被采用,這樣的架構低成本、高性能還有很強的擴張性,隨時往架構里面增減節點都非常容易。軟件交換的性能很大程度上在于使用者對配置的熟悉能力,熟練的配置能力可以在滿足壓力的情況下游刃有余,靈活多變。