標籤:建立 長串連 別名 work 網路請求 第一個 com ever indent
Web應用網路模型前言
這篇文章要介紹的是一個常見Web應用基本的過程跟網路模型,當然,對於多數的Client/Server應用也是適用的。延續這個系列文章的風格,只管通俗不管嚴謹。
概覽
總體模型概覽圖:
DNS
使用者點開/輸入一個連結http://www.qq.com/index.html 之後,瀏覽器需要先找到www.qq.com這個網域名稱對應的IP地址,因為電腦是通過IP作為門牌號的,而網域名稱你可以認為是這個IP的別名,方便人類記憶使用。
一般來說,瀏覽器會先詢問本地DNS緩衝,如果沒有記錄過這個網域名稱映射的IP,那就向本地的DNS網關詢問,如果網關也不知道,就繼續往上一層的DNS伺服器詢問,直到拿到這個IP地址。
一般來說,一台伺服器處理的請求是有限的,因此大型的應用都會有多台proxy機器,我們可以讓DNS伺服器在第一個請求返回IP1,第二個請求返回IP2,……這樣使用者的請求就會均勻的落在這些機器上,這個就是DNS負載平衡。CDN就是通過智能DNS算出離使用者最近的CDN節點的IP地址,這樣使用者可以訪問一台離他最近的機器,大大節約連線時間。
代理與反向 Proxy
一般來說,瀏覽器跟真正提供Web服務的機器是沒有直接連接的,他們中間都會有代理跟反向 Proxy。
大部分的公司都會內部的電腦都配置了Proxy 伺服器,其作用是所有內部的網路請求都是通過代理去串連對方伺服器,可以在Proxy 伺服器這裡做惡意請求/響應的攔截,還可以緩衝內部網路所需的公用資源。
反向 Proxy就是以Proxy 伺服器來接收網路連接請求,我們上下文稱Proxy機器指的就是反向 Proxy機器,Proxy機器收到請求後會經過一定的分析最後把請求內容轉寄給內網對應的Web伺服器,Web伺服器的HTTP響應包會先到Proxy機器,然後再到使用者機器。 反向 Proxy的好處是可以負載平衡,在它後邊可以有多台工作的Web伺服器,這樣分層次之後,很多職責就明確很多了:Proxy機器負責負載平衡、攔截惡意請求、維持長串連,還可以屏蔽不工作的Web伺服器;而Web伺服器就只要關心自己處理的Web商務邏輯即可。 往往Proxy伺服器跟使用者機器保持長串連,這樣可以節省使用者每次跟伺服器建立串連的消耗,而Proxy伺服器跟Web伺服器採用短串連的方式,這樣可以有效節約Web伺服器的資源。
Web server
Web server的職責就是根據使用者的請求,返回其所需要的響應內容。往往Web server只涉及業務測邏輯的判斷以及資料的組裝,而真正的資料位元於後端的儲存Server(本文不涉及)。
對於一般應用來說,Web server返回的是動態產生的內容(每個使用者都不一致的動態內容或者經常編輯變動的內容),如頁面的HTML內容、JSON資料、XML資料等。而Javascript檔案、CSS檔案、圖片這些靜態資源(不根據使用者而變動的資源)往往存放在CDN中。
瀏覽器
從瀏覽器發起請求,經曆以上講述的步驟處理後,瀏覽器發起到從Web sever返回的HTTP包。一般來說這個響應是返回網頁的HTML。
接著瀏覽器開始解析收到的HTML包,HTML裡邊一般會把樣式CSS跟指令碼Javascript作為外鏈請求。本文不涉及頁面渲染內容,主要為了討論整體應用的模型,因此這塊留以後探討寫文章。
CDN
從上邊討論知道,對於動態內容,請求總是到Web server去動態計算擷取內容,但是對於不隨使用者狀態變化的內容我們把內容推送到CDN節點上。
靜態資源的網域名稱跟頁面HTML的網域名稱一般來說是不一樣的,因為靜態資源的請求需要解析到CDN節點去。我們假設主請求是:www.qq.com/index.html;CDN請求是cdn.qq.com/index.css。
一般Web應用把靜態內容推到CDN有兩種模式,一種是在上線前主動將內容推送到CDN節點,一種是CDN發現本地沒有該檔案時,回源到Web server機器取內容,然後緩衝在他本地。
Web應用網路模型