深入分析JavaWeb技術內幕》 第一章 深入Web請求過程
第一章 深入Web請求過程
B/S兩方面好處:
- 客戶端使用統一的瀏覽器(Browser)。瀏覽器統一性,屏蔽了不同服務器提供商提供服務的差異性。並且,瀏覽器交互特性使瀏覽器使用方便,且用戶行為的可繼承性非常強。
- 服務端(Server)基於統一的HTTP協議。簡化服務提供商開發模式,規範服務器開發者上午開發模式。
1.1 B/S網站架構概述
HTTP協議采用無狀態的短連接的通信方式。通常一次請求就完成一次數據交互,通常也對應一個業務邏輯。
URL請求DNS把域名解析成為IP地址,根據IP地址找到對應的服務器,向服務器發送請求,服務器返回數據資源給訪問的用戶。負載均衡給服務器分配請求,請求數據存儲在分布式緩存、靜態文件、數據庫裏。靜態資源會發起額外的HTTP請求,CDN服務器處理這個請求。
互聯網應用原則:
- 互聯網上所有資源用一個URL(統一資源定位符)表示。
- 必須基於HTTP協議與服務端交互。
- 數據展示必須在瀏覽器中進行。
1.2 如何發起一個請求
瀏覽器建立Socket連接之前,必須根據地址欄裏的URL的域名DNS解析出IP,根據IP地址和默認80端口與遠程服務器建立Socket連接,瀏覽器根據URL組裝一個GET類型的HTTP請求頭,通過outputStream.write發送到目標服務器,服務器等待inputStream.read返回數據,最後斷開連接。
1.3 HTTP協議解析
B/S網絡架構中核心是HTTP協議。
HTTP協議中最重要的是HTTP Header。HTTP Header控制著用戶瀏覽器渲染行為和服務器的執行邏輯。
1.3.2瀏覽器緩存機制
Ctrl+F5刷新頁面一定能夠請求沒有緩存的頁面。
Ctrl+F5刷新頁面,瀏覽器直接向目標URL發送請求,不使用瀏覽器緩存。
Ctrl+F5刷新頁面,HTTP請求頭增加一些請求頭,Pragma:no-cache
,Cache-Control:no-cache
。
Pragma
和Cache-Control
用於指定所有緩存機制在整個請求/響應鏈中必須服從的指令。
Expires:Sar,25 Feb 2012 12:22:17 GMT
瀏覽器請求前檢查這個字段,是否過期,過期重新向服務器發起請求。Last-Modified/Etag
。Last-Modified
表示一個服務器上的資源的最後修改時間。瀏覽器請求頭增加一個If-Modified—Since:Sar,25 Feb 2012 12:22:17 GMT
Etag
類似,讓服務器給每個頁面分配唯一的編號,通過編號區分是否最新,比Last-Modified
靈活,但多臺後端服務器不好處理。
1.4 DNS域名解析
- 瀏覽器檢查緩存是否有域名對應的IP。
- 瀏覽器查找操作系統是否有對應的DNS解析成果。
- 操作系統把域名發給LDNS,本地區的域名服務器。
- LDNS沒有,直接到Root Server域名服務器請求解析。LDNS承擔了主要的域名解析工作。
- 根域名服務器返回給本地域名服務器一個所查詢域的主域名服務器gTLD Server地址。gTLD國際頂級域名服務器,只有13臺左右。
- 本地域名服務器(Local DNS Server)向gTLD Server發送請求。
- 接受請求的gTLD Server查找返回此對應域名的Name Server域名服務器地址。你註冊的域名服務器,某臺服務商申請域名,域名解析交給域名服務器。
- Name Server域名服務器地址查詢域名和IP映射關系表,連同TTL值返回給DNS Server域名服務器。
- 返回該域名對應的IP和TTL值,Local DNS Server緩存這個域名和IP對應關系,緩存時間TTL值控制。
- 解析結果給用戶,用戶根據TTL值緩存到本地系統中,域名解析結束。
1.4.4 幾種域名解析方式
A記錄、MX記錄、CNAME記錄、NS記錄和TXT記錄。
- A記錄,Address,用來指定域名對應的IP地址。A記錄可以將多個域名解析到一個IP地址,不能將一個域名解析到多個IP地址。
- MX記錄,Mail Exchange,將某個域名下郵件服務器指向自己的Mail Server。DNS會將[email protected]請求發送在mail服務器地址,正常WEB請求仍然解析至A記錄的IP地址。
- CNAME記錄,Canonical Name(別名解析)。為一個域名設置一個或者多個別名。
- NS記錄,為某個域名指定DNS解析服務器,這個域名有指定的IP地址的DNS服務器去解析。
- TXT記錄,為某個主機名或域名設置說明。
1.5 CDN工作機制
內容分布網絡(Content Delivery Network)。CDN=鏡像mirror+緩存cache+整體負載均衡GSLB。
CDN一緩存網站中的靜態數據為主。加速網頁數據內容的下載速度。
目標
- 可擴展(Scalability)。性能可擴展。成本可擴展。
- 安全性(Security)。
- 可靠性、響應和執行(Reliability、Responsiveness和Performance)。
訪問靜態文件,先向Local DNS服務器發起請求,經過叠代到達域名註冊服務器解析,公司DNS把請求重新CNAME解析到另外的一個域名,這個域名指向CDN的DNS負載均衡服務器,由這個GTM分配用戶距離最近的CDN節點。如果這個CDN節點請求不存在,會再回原站獲取文件,返回給用戶。
1.5.2 負載均衡
Load Balance對工作任務進行平衡、分攤到多個操作單元上執行。
鏈路負載均衡、集群負載均衡、操作系統負載均衡。
- 鏈路負載均衡,DNS解析成不同的IP。
- 集群負載均衡。
- 硬件負載均衡
- 軟件負載均衡
- 操作系統負載均衡:操作系統級別的軟中斷和硬件中斷。
1.5.3 CDN動態加速
在CDN的DNS解析中通過動態的鏈路探測來尋找回溯最好的一條路徑,通過DNS的調度將所有請求調度到選定的路徑上回溯。
深入分析JavaWeb技術內幕》 第一章 深入Web請求過程