很多人可能不了解cdn,認為自己沒用過cdn,其實不然,我們已經在用了。先舉個栗子,大家有沒有想過為什么雙十一的時候這么多人搶購,流量超級大,為什么很少出現網頁加載不出來,也沒見過淘寶服務器奔潰呢?
正常情況下肯定會奔潰的,你想想,上億人同時向一臺服務器發起請求,服務器還不得冒煙啊?
實際上cdn就在里面發揮著功不可沒的功勞。拋開技術方面的優化,假設淘寶只有一臺服務器A在運行,從原則上來說我們是應該從這臺A服務器下載資源的(html、js、css等),可是淘寶會把這些靜態資源分發到全國各個地方的網絡節點上(可以理解成每一個城市部署一個機房),我們訪問的時候實際是從離我們最近的那臺服務器B下載的資源,這就是cdn。
1、什么是cdn
cdn顧名思義是一個英文縮寫,全稱是content delivery network(內容分發網絡),即服務商通過在世界各地部署大量服務器節點,緩存源站靜態資源(目標服務器),當用戶訪問時返回最優線路的資源,提高網頁響應速度,給用戶帶來更好的體驗。
eg:阿里云服務商在全國部署了大量的服務器,某公司覺得自己的服務器帶寬不夠大,希望在阿里云的這些服務器上分擔壓力,所以阿里云服務商會從該公司的網站中拉取靜態資源(源站資源),然后在自己的各個服務器上添加該資源的緩存,最后返回一個url地址給該公司,該公司只需要把之前的資源地址(js、css、html、img等)替換成這個url就可以了;當用戶訪問時,實際上走的請求是阿里云的服務器,然后阿里云返回一個最快的資源給你(如你在廣州就返回廣州服務器的資源,而不是北京服務器的資源)
cdn的核心技術在于智能dns與內容存儲,用戶訪問時根據所在線路與位置,就近選擇最快的服務器節點,然后從緩存中取出相應內容,避免了直接從源站拉取資源、減低了網絡阻塞。
下面我們先說一下cdn的三大組成部分
1.1、squid 代理web緩存服務器
前面我們也說到,服務商會返回一個url給源站,如https://aliyun.cdn.com/xxx/main.js,那么我們就不難想到它其實就是一個web服務器提供(像我們的iis、tomcat、nginx等),cdn下使用的web服務器大多是squid,下面說一下squid以及nginx在linux下的安裝:
1、yum? install? squid? ?-g //安裝squid
2、vim /etc/squid/squid.conf //配置端口代理
1、yum? install? nginx? -g? //安裝nginx
2、vim /etc/nginx/nginx.conf? //配置端口代理
所以squid就是一個web代理服務器,只不過它在緩存服務方面比較出色。
1.2、計算機集群
從執行性能上來說,個人PC? <? 服務器? <??計算機集群,那么什么是計算機集群呢?其實從定義上來說,計算機集群是通過松散集成的計算機軟件或硬件連接起來的完成計算工作的計算機系統,通俗來理解就是把很多服務器組合起來,共同完成某一項任務,這樣工作效率自然會大于一臺電腦。
作為cdn服務的提供商(服務商),他們會在各個城市部署很多的服務器,從而組成一張龐大的計算機集群網,使得各個地方的用戶附近都至少有一臺可訪問的服務器。
1.3、智能dns
說到智能dns,那么我得說一下“不智能的”dns。dns,全稱domain name system,域名系統,萬維網上的每一個設備(pc、手機等)都有一個屬于自己的ip地址,也可以當做設備的身份證,然而這個ip地址太過長了,不便于記憶,所以就用域名來作為ip的別名,如百度的域名是baidu.com,當用戶輸入百度域名并回車后,通過dns系統獲取到真實ip地址14.215.177.39。
dns解析流程:瀏覽器host? ?》? ?系統host? ?》? ?運營商解析? ?》? ?根域解析
我們普通的dns往往慢就慢在跨線路和跨國際,能不能根據用戶所在地址,返回合適的ip地址呢,這就產生了智能dns。
智能dns位于cdn服務器層,它根據用戶來源的線路以及所在的位置,根據當前網絡負載情況,選取出距離最近的同線路服務器,并放回該服務器的ip地址(cdn計算器集群的每一臺服務器都具備相同的功能與內容,因而返回不同的ip,處理的結果都是一樣的)。
2、cdn產生背景
對于大部分的中小型企業,服務器性能不會很好,帶寬也不會很大,一旦遇到訪問量“井噴”的情況就會奔潰了,比如雙十一、12306春運期間甚至是一些學校的選課系統,那么解決措施往往就是出錢出力升級配置了。
其次由于我國國土遼闊,存在著不少的網絡運營商,如巨頭電信聯通,這也就導致了不同運營商(線路間)互聯不互通,如廣州電信用戶訪問北京聯通機房的服務器速度慢。
這時候cdn就應運而生了,它依靠著強大的服務器集群能力為各網站提供緩存加速服務。
3、cdn加速原理
cdn之所以快靠的是多節點、多線路、用緩存;
多節點,也就是多服務器,這樣讓用戶沒必要直接向源站請求資源,而是向最近的服務器請求就行了;
多線路,避免了跨線路互聯不互通的尷尬;
用緩存,這個前面沒有怎么提,cdn服務器會從源站拉取資源并緩存到內存中,當用戶訪問的時候直接從內存中取出來,這樣就比從硬盤中去出來快了不少;其次cdn服務器知道源站資源發生變化后,會通知其它服務器同時更新資源。
4、cdn的優勢
智能dns讓用戶可以訪問同線路最近的服務器
cdn的緩存機制可以加快訪問速度,也可以緩解源站服務器壓力(因為根本不會去訪問源站)
cdn讓大規模的用戶請求架構變得簡單
cdn性價比高,同帶寬需求下cdn服務比增加帶寬劃算
5、cdn適用范圍
靜態和更新頻率低的內容
數據流量大的產品
帶寬需求大的產品
有錢的主...
其實cdn服務商有不少,如阿里云cdn、騰訊云cdn、百度云cdn、網易云cdn、360cdn等等