1. 程式人生 > >請求一個域名ip的緩存用處

請求一個域名ip的緩存用處

設備 內部 數據傳輸 web服務 開始 服務器 internet 相關 路線

前言

摘錄自操作系統,這一段的內容很有啟發,稍微加上自己的理解,寫一篇博客記錄一下。

緩存

緩存成功解決了速度不匹配設備之間的數據傳輸,並且在一般情況下,是整個系統的瓶頸;緩存的出現,有效減少了低速IO設備的訪問頻率,從而大幅度提升了速度。比如在處理高並發的場景,常規的mysql根本不夠,上萬的請求數據庫就已經崩了;但往往高並發場景是讀多寫少,所以可以利用緩存,完全可以在數據庫和緩存裏都寫一份,讀的時候大量走緩存就行了。數據庫redis 輕輕松松單機幾萬的並發,就是用了從緩存中存儲數據、讀寫數據的。

瀏覽器請求一個域名ip的緩存用處

(1)瀏覽器內部都有dns客戶端,首先查詢本地dns緩存中是否有該域名的ip,如果有就直接去訪問該ip。如果沒有,該dns客戶端首先查找自己主機所設置的dns服務器,然後去該dns服務器去查詢是否有該域名的ip。

(2)如果該dns服務器本地緩存中有該域名的A記錄(域名與ip地址的對應記錄),則直接返回給瀏覽器中的dns客戶端。若沒有該域名的A記錄,就通過遞歸的方式向上詢問其他dns服務器,直到遇到A記錄,此時這條遞歸路線上的所有被詢問過的dns服務器,都會將此域名對應的A記錄緩存到自己的cache中,以備下次有相同域名查詢時直接返回。這一點很像路由算法裏的LS算法,查詢的路由器的信息返回後都會被記錄。
(3)瀏覽器中的dns客戶端得到此域名的ip地址後,也將此域名和ip放在自己的緩存中,以備下次用戶再鍵入同一域名時,避免再查一次ip。
(4)瀏覽器開始通過網絡用http協議訪問該ip地址的80端口
(5)一般情況下該ip對應的設備不是最終的Web服務器,因為很少有人會把Web服務器直接暴露在公網,假設該ip對應的設備是臺網關(一般是硬件路由設備),該網關檢查本地緩存中是否有相關Web服務器的緩存,若有則直接將該http請求分配給緩存中的Web服務器。否則從服務器列表中重新分配一臺Web服務器,將該http請求轉發給該Web服務器處理。隨後將該Web服務器的IP地址(內網地址)和端口號緩存起來,以備下次該用戶的請求到來時,依然給Web服務器。有的網關可以識別用戶cookie信息,從而可以將該請求再次落到 上一個請求的Web服務器上。
(6)Web服務器拿到請求後,如果是靜態請求,先檢查自己的緩存中是否有該頁面的記錄,若沒有則直接從硬盤中取出頁面,將其返回後存入本地靜態緩存中。如果為動態請求,則先交給自己的cgi去處理。
(7)cgi拿到請求後,先檢查自己的換粗系統,如memcache,如果緩存中沒有,則與數據庫建立鏈接,向數據庫發出請求
(8)數據庫也是先檢查自己的緩存,若沒有結果集,則從表中檢索到數據後返回,並將結果集緩存起來
(9)cgi拿到數據後,返回給web服務器,並將數據緩存到memcache中
(10)web服務器拿到數據後,將數據返回給網關。由於是動態數據,不需要緩存。
(11)網關拿到數據後,直接返回給瀏覽器
(12)如果瀏覽器發現數據信息中含有靜態數據,則將靜態數據緩存到用戶的internet臨時目錄中。
靜態數據如圖片等信息,動態數據一般如ajax的數據或者js返回的json數據等數據。

請求一個域名ip的緩存用處