<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] # 什么是CDN 內容分發網絡(Content delivery network或Content distribution network,縮寫:CDN)是指一種通過互聯網互相連接的電腦網絡系統,利用最靠近每位用戶的服務器,更快、更可靠地將音樂、圖片、視頻、應用程序及其他文件發送給用戶,來提供高性能、可擴展性及低成本的網絡內容傳遞給用戶。 <br> ![](https://img.kancloud.cn/0e/56/0e569771298ee1f6e9e654ee0ed029fd_1200x515.png) 用戶網絡可以訪問到離自己最近的服務器,不僅是物理距離上的近,也是中間跨越路由方面的近。 <br> <br> # 為什么需要CDN 根本上的原因是,訪問速度對互聯網應用的用戶體驗、口碑、甚至說直接的營收都有巨大的影響,任何的企業都渴望自己站點有更快的訪問速度。而HTTP傳輸時延對web的訪問速度的影響很大,在絕大多數情況下是起決定性作用的,這是由TCP/IP協議的一些特點決定的。物理層上的原因是光速有限、信道有限,協議上的原因有丟包、慢啟動、擁塞控制等。 <br> 要提高訪問速度,最簡單的做法當然就是多設置幾個服務器,讓終端用戶離服務器“更近”。典型的例子是各類下載網站在不同地域不同運營商設置鏡像站,或者是像Google那樣設置多個數據中心。但是多設幾個服務器的問題也不少,一是多地部署時的困難,二是一致性沒法保障,三則是管理困難、成本很高。實際上,在排除多地容災等特殊需求的情況下,對大多數公司這種做法是不太可取的。當然,這種方案真正做好了,甚至是比后續所說的使用CDN要好的。 <br> CDN是一種公共服務,他本身有很多臺位于不同地域、接入不同運營商的服務器,而所謂的使用CDN實質上就是讓CDN作為網站的門面,用戶訪問到的是CDN服務器,而不是直接訪問到網站。由于CDN內部對TCP的優化、對靜態資源的緩存、預取,加上用戶訪問CDN時,會被智能地分配到最近的節點,降低大量延遲,讓訪問速度可以得到很大提升。 <br> <br> # CDN的原理 > CDN做了兩件事,一是讓用戶訪問最近的節點,二是從緩存或者源站獲取資源 CDN有個源站的概念,源站就是提供內容的站點(網站的真實服務器), 從源站取內容的過程叫做回源。 每次訪問的具體流程如圖(以最普通的CDN為例) ![](https://box.kancloud.cn/64e2e0fcc08c942d3612b1658ac81a65_539x490.png) <br> 具體舉個例子: <br> 用戶在首次訪問 `https://assets-cdn.github.com/pinned-octocat.svg` , 假設不委托local DNS服務器遞歸查詢,會經歷以下幾個過程 1. 瀏覽器檢查本地有沒有這個東東的有效緩存,有則使用緩存,沒有有效緩存則進行對`assets-cdn.github.com`的DNS查詢,獲得一個 CNAME記錄,`igithub.map.fastly.net`,值得注意的是,多個加速域名可以解析到同一個CNAME,CDN回源和緩存的時候考慮到了hostname,??; 2. 進行對`github.map.fastly.net`的DNS查詢,獲得一個A/AAAA記錄,給出地址`103.245.222.133`(視網站不同返回的不一樣,可以有多個), 這一步對CDN來說時十分重要的,它給出了離用戶最近的邊緣節點; 3. 瀏覽器選一個返回的地址,然后進行真正的http請求,開始向`103.245.222.133`握手,握手完了把http請求頭也發給了該邊緣服務器; 4. 邊緣服務器檢查自己的cache里面有沒有`https://assets-cdn.github.com/pinned-octocat.svg`這個資源,有則返回給用戶,如果沒有,向CDN中心服務器發起請求; 5. CDN中心服務器檢查自己的cache里面有沒有這個資源,有則返回給邊緣服務器,沒有則回源; 6. 中心服務器發現客戶配置了`github.map.fastly.net`的回源地址(這個只有cdn會知道,假設是`xxx.xxx.xxx.xxx`),就把http請求發到源站地址上,源站返回后返回給請求方; <br> 可以看出CDN加速的原理很大部分是跟DNS掛鉤在一起的,CDN供應商幾乎一定需要一個智能DNS服務器。CDN可以拿到所有的明文數據,所以對數據安全性、保密性要求比較高的企業會選擇自建CDN或者設置NS記錄,指向自建的智能DNS服務器。 <br> 上述步驟每一步都可以緩存,注意是每一步! 所以CDN要清除緩存很難,因為有很多服務器上的緩存要清除。無論是用戶對邊緣服務器的請求,還是CDN服務器的回源都可以使用https。 <br> 注意,實際環境中圖中每個服務器都可以是集群,甚至CDN分區域中心和總中心。 # 參考資料 [面向前端的CDN原理介紹](https://github.com/renaesop/blog/issues/1)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看