天天看點

《深入分析JavaWeb技術内幕》讀書筆記 《深入分析JavaWeb技術内幕》讀書筆記  一.Web請求過程與架構

《深入分析JavaWeb技術内幕》讀書筆記 

一.Web請求過程與架構

轉載自:http://blog.csdn.net/jobsandczj/article/category/6885435

最近拜讀了大牛許令波大神的著作《深入分析JavaWeb技術内幕》,感覺頗有受益,決定寫一寫讀書筆記,以作總結。第一章,我們就來講一講Web請求過程。

随着Web2.0時代的到來,網際網路的網絡架構已從傳統的C/S架構轉變為更加友善快捷的B/S架構。這種轉變不是沒有原因的,下面我們就來說說B/S架構的優點。

B/S:

主要從兩方面來闡述B/S的有點:用戶端和服務端。

用戶端使用統一的浏覽器(Browser)。由于浏覽器具有統一性,他不需要特殊的配置和網絡連接配接。有效地屏蔽了不同服務提供商提高給使用者使用服務的差異性。另外最重要的一點是浏覽器的易用性,能使使用者更加輕松友善地使用,大大降低了學習門檻。

服務端(Server)基于統一的HTTP。和傳統的C/S架構使用自己定義的應用層協定不同,B/S架構使用統一的HTTP。使用統一的HTTP也為服務提供商簡化了開發模式。有很多現成的基于HTTP的伺服器,不僅如此,連開發服務的通用架構都不需要單獨開發,這大大降低了開發門檻,是以也出現了越來越多的網際網路服務。

由此可見,B/S是基于HTTP的,那HTTP又是什麼呢?它是如何建立連接配接的呢?

HTTP是應用層的一種采用無狀态的短連接配接的通信方式。通常情況下,一次請求就完成了一次資料互動,通常也對應一個業務邏輯,然後這次通信連接配接就斷開了。采用這種方式是為了能夠同時服務更多的使用者,因為目前網際網路應用每天都會處理上億的使用者請求,不可能每個使用者通路一次後就一直保持這個連接配接。

B/S網絡架構:

目前的B/S網絡架構大多采用下圖形式:

以下是原文截圖,關于一次請求的過程。

當然,不管網絡架構如何變化,始終有一些固定不變的原則。

1.網際網路上所有資源都要用一個URL來表示。URL是統一資源定位符,不要小看URL,他幾乎包含了整個網際網路架構的精髓。當然,這個精髓貌似正在受到Ajax的挑釁。

2.必須基于HTTP與服務端互動。(HTTPS隻是在HTTP的基礎上加了個安保措施SSL[Secure

Socket Layer]安全套接層)

3.資料必須在浏覽器中被展示。

那HTTP如何發起請求呢。其實發起HTTP請求和建立一個Socket連接配接差別不大。隻不過outputStream.write寫的二進制位元組資料格式要符合HTTP格式要求。浏覽器就是根據解析出來的IP位址和預設的80端口與遠端伺服器建立Socket連接配接,然後浏覽器再根據這個URL組裝成一個get類型的HTTP請求頭發送到伺服器。當然,這個過程我們完全可以自己模拟。

HTTP:

我們再來講一講HTTP解析:

浏覽器緩存機制:

Ctrl+F5組合鍵重新整理後,會在請求頭加兩個請求項。Pragma:no-cache和Cache-Control:no-cache。它們有什麼作用呢?

DNS域名解析:

DNS域名解析是浏覽器請求的一個非常重要的過程。我們平時上網可能感覺不到DNS解析的存在,但一旦DNS解析出錯,哪台根伺服器壞了,那網際網路會出些災難。

DNS域名解析可以分成10步,其中任何一步完成了域名解析,就不再往下進行。

1.檢視浏覽器緩存

2.檢視作業系統緩存

3.向LDNS(本地DNS伺服器)發起請求

4.向Root Server(根域名伺服器)發起請求

5.根域名伺服器傳回給本地域名伺服器一個所查詢的主域名伺服器(gTLD Server)。gTLD是國際頂級域名伺服器,如.com,.cn,.org等,全球隻有13台左右。

6.本地伺服器再向上一步傳回的gTLD伺服器發送請求。

7.接受請求的gTLD伺服器查找并傳回此域名對應的Name Server域名伺服器。

8.Name Server域名伺服器會查詢存儲的域名和IP的映射關系表。

9.傳回IP,通常情況下也會傳回一個TTL,LDNS緩存時間由TTL值控制。

10.LDNS把解析的結果傳回給使用者,使用者也根據得到的TTL值将結果緩存在本地系統緩存中。

在實際域名解析過程中,可能還不止這10個步驟,如Name Server也可能有多級,或者有一個GTM來進行負載均衡控制,這都有可能會影響域名解析過程。

Linux和Windows都可以用nslookup指令來查詢域名的解析結果。

CDN架構:

最後我們來講一講CDN架構:

CDN也就是内容分布網絡(Content Delivery Network),它是構築在現有Internet上的一種先進的流量配置設定網絡。

原文截圖:

通常的CDN架構:

負載均衡:

負載均衡(Load Balance)就是對工作任務進行平衡,分攤到多個操作單元上執行,如圖檔伺服器、應用伺服器等,共同完成工作任務。他可以提高伺服器響應速度和使用率,避免軟體或者硬體子產品出現單點失效,解決網絡擁塞問題,實作地理位置無關性,為使用者提供較一緻的通路品質。

通常有三種負載均衡架構:鍊路負載均衡(通過DNS解析來完成),叢集負載均衡(分硬體和軟體),作業系統負載均衡(通過軟中斷或者硬體中斷)。

微信公衆号【黃小斜】大廠程式員,網際網路行業新知,終身學習踐行者。關注後回複「Java」、「Python」、「C++」、「大資料」、「機器學習」、「算法」、「AI」、「Android」、「前端」、「iOS」、「考研」、「BAT」、「校招」、「筆試」、「面試」、「面經」、「計算機基礎」、「LeetCode」 等關鍵字可以擷取對應的免費學習資料。 

                     ​

繼續閱讀