NO IMAGE

   辭職在家,理理東西,理什麼了,就cdn吧

 

 

      對於CDN,漢語為內容分發網路,即Content Distribute Network,其用途為將資源內容,.從伺服器傳遞到使用者端,認識之前,應該要先說說網際網路了吧,網際網路我的理解是以tcp/ip為基礎的狹義網路和由www構成的全球資訊網構成,tcp/ip 用於計算機之間的互聯,用於將各種資訊以極低的成本進行傳遞,也就是自來水中的管道了,而以www組成的全球資訊網,應該就是我們日常生活中,所見到的b/s了,也就是應用層http了,而http和tcp的差別在於,http是建立在tcp之上,是應用互動協議,http好比孩子,而tcp好比父親,像後面的多媒體分發網路,其協議也是基於tcp/ip

      而在傳統的bs應用中,我所知道的哈,會經歷以下幾個瓶頸

1. 伺服器的寬頻,寬頻決定了該伺服器的 訪問速度和併發訪問量,使用者越多,出口頻寬要求就越大,如果不夠,將會導致效能瓶頸

2. 伺服器本身的處理能力,在以前,能充分利用多核,個人覺得是件不簡單的事情,現在也覺得也是件不簡單的事情,怎麼說呢,我所遇到的和見到的,主程根據業務設計時,鎖很頻繁,各個環節之間,扣得很厲害,對於常駐式執行緒池,多執行緒爭取同一份資源時,會有等待,也就導致了,該執行緒處於阻塞中,如果其他與該資源無關的任務到達,是不能及時處理了,這也就導致了延遲,而這個延遲在很大程度上是由設計者決定的.有時候在想,如果通過一個任務到來,一個就開啟一個執行緒處理這樣能力用多核,但是執行緒的開啟並非想象中的那麼輕量,有時候在想,如果在開始時,一次向開啟兩千或者更多的執行緒組成常駐式執行緒池,進行處理任務,可以在一定程度上避免上面的問題,但是還是有機率出現(思考中,好像不能避免上面的狀況),而且執行緒越多,cpu排程壓力就越大,在很大程度上,也是損失了效能,而在綜合考慮下,駐留式處理池是最好的,意思是任務到來,會先去駐留式池子中看看,有沒有還沒退出的執行緒,如果有,則通過制定的queue 釋出任務,然後處理,如果沒有則新開啟,也是上面這個原因,所以我選擇了協程,作為任務處理器單元,因為協程的開啟很輕量,但不是越多越好,因為協程越多,排程的壓力就越大,所造成的延遲也就上來了,因此這也是我為什麼決定去做go的原因,也是通過了前面的思想,實現了駐留式的協程池

3. 使用者的接入寬頻.

4. 如果是微服務,還得看看要經歷哪些結點,經歷的結點越多也就越慢了

  理解的CDN工作過程,從承載的內容來看,主要有靜態網頁,動態網頁,下載型檔案和應用協議, CDN會極大地簡化網站的維護工作,只需要將內容通過指定的工具注入到CDN系統,CDN系統會自然的將內容和部署到各個物理位置的伺服器進行全網分發,而至於其分發策略,我實現的是Kademlia協議  

      

      傳統的bs應用中,使用者通過瀏覽器傳送請求到伺服器,伺服器根據相應的指定做出相應的反映,其過程,我所知道的哈,應該是這樣

1. 用於輸入網站域名,按下 enter

2. 瀏覽器首先向本地DNS伺服器請求對該域名的解析,其實就是看看host檔案中有沒有指定的域名,如果有就直接對該地址建立連線發起請求,當然也有快取的,如果快取中找得到,就忽略了上面的步驟了

3. 如果本地DNS沒有找到該域名,則會向指定的在全網中去查詢這個域名

4. 如果找到會返回相應的IP

5. 得到IP後,瀏覽器向伺服器發起請求

6. 伺服器將處理結果返回給瀏覽器

 

而加入CDN後,其實對於使用者而言,我覺得沒什麼區別,最簡單的CDN網路有一個DNS伺服器和幾臺快取伺服器就可以了,其流程,我理解的是這樣的

 

1. 當瀏覽器請求一個URL資源內容的時候,首先,會由網站的DNS來進行域名解析,該DNS伺服器中會有一條CNAME記錄,意思是將域名解析交給CDN DNS總伺服器

2. CDN的DNS伺服器將全域性CDN負載均衡裝置的IP作為域名解析的結果返回給瀏覽器

3. 當拿到全域性負載裝置IP後,使用者向該IP傳送URL請求

4. 全域性伺服器收到請求後,根據IP算距離,選擇距離最小的一臺伺服器為使用者服務,且將這個最短距離的內容伺服器的IP返回給用於

5. 使用者向這個有服務能力,且距離最短的 發起內容請求

 

總上所述,使用CDN服務的網站,只需要將域名解析權交給CDN,將所需的內容釋出到所有的CDN內容伺服器上,就可以實現內容加速了,綜合說法就是,選擇最優裝置為使用者提供服務,如果某個內容被很多使用者所需要,它被快取到距離使用者最近的結點中