《構建高性能的web站點》讀書筆記--組件分離


     組件分離可以說是很多網站都在采用、最基礎的提高網站吞吐的策略。比如我們看淘寶:像fuzhuang.taobao.com、home.taobao.com這樣二級站點的分離,再比img01.taobaocdn.com、img02.taobaocdn.com的圖片分離,a.tbcdn.cn樣式的分離等,都是組件分離。

什么是組件分離

      這里的組件就是所有基於url訪問的資源,如動態內容、圖片、腳本、樣式等;組件的分離就是這些組件的垂直分割,不同的資源分布到不同的服務器或相同服務器的不同邏輯單元,並且配以獨立的域名(頂級域名或二級域名)。從請求表面上,請求不同站點的資源,但是他們仍可以完美組成一個完整的頁面。這本身也是負載均衡策略的一種,可以實現站點規模的擴展,以后會提到在各個組件之間內部實現負載均衡或集群。

分離的好處

分離對我們來說到底有多大的驅動力:

1,“因材施教”,提高網站吞吐。我們知道,不同的資源對於服務器的硬件資源的需求是不一樣:動態內容需要大量計算或訪問數據庫,就需要CPU、內存的資源,而靜態文件更需要的是I/O操作。通過分離我們可以針對特定的資源,“因材施教”,讓組件可以充分利用服務器資源,以較成本提高服務器吞吐。

2,提高瀏覽器的並發。我們知道每個瀏覽器在解析完html,開始對頁面中各個組件下載時,會維護一個下載隊列,同一時刻只能對隊列中一定數量的資源開始下載。如IE6/7默認的最大並發數,對於http1.1是2,http1.0是4,而ie8分別是6,6。

不過這個限制是有個前提的,只是對同一個域名下的組件有效。因此我們把組件分離到不同的服務器,並綁定上不同的域名或二級域名如:img.xx.com,js.xx.com等,這樣就相當於提高了瀏覽器下載我們網站資源的並發數,加快頁面的加載速度。

3,提高網站健壯性和可擴展性。就如上面所說這是負載均衡策略的一種,站點規模達到一定程度,這是我們必須選擇路徑,在此基礎上,我們可以運用更多的負載均衡策略,以此提高網站的負載。

分離的依據

      把js、css、圖片等靜態資源從主站獨立到靜態的站點,這可能是我們最簡單有效的分離策略了,但是這還遠遠不夠。就算是同類的組件,可能在文件大小、數量、更新頻率、預計並發用戶數、是否要腳本、是否需要大量的CPU運算、是否訪問數據庫、主要是讀還是寫數據庫操作、是否要遠程調用等等方面都存在很大的差異。例如對於圖片來說,有可能是網站頁面用到的基礎圖片,也可能是用戶上傳的大圖片,這就要我們不同方式來區別對待。同是動態頁面,呈現內容的頁面和用於收集信息的動態頁面,我們仍可以視為不同類的組件加以區別對待。

      因此為組件分離提供一種最優最佳的方法肯定是一個需要不斷進步的過程,我們必須從實際的業務需求,區分不同組件的要求,使得不同的組件能充分有效利用服務器資源,達到符合各自實際情況的吞吐最大化。

什么“材”,如何“教”

動態內容

     動態內容就是需要動態腳本經過計算得到結果,如生成靜態html、生成圖片、生成json\xml數據等等,就像上面提到的,顯示內容的和采集數據的動態程序一樣,它本身又包含很多差異化的應用,這是由實際業務來決定的,因此動態內容的分離是一個持續的過程。如一般網站我們可以對前台顯示和管理后台分離;對於同是前台頁面,我們可以根據業務,如把新聞分離到獨立站點等等,如果是資訊網站,可以根據資訊分類進行分離,但是切忌過度分離。

     但是對於所有的動態程序,我們仍可以提供相同的“教”,為它們提供良好的空間:速度快的CPU、大容量的內存、特定優化的系統和服務器軟件、與數據庫保持高速連接、穩定可靠的數據中心,持續優化的程序架構

靜態內容

     就是直接存儲於服務器的html、圖片等文件,不需要動態腳本執行,可以節省一定的CPU和內存的開銷,更需要的是I/O操作。我們可以需要一個針對靜態文件優化的文件系統和服務器軟件之外、使用高速磁盤、使用RAID分區、提高服務器帶寬也是可以采用的方法。另外不要忘了瀏覽器緩存,特別對於圖片、腳本、樣式等不太容易變化的內容,采用一個較長時間的瀏覽器緩存策略,是一個比較好的方法。

 

    如果網站規模擴大,先規划下組件分離吧,下篇分享負載均衡。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM