當咱們在瀏覽器中輸入"www.google.com"的時候,首先會請求DNS服務器對域名進行解析成都應的IP地址,而後根據這個IP地址在互聯網上找到谷歌的服務器,向這個服務器發送一個"get"請求,有這個服務器決定返回數據資源給請求的用戶(在服務器端可能還會存在其餘複雜的業務邏輯,服務器端有不少機器的話,須要考慮負載均衡,由哪一臺服務器對資源進行回覆,請求的文件是存儲在靜態文件中仍是存儲在分佈式緩存中或者是數據庫中,當數據返回服務器時,會發現該請求包含有一些靜態資源(CSS文件、JS文件、圖片文件)等又會發起HTTP請求,而這些請求又極可能是在CDN上,那麼CDN又會處理這些請求。web
全部的請求都是經過URL(統一資源定位符)來進行定位的。數據庫
一般咱們的請求是藉助瀏覽器發送的,實際上咱們能夠本身模擬HTTP的請求。創建HTTP請求的過程實際上就是創建socket連接的過程,瀏覽器
(1) connect -> 根據域名地址和HTTP默認的80端口創建socket連接;緩存
(2) send -> 客戶端發送符合HTTP協議格式的數據(outputStream.write);服務器
(3) receive -> 服務器等待inputStream.read返回數據網絡
(4) close -> 客戶端和服務器斷開鏈接架構
知道了以上的過程,咱們就能夠很輕鬆的模擬瀏覽器發出一個HTTP協議,這方面的工具包有不少,例如HttpClient就是一個封裝好的工具包,下面是利用該包進行調用的一個實例負載均衡
固然,咱們還能夠利用Linux下的curl + url 來模擬一個請求curl
HTTP協議的重要性再也不重述,下面是HTTP協議的各個部分:socket
瀏覽器緩存機制是一個比較重要的機制,當咱們訪問一些靜態文件,好比JS文件,CSS文件,圖片文件時經過緩存,能夠減小和服務器鏈接的次數,提升瀏覽的速度。
在瀏覽器端,按 ctrl +F5的組合鍵會要求瀏覽器直接向目標服務器發送請求,而不會使用瀏覽器緩存中的數據,其次,即便請求到服務器,咱們得到的也有多是服務器緩存的數據,爲了得到最新的數據,必須經過HTTP協議來進行控制,方法就是在瀏覽器請求頭中添加 Pragme:no-cache 和 Cache-Control:no-cache
HTTP head中有一些字段,能夠控制瀏覽器請求的數據是否緩存的或者是最新的。
DNS域名解析的過程大體能夠分爲10個步驟:
當咱們在瀏覽器輸入"www.google.com」並按下 enter時,大體過程爲:
(1)瀏覽器檢查緩存中有沒有www.google.com解析過的IP地址,若是緩存中有這個數據,解析過程就會中止。須要注意的是瀏覽器緩存的大小和時間都是有限制的,一般爲幾分鐘到幾小時。瀏覽器被緩存的時間能夠經過TTL屬性來設置。若是被設置的時間太長,一旦瀏覽器解析的域名的IP地址有變,就會訪問不到,若是過短,則每次都須要訪問域名服務器。
(2)一旦本地的瀏覽器緩存中沒有數據,則瀏覽器會到操做系統下的hosts文件中檢查是否有該域名的解析。
(3)若是本地沒有的話,就須要請求本地域名服務器了,怎樣才能知道域名服務器的地址呢(網絡配置),
(4)若是本地仍沒有的話,就須要請求根域名服務器,全球只有13臺左右。
..........
經過nslookup指令能夠查看域名的解析過程,經過ipconfig/flushdns能夠將緩存在本地的DNS清除
CDN成爲內容分佈網絡(Content-delivery-Network),它是構建在Internent上的先進的流量分配網絡。其目的是經過在現有的Internet上增長一層新的網絡架構,將網站的內容發佈到最接近用戶的網絡邊緣,使得用戶能夠就近得到多須要的資源,能夠說,CDN = 鏡像(mirror) + 緩存(cache) + 負載均衡(GSLB)。目前,CDN都是以緩存網站中的靜態數據爲主;用戶從主站服務器上下載動態內容後再到CDN上下載靜態文件
1、CDN架構:
CDN 的實現要考慮負載均衡,而負載均衡的又包括DNS解析負載均衡,集羣的負載均衡以及操做系統的負載均衡,內容比較多......
關鍵字: CDN、負載均衡、瀏覽器緩存
參考: 《深刻分析Java web技術內幕》