大型網站技術挑戰主要來自龐大的用戶,高並發的訪問和海量的數據,任何簡單的業務一旦需要處理數以P計的數據和面對數以億計的用戶,問題就會變得很棘手。大型網站架構主要就是解決這類問題。
1.2.1初始階段的網站架構
大型網站都是從小型網站發展而來,網站架構也是一樣,是從小型網站架構逐步演化而來。小型網站最開始的時沒有太多人訪問,只需要一台服務器就綽綽有余,這時的網站架構如圖1.1所示。
圖1.1初始階段的網站架構
應用程序、數據庫、文件等所有資源都在一台服務器上。通常服務器操作系統使用Linux,應用程序使用PHP開發,然後部署在Apache上,數據庫使用MySQL,匯集各種免費開源軟件及一台廉價服務器就可以開始網站的發展之路了。
1.2.2應用服務和數據服務分離
隨著網站業務的發展,一台服務器逐漸不能滿足需求:越來越多的用戶訪問導致性能越來越差,越來越多的數據導致存儲空間不足。這時就需要將應用和數據分離。應用和數據分離後整個網站使用三台服務器:應用服務器、文件服務器和數據服務器,如圖1.2所示。這三台服務器對硬件資源的要求各不相同,應用服務器需要處理大量的業務邏輯,因此需要更快更強大的CPU;數據庫服務器需要快速磁盤檢索和數據緩存,因此需要更快的硬盤和更大的內存;文件服務器需要存儲大量用戶上傳的文件,因此需要更大的硬盤。
圖1.2 應用服務和數據服務分離
應用和數據分離後,不同特性的服務器承擔不同的服務角色,網站的並發處理能力和數據存儲空間得到了很大改善,支持網站業務進一步發展。但是隨著用戶逐漸增多,網站又一次面臨挑戰;數據庫壓力太大導致訪問延遲,進而影響整個網站性能,用戶體驗受到影響。這時需要對網站架構進一步優化。
1.2.3使用緩存改善網站性能
網站訪問特點和現實世界的財富分配一樣遵循二八定律:80%的業務訪問集中在20%的數據上。淘寶買家浏覽的商品集中在少部分成交數多、評價良好的商品上;百度搜索關鍵詞集中在少部分熱門詞匯上;只有經常登錄的用戶才會發博客、看博客,而這部分用戶也只占總用戶數目的一小部分。
既然大部分的業務訪問集中在一小部分數據上,那麼如果把這一小部分數據緩存在內存中,是不是就可以減少數據庫的訪問壓力,提高整個網站的數據訪問速度,改善數據庫的寫入性能了呢?
網站使用的緩存可以分為兩種:緩存在應用服務器上的本地緩存和緩存在專門的分布式緩存服務器上的遠程緩存。本地緩存的訪問速度更快一些,但是受應用服務器內存限制,其緩存數據量有限,而且會出現和應用程序爭用內存的情況。遠程分布式緩存可以使用集群的方式,部署大內存的服務器作為專門的緩存服務器,可以在理論上做到不受內存容量限制的緩存服務,如圖1.3所示。
圖1.3 網站使用緩存
使用緩存後,數據訪問眼裡得到有效緩解,但是單一應用服務器能夠處理的請求連接有線,在網站訪問高峰期,應用服務器成為整個網站的瓶頸。
1.2.4使用應用服務器集群改善網站的並發處理能力
使用集群是網站解決高並發、海量數據問題的通常手段。當一台服務器的處理能力、存儲空間不足時,不要企圖去換更強大的服務器,對大型網站而言,不管多麼強大的服務器,多滿足不了網站持續增長的業務需求。這種情況下,更恰當的做法是增加一台服務器分擔原有服務器的訪問及存儲壓力。
對網站架構而言,只要能通過增加一台服務器的方式改善負載壓力,就可以以同樣的方式持續增加服務器不斷改善系統性能,從而實現系統的可伸縮性。應用服務器實現集群是網站可伸縮集群架構設計中較為簡單成熟的一種,如圖1.4所示。
圖1.4應用服務器集群部署
通過負載均衡調度服務器,可將來自用戶浏覽器的訪問請求分發到應用服務器集群中的任何一台服務器上,如果有更多的用戶,就在集群中加入更多的應用服務器,使應用服務器的負載壓力不再成為整個網站的瓶頸。