uncategorized

建立中國Azure的CDN之心得

建立Azure CDN其實並不難,但是建立中國Azure的CDN真的有一點麻煩。首先我們必須先瞭解中國的Azure CDN跟我們一般建立Azure CDN的差異點在那邊,在中國因為政策因素,所以,基本上他們的CDN是屬於“雜亂型的”,雜亂的定義就是,我認為他並非像一般Azure的CDN是由Microsoft去建置的CDN。在中國的Azure CDN是:“整合國內主流 CDN,又分多業務場景加速”方式進行,因此,在中國的Azure CDN是 “整合國內多家主流 CDN 服務,提供全面的靜態網頁加速,軟體安裝包、遊戲客戶端、應用程序、影音等大文件的下載分發,以及線上視訊網站、線上教育網站等以流媒體為主的視訊點播和直播等多種業務類型加速,滿足不同類型資源的分發需求;提供包含聯通、移動、電信等主流電信運營商,以及其他 ISP 運營商,全地區的全網覆蓋,根據網路實時狀況,通過負載均衡技術和智慧排程策略,將使用者請求分配到最優節點。”

換句話說就是去跟原本就有的CDN服務業者做整合性的搭配,大陸搭配的CDN業者主要是 <北京藍汛通信技術有限責任公司 http://cn.chinacache.com> ,雖然,官方說明業者的SLA是沒問題,但是,有時還是會遇到出問題地方,但是這部分就很難去查驗了,目前,最常遇到就是發生某些檔案有時候會發生http 400錯誤,但是,重新整理幾次就好了,再者,大陸的ISP業者相當複雜,若是剛好你的用戶的ISP業者對於CDN節點頻寬不好,基本上也會是有問題的,中國的CDN POP分佈

一開始以為這多場景意義不大,其實,每個場景都有它隱含的一些規則和缓存的機制在,若是你沒搞清楚這含義,就很可能造成你的CDN緩存異常,然後就必須砍掉CDN重建,以為重建CDN很快?不,設定完成很快,但是你還要等你的ICP證號被確認是沒有錯的,才算建立成功,這部分等待時間可以從幾小時到一天都是有的

-Web加速
這邊主要是網站相關的檔案,例如css,js,html 或是圖片檔案這些,基本上這些檔案不要超過20MB,換句話說主要適合網頁的一些靜態檔案

-下載加速
當時看到這選項,以為是可以讓自己檔案下載非常快速意思,但是不是,這主要是針對大型檔案,就是大於20MB的檔案做CDN,沒記錯如果檔案太小,似乎就無法起作用,這部分大都運用在安裝檔或是驅動程式之類的

-VOD加速
VOD視訊點播加速服務主要針對線上音視訊點播提供加速服務

-即時資料流加速
流媒體直播加速服務主要針對線上視音訊播提供加速服務,搞定好這些加速類型之後,就是設定原始網域類型

開始設定


基本可以從Web到媒體服務都可以

這邊設定並不困難,這邊的自訂網域一定要設定,不然無法完成,你可以先把自訂網域設定和ICP號碼設定好,就開始去建立CDN,建立完畢後,基本上就是等待了

驗證完畢後,就會提供一個CDN結點給你,基本上命名是xxxxx.yourdomainname.mschcdn.com,只要把這CDN端點到DNS設定CNAME就可以對應。如果以為這樣就表示完成,其實還沒有,必須再去所謂的CDN高級選項內去設定一些屬性

點下管理,就會出現CDN的管理介面

在這管理介面中,可以了解你目前CDN的缓存狀況,還有他跟源頭要了多少的資料過去,這除了$$外,也考慮到相對應的網路頻寬所造成的使用者體驗的等待時間。一般來說CDN,當你源頭檔案有做修改時候,但是,你在程式沒有做版本號的變更,基本上不會馬上抓到更新過的檔案,因為檔案還在源頭並未傳遞到CDN,這時候你可以透過這管理介面中的缓存刷新直接把檔案發佈到CDN,不過,這邊在使用上有一點小小問題就是,因為檔案要被散佈到各個CDN結點,所以,並不是每個節點被更新時間是即時同步,還是會有一點時間差,如果你是用缓存更新中的整個目錄更新,那等待時間可能就更長一點點

其中最重要的就是要到這邊去做設定一下,如果你的檔案都是Public基本比較重要設定就是『配置缓存規則』這邊的設定會影響到你CDN效能

這邊缓存的定義在於,當使用者透過CDN抓取檔案時候,檔案不在CDN節點時,會再回源頭去抓取檔案,把檔案放到CDN結點做缓存,如果時間到,舉例當檔案在CDN節點超過缓存的7天之後,沒有用戶再去取這個檔案,這個檔案就會在CDN上消失,除非下次有使用者再去抓取這個檔案,因此,這時間得設置就很重要,畢竟,當輸入與輸出的頻率高。這會導致更高的儲存和資料傳輸費用,因為需要的原始請求更多。為了降低發出原始請求的需求,允許 CDN 將檔案保留更長時間。

這樣若是遇到同一個檔案不斷異動時候,又可能會造成檔案不一致性,這就要看設計如何解決,此外,如果你有用到Cookie或是LocalStorage之類,建議把『允許忽略Cookie』功能打開,不然很容易出現檔案的504或是400錯誤,目前原因還不知道,所以我都是打開這設定

此外,一般來說我們在檔案加上時間標籤,例如aaa.js?v20151230,原則上就算不同檔案版本了,CDN因該會自動再去源頭抓一份檔案回來,但是,在測試時候,這部分建議是在建立好CDN節點後大概過一天,再去做這樣嘗試,不然依舊會發生檔案抓不到或是檔案還是舊的問題發生,而官方說法建議靜態檔案的更新還是更改檔名比較安全,例如 aaa1_04.js比較好

會有這些問題,我在猜想可能跟Azure整合到的CDN服務有相關,造成還是有些狀況會發生。建議如果你的檔案不是常常同一個檔案更新的,缓存時間是可以設定久一點,如果是同一個檔案常常更新,可以利用『缓存刷新』功能去更新那一個檔案,或是使用檔案加上時間標籤讓CDN抓取源頭檔案,不過,有時會發生一點意外就是。另外一點,如果使用『缓存刷新』是刷新整個目錄,就有可能發生你檔案消失或是抓不到狀況,但是大約過一兩個小時後,基本上都會正常了

看似簡單的CDN設定,其實還是充滿意外