摘要:比如解析到了藍訊,回源的地址為解析到了藍訊,回源的地址為圖片資源是分布式存儲存儲在各個主機上,要確保上面兩個回源域名指向的服務以及服務器路徑是一樣的。
直播好久沒有曝光量了,自薦一波《PHP進階之路》(PHPer們,好久沒有投資自己了呢?)
本文原文地址:https://mengkang.net/641.html
原創一篇博客不容易,請勿隨意轉載
云時代,為了提升靜態資源的加載速度,大伙都是拼了。這促使近些年國內 CDN 的使用逐步普及。而作為一家以圖片分享社區為核心業務的公司,圖片 CDN 的使用比較多,下面梳理下自己的一些經驗。閉門造車,如有勘誤,大家多多包涵。
主要包括了以下內容:
CDN使用背景,圖片的分布式存儲
CDN 網絡原理概述
批量添加、切換 CDN 的步驟和注意事項
多 CDN 切換的步驟和注意事項
CDN 訪問故障分析
CDN使用背景,圖片的分布式存儲因為下文中的CDN的使用都是基于我們當前的圖片存儲,為了下文介紹不是那么突兀描述下當前圖片存儲的結構圖:
簡單畫了一張圖予以說明:
實際我們在第五步,回源的時候,我們會要求 CDN 服務商,不能所有節點直接回源到我們源站,協商要求他們使用統一代理回源我們源站,也就是說同一個資源只許他們回源一次。之后,其他邊緣節點沒有緩存,請求他們自身的代理。
也就是說他們的 CDN 是有多級緩存的。
批量添加 CDN 的步驟和注意事項業務需求:現在需要將某個域名(a.mengkang.net)下的圖片訪問的流量切換到 CDN 上。
操作步驟:
先對原域名下訪問日志做統計,統計出訪問頻次較高的圖片地址(比如20萬個地址),把這些地址交給cdn服務商。
讓他們先去預熱抓取這20萬個地址的資源。
預熱完畢后,我們再把(a.mengkang.net)的一部分域名換為(b.mengkang.net)。然后把b.mengkang.net做cname解析到cdn服務器給定的域名地址上去(比如b.mengkang.ccgslb.com.cn)。
通過wget測試是訪問域名b.mengkang.net下的圖片是否能夠被cdn緩存住。
cache測試沒有問題之后,我再把a.mengkang.net下的部分流量切到b.mengkang.net上去,同事運維的同事監控流量回源的情況,根據回源情況再對分配流量的大小做調整。
多 CDN 切換的步驟和注意事項 需求把網宿 maa 的 cdn 切 400M 到藍訊 mplus 上。
切換原理最初,我們配置了n (比如 n=100)個二級域名,然后把這 n 個域名中的一半解析到網宿,另一半解析到藍訊。比如:
a001.zhoumengkang.com 解析到了藍訊,回源的地址為y.a001.zhoumengkang.com;
a001.mengkang.net 解析到了藍訊,回源的地址為y.a001.mengkang.net;
圖片資源是分布式存儲存儲在各個主機上,要確保上面兩個回源域名指向的服務以及服務器路徑是一樣的。這樣,這兩個域名就可以相互切換了,但是切換的時候需要觀察回源的壓力。
這里說的“切”是從我們自身的業務代碼動刀,而不是切換和 cdn 的域名解析合作。圖片資源在數據庫有全局唯一的uuid,然后根據該uuid生成url,只需要在這里控制url的域名輸出即可。
執行步驟查看網宿 maa 下各個域名的流量請求帶寬。
查看網宿 maa 和藍訊 mplus 回源地址相同的對應域名。
統計該域名下的熱點資源地址,然后到即將切換的 cdn 服務商做預加載,否則客戶端加載時,即使回源帶寬不至于打滿,但是會出現請求時間過長,圖片無法顯示的情況。
修改業務代碼,減掉網宿 maa 的圖片地址的輸出,替換為藍訊 mplus 的域名。逐步替換,單域名下流量過大,還需要慢慢降權重轉移,而不是一次性,以防回源壓力過大,導致源站無法承受。
監控兩邊 cdn 帶寬,新 cdn 的緩存命中率,源站帶寬和服務器負載、I/O以及前端圖片服務器負載均衡服務器總帶寬(因為和錢直接相關,必須關注)。
注意事項
關注源站的負載和 I/O
# top top - 16:25:34 up 273 days, 8:54, 1 user, load average: 5.54, 5.34, 5.19 Tasks: 209 total, 1 running, 208 sleeping, 0 stopped, 0 zombie Cpu(s): 0.2%us, 0.4%sy, 0.0%ni, 47.9%id, 51.0%wa, 0.0%hi, 0.5%si, 0.0%st Mem: 32945488k total, 32851176k used, 94312k free, 7033172k buffers Swap: 12485164k total, 204k used, 12484960k free, 22568232k cached
cdn 切換之后,除了觀察新 cdn 的流量,還需要監控新 cdn 的緩存命中率,可以通過后期的回源比例來監控,也可以通過循環腳本執行wget來監測。
$ wget -S -O /dev/null f1.topitme.com/1/40/33/1110152459d0433401m.jpg --2015-12-29 11:11:01-- http://f1.topitme.com/1/40/33/1110152459d0433401m.jpg Resolving f1.topitme.com... 220.181.64.145 Connecting to f1.topitme.com|220.181.64.145|:80... connected. HTTP request sent, awaiting response... HTTP/1.1 200 OK Content-Type: image/jpeg Content-Length: 33061 Accept-Ranges: bytes Server: nginx Date: Mon, 30 Nov 2015 07:47:09 GMT Last-Modified: Mon, 08 Sep 2014 05:00:59 GMT Expires: Thu, 27 Nov 2025 07:47:09 GMT Cache-Control: max-age=315360000 Powered-By-ChinaCache: HIT from 010519g3H8.6 Age: 2489032 Powered-By-ChinaCache: HIT from 01001023P2.2 Switch:FSCS Length: 33061 (32K) [image/jpeg] Saving to: "/dev/null" /dev/null 100%[=====================>] 32.29K --.-KB/s in 0.09s 2015-12-29 11:11:02 (372 KB/s) - "/dev/null" saved [33061/33061]
這里出現了Powered-By-ChinaCache為HIT說明命中了,如果是MISS則沒有命中,該規則需要咨詢 cdn 運營商。
后記根據每個產品的屬性,每日流量肯定都有高峰和低谷期,我之前設置的自然回源,雖然在流量高峰期,設置的比例很小,但是基數很大,所以切過去的量比較大,應該選擇在流量比較少的時間,執行預加載,這樣保證了帶寬的使用率。
CND資源訪問故障的定位 案例一:圖片大面積無法加載現象:同一圖片地址,時而能打開,時而無法訪問。無法訪問時,多帶帶訪問圖片地址發現還跳轉到了一個游戲網站主頁。
聯系 CDN 客服,得到的反饋是運營商 DNS 劫持,他們的服務沒問題。(非常的消極怠工)
拿下面這張圖片作為例子 http://f4.topit.me/4/2d/d1/11...
首先我們確定我們源站資源是可訪問的,在 CDN 回源上不存在問題。
我們通過wget命令綁定域名host,假如源站ip為111.1.23.214,這樣則會繞過 CDN,直接訪問我們源站了。
wget -S -0 /dev/null --header="Host: f4:topit.me" http://111.1.23.214/4/2d/d1/1133196716aead12d4s.jpg
確認圖片是能正常訪問的。
然后通過wget -S打印詳細的 http 頭信息
wget -S http://f4.topit.me/4/2d/d1/1133196716aead12d4s.jpg
請求結果如下
# wget -S http://f4.topit.me/4/2d/d1/1133196716aead12d4s.jpg --2014-11-08 21:47:34-- http://f4.topit.me/4/2d/d1/1133196716aead12d4s.jpg Resolving f4.topit.me... 123.150.50.14, 123.150.50.13 Connecting to f4.topit.me|123.150.50.14|:80... connected. HTTP request sent, awaiting response... HTTP/1.1 302 Moved Temporarily Server: nginx/1.7.3 Date: Sat, 08 Nov 2014 13:45:31 GMT Content-Type: text/html; charset=iso-8859-1 Content-Length: 218 Location: http://www.aiaigame.com/index.html Cache-Control: max-age=300 Expires: Sat, 08 Nov 2014 13:50:31 GMT Powered-By-ChinaCache: MISS from CHN-SX-3-3gC.2 Age: 125 Powered-By-ChinaCache: HIT from CHN-TJ-7-3V2.6 Connection: close Location: http://www.aiaigame.com/index.html [following] --2014-11-08 21:47:36-- http://www.aiaigame.com/index.html Resolving www.aiaigame.com... 119.90.14.54, 119.90.14.59, 220.181.64.153, ... Connecting to www.aiaigame.com|119.90.14.54|:80... connected. HTTP request sent, awaiting response... HTTP/1.1 200 OK Date: Sat, 08 Nov 2014 13:42:50 GMT Server: Apache/2.2.10 (Unix) DAV/2 PHP/5.2.6 mod_ssl/2.2.10 OpenSSL/0.9.8e-fips-rhel5 Last-Modified: Fri, 07 Nov 2014 09:14:50 GMT ETag: "31a8087-132ee-507413eb6f680" Accept-Ranges: bytes Content-Length: 78574 Cache-Control: max-age=300 Expires: Sat, 08 Nov 2014 13:47:50 GMT Vary: Accept-Encoding,User-Agent Content-Type: text/html Powered-By-ChinaCache: HIT from 01011623g3.3 Age: 288 Powered-By-ChinaCache: HIT from 01001743SJ Connection: keep-alive Length: 78574 (77K) [text/html] Saving to: “index.html.4” 100%[=====================================================================================================================================================>] 78,574 --.-K/s in 0.005s 2014-11-08 21:47:38 (16.3 MB/s) - “index.html.4” saved [78574/78574]
通過該請求,我們可以清楚的看到,請求是先已經連接到了123.150.50.14:80然后發生的302跳轉,頭信息里清楚的寫到Powered-By-ChinaCache: HIT from CHN-TJ-7-3V2.6,也就是說是 CDN 自身的問題,而且下面的跳轉的網頁也是使用ChinaCache的客戶。
這樣問題得到了定位,CDN 那邊也無法再推脫,才著手處理。
案例二:訪問網頁時 css 里面的圖片都無法訪問訪問網頁時 css 里面的圖片都無法訪問,多帶帶打開圖片地址能訪問。使用 wget --referer 定位是防盜鏈錯誤設置
故障截圖(有點丑)
我把這個問題反饋給客服,給我的答復是他們沒有做任何限制,是我們源站的問題。那只能講證據了。
wget -S -O /dev/null --header="Host: img.topit.me" --referer="http://static.topitme.com/s/css/main21.css" http://211.155.84.132/img/bar/next.png
結果如下,說明源站是沒有設置權限的
wget -S -O /dev/null --header="Host: img.topit.me" --referer="http://static.topitme.com/s/css/main21.css" http://211.155.84.132/img/bar/next.png --2015-05-07 13:52:50-- http://211.155.84.132/img/bar/next.png Connecting to 211.155.84.132:80... connected. HTTP request sent, awaiting response... HTTP/1.1 200 OK Server: nginx Date: Thu, 07 May 2015 05:52:50 GMT Content-Type: image/png Content-Length: 3022 Connection: keep-alive Last-Modified: Wed, 04 Jan 2012 14:44:07 GMT Expires: Sun, 04 May 2025 05:52:50 GMT Cache-Control: max-age=315360000 Accept-Ranges: bytes Length: 3022 (3.0K) [image/png]
同時,綁定host的也采用另一種方式wget -e http_proxy
wget -SO /dev/null --referer="http://static.topitme.com/s/css/main21.css" http://img.topit.me/img/style/icon_heart.png -e http_proxy=211.155.84.137
wget -S -O /dev/null --referer="http://static.topitme.com/s/css/main21.css" http://img.topit.me/img/bar/next.png --2015-05-07 11:29:21-- http://img.topit.me/img/bar/next.png Resolving img.topit.me... 111.202.7.252, 125.39.78.164 Connecting to img.topit.me|111.202.7.252|:80... connected. HTTP request sent, awaiting response... HTTP/1.1 403 Forbidden Server: nginx Date: Thu, 07 May 2015 03:29:21 GMT Content-Type: text/html Content-Length: 162 Connection: keep-alive 2015-05-07 11:29:21 ERROR 403: Forbidden.
可以清晰的看到域名的解析過程,CDN DNS 通過預定義策略,返回到最優的 ip 111.202.7.252予以訪問。然后返回了403。只有我截圖對比了兩種情況,CDN 客服才主動著手處理這個問題。
永遠不要指望著客服來幫你解決問題,只有自己找到問題。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/10981.html
摘要:比如解析到了藍訊,回源的地址為解析到了藍訊,回源的地址為圖片資源是分布式存儲存儲在各個主機上,要確保上面兩個回源域名指向的服務以及服務器路徑是一樣的。 直播好久沒有曝光量了,自薦一波《PHP進階之路》(PHPer們,好久沒有投資自己了呢?)本文原文地址:https://mengkang.net/641.html原創一篇博客不容易,請勿隨意轉載 云時代,為了提升靜態資源的加載速度,大伙都...
摘要:缺陷管理工具缺陷管理工具是提交錯誤工具,是評價軟件質量以及軟件技術人員價值的工具之一。世界由許多數據組成,而軟件測試是為了滿足客戶的需求,但數據必須精準。系統在系統中,測試人員通常使用它來看日志,更好地定位,這也是提高技能的一個方面。 ...
摘要:說軟件測試有可能被替代或者被淘汰的人,他一定沒有正確了解軟件測試。軟件測試最主要的優勢是隨著經驗的增長,能夠發現更多軟件的問題,保證測試覆蓋率,但是工具本身并無想象力。 ...
摘要:線上服務的有效監控和數據收集,一直是后端服務離不開的話題。在這個大數據時代,有了數據卻不做事情,等同于浪費。而南京移動的用戶量較大,也說明南京地區應該增設服務點。 線上服務的有效監控和數據收集,一直是后端服務離不開的話題。直播作為一種經典的分布式系統,監控以及數據收集更是必不可少的工作。如何對海量的服務集群有效的監控和保活,又如何抓取集群中的碎片數據中來優化服務?網易云信音視頻研發工程...
摘要:線上服務的有效監控和數據收集,一直是后端服務離不開的話題。在這個大數據時代,有了數據卻不做事情,等同于浪費。而南京移動的用戶量較大,也說明南京地區應該增設服務點。 線上服務的有效監控和數據收集,一直是后端服務離不開的話題。直播作為一種經典的分布式系統,監控以及數據收集更是必不可少的工作。如何對海量的服務集群有效的監控和保活,又如何抓取集群中的碎片數據中來優化服務?網易云信音視頻研發工程...
閱讀 3241·2023-04-25 20:35
閱讀 3606·2019-08-30 15:54
閱讀 1982·2019-08-30 15:43
閱讀 2169·2019-08-29 15:14
閱讀 1880·2019-08-29 11:17
閱讀 3372·2019-08-26 13:36
閱讀 685·2019-08-26 10:15
閱讀 2816·2019-08-23 15:41