瀏覽器輸入url 後面做了什麼處理
大致流程
當用戶在瀏覽器輸入www.taobao.com這個url時,將會發生很多操作:
首先,它會請求DNS把這個域名解析成對應的IP地址然後,根據這個IP在網際網路上找到對應的伺服器,向伺服器發起一個get請求,由這個伺服器決定返回預設的資料資源給訪問的使用者在伺服器端可能還有很複雜的業務邏輯:伺服器可能有很多臺,到底指定哪臺伺服器來處理請求,這需要一個負載均衡裝置來平均分配所有使用者的請求;還有請求的資料是儲存在分散式快取裡還是一個靜態檔案中,或是資料庫裡;當資料返回瀏覽器時,瀏覽器解析資料發現還有一些靜態資源(如CSS、JS或者圖片)時,又會發起另外的HTTP請求,而這些請求很可能會在CDN上,那麼CDN伺服器又會處理這個使用者的請求大體上一個使用者請求會涉及這麼多的操作,每一個細節都會影響這個請求最終是否會成功。
HTTP 協議解析
B/S網路架構的核心是HTTP協議,掌握HTTP協議對一個從事網際網路工作的程式設計師來說非常重要。
要理解HTTP協議,最重要的就是熟悉HTTP協議中的HTTP Header, HTTP Header控制著網際網路成千上萬的使用者的資料的傳輸。最關鍵的是,它控制著使用者瀏覽器的渲染行為和伺服器的執行邏輯。例如,當伺服器沒有使用者請求的資料時會返回一個404狀態碼,告訴瀏覽器沒有要請求的資料,通常瀏覽器就會展示一個非常不願意看到的該頁面不存在的錯誤資訊。
DNS域名解析
如圖所示,當一個使用者在瀏覽器中輸入www.abc.com時,DNS解析將會有將近10個步驟,大致描述如下:
瀏覽器會檢查快取中有沒有這個域名對應的解析過的IP地址,如果快取中有,這個解析過程就結束。瀏覽器快取域名也是有限制的,不僅瀏覽器快取大小有限制,而且快取的時間也是有限制的,通常情況下為幾分鐘到幾個小時不等,域名被快取的時間限制可以通過TTL屬性來設定。這個快取時間太長或太短都不好,如果快取時間夠長,一旦域名被解析到的IP有變化,會導致被客戶端快取的域名無法解析到變化後的IP地址,以致該域名不能正常解析,這段時間內有可能會有一部分客戶無法訪問網站。如果設定時間太短,會導致使用者每次訪問網站都要重新解析一次域名。如果使用者的瀏覽器快取中沒有,瀏覽器會查詢作業系統快取中是否有域名對應的DNS解析結果。其實,作業系統也會有一個域名解析的過程,在Windows中可以通過C:\Windows\System32\drivers\etc\hosts檔案來設定,你可以將任何域名解析到任何能夠訪問的IP地址。如果你在這裡指定了一個域名對應的IP地址,那麼瀏覽器會首先使用這個IP地址。正是因為有這種本地DNS解析的規程,所以黑客就有可能通過修改你的域名解析來把特定的域名解析到它指定的IP地址上,導致這些域名被劫持。
前兩步在本機完成。如果本機中仍無法完成域名的解析,就會真正請求域名伺服器來解析這個域名了。
如何、怎麼知道域名伺服器呢?在網路配置中都會有“DNS伺服器地址”這一項,這個地址就用於解決前面所說的如果兩個過程無法解析時要怎麼辦,作業系統會把這個域名傳送給這類設定的LDNS,也就是本地區的域名伺服器。這個DNS通常都提供給你網際網路接入的一個DNS解析服務,例如你是在學習接入網際網路,那麼你的DNS伺服器肯定在你的學校。如果你是在一個小區接入網際網路的,那麼這個DNS就是提供給你接入網際網路的應用提供商,即電信或聯通,也就是通常所說的SPA,那麼這個DNS通常也會在你所在城市的某個角落,通常不會很遠。LDNS主要承擔了域名的解析工作。如果LDNS仍然沒有命中,就直接到Root Server域名伺服器請求解析根域名伺服器返回給本地域名伺服器一個所查詢域的主域名伺服器(gTLD Server)地址。gTLD是國際頂級域名伺服器,如.com、.cn、.org等,全球只有13臺左右本地域名伺服器(Local DNS Server)再向上一步返回的gTLD伺服器傳送請求接受請求的gTLD伺服器查詢並返回此域名對應的Name Server域名伺服器的地址,這個Name Server通常就是你註冊的域名伺服器,例如你在某個域名服務提供商申請的域名,那麼這個域名解析任務就是由這個域名提供商的伺服器來完成的Name Server域名伺服器會查詢儲存的域名和IP的對映關係表,正常情況下都會根據域名得到目標IP記錄,連同一個TTL值返回給DNS Server域名伺服器返回該域名對應的IP和TTL值,Local DNS Server會快取這個域名和IP的對應關係,快取時間由TTL值控制把解析的結果返回給使用者,使用者根據TTL值快取在本地系統快取中,域名解析過程結束
在實際的DNS解析過程中,可能還不止這10個步驟,如Name Server也可能有多級,或者有一個GTM來負載均衡控制,這都有可能會影響域名解析的過程。
CDN工作機制
CDN也就是內容分發網路(Content Delivery Network),它是構築在現有Internet上的一種先進的流量分配網路。其目的是通過在現有的Internet中增加一層新的網路架構,將網站的內容釋出到最接近使用者的網路“邊緣”,使使用者可以就近取得所需的內容,提高使用者訪問網站的響應速度。有別於映象,它比映象更智慧,可以這樣一個比喻:CDN = 映象(Mirror) + 快取(Cache) + 整體負載均衡(GSLB)。因而,CDN可以明顯提高Internet中資訊流動的效率。
目前CDN都以快取網站中的靜態資料為主,如CSS、JS、圖片和靜態頁面等資料。使用者從主站伺服器請求到動態內容後再從CDN上下載這些靜態資料,從而加速網頁資料內容的下載速度,如淘寶有90%以上的資料都是由CDN來提供的。
CDN 架構
通常的CDN架構如下圖所示:
如圖,一個使用者訪問某個靜態檔案(如CSS檔案),這個靜態檔案的域名假定是cdn.taobao.com,那麼首先要向Local DNS伺服器發起請求,一般經過迭代器解析後回到這個域名的註冊伺服器去解析,一般每個公司都會有一個DNS解析伺服器。這時這個DNS解析伺服器通常會把它重新CNAME解析到另一個域名,而這個域名最終會執行CDN全域性中的DNS負載均衡伺服器,再由這個GTM來最終分配時哪個地方的訪問使用者,返回給離這個訪問使用者最近的CDN節點。
拿到DNS解析結果後,使用者就直接去這個CDN節點訪問這個靜態檔案了,如果這個節點中所請求的檔案不存在,就會回到源站與獲取這個檔案,然後再返給使用者。
負載均衡
負載均衡(Load Balance)就是對工作任務進行平衡、分攤到多個操作單元上執行,如圖片伺服器、應用伺服器等,共同完成工作任務。它可以提高伺服器響應速度及利用效率,避免軟體或硬體模組出現單點失效,解決網路擁塞問題,實現地理位置無關性,為使用者提供較一致的訪問質量。
通常由三種負載均衡架構,分別是鏈路負載均衡、叢集負載均衡和作業系統負載均衡
鏈路負載均衡
所謂鏈路負載均衡也就是通過DNS解析成不同的IP,然後使用者根據這個IP來訪問不同的目標伺服器。負載均衡是由DNS的解析來完成的,使用者最終訪問哪個Web Server是由DNS Server來控制的,在這裡就是由Global DNS Server來動態解析域名服務。這種DNS解析的優點是使用者會直接訪問目標伺服器,而不需要經過其他的代理伺服器,通常訪問速度會更快。但是也有缺點,由於DNS在使用者本地和Local DNS Server都有快取,一旦某臺Web Server掛掉,那麼很難及時更新使用者的域名解析結構。如果使用者的域名沒有及時更新,那麼使用者將無法訪問這個域名,帶來的後果非常嚴重。
叢集負載均衡
叢集負載均衡是另外一種常見的負載均衡方式,它一般分為硬體負載均衡和軟體負載均衡。
硬體負載均衡一般使用一臺專門硬體裝置來轉發請求,如圖所示,硬體負載均衡的關鍵就是這臺價格非常昂貴的裝置,如F5,通常為了安全需要一主一備。它的優點很顯然就是效能非常好,缺點就是非常貴,一般公司是用不起的,還有就是當訪問量陡然增大超出服務極限時,不能進行動態擴容。
軟體負載均衡是使用最普遍的一種負載方式,它的特點是使用成本非常低,直接使用廉價的PC就可以搭建。缺點就是一般一次訪問請求要經過多次代理伺服器,會增加網路延時。
作業系統負載均衡
利用作業系統級別的軟中斷或者硬體中斷來達到負載均衡,如可以設定多佇列網絡卡等來實現。
這幾種負載均衡方式不僅在CDN的叢集中能使用,而且在Web服務或者分散式資料叢集中同樣也能使用,但是在這些地方後兩種使用得要多一點。
轉載:https://baijiahao.baidu.com/s?id=1568636897968832&wfr=spider&for=pc