在微信開放社區中,有很多使用雲開發的小夥伴反饋遇到了「CDN流量消耗如流水」的狀況。小程序
有一覺醒來超額的:後端
有被高質量圖片的加載「嚇」到不敢用的:微信小程序
遇到以上狀況不要慌,極可能是你的使用姿式不對!瀏覽器
那麼問題來了,如何在雲開發中優雅地管控 CDN 流量消耗呢?本文就來和你詳細聊聊!緩存
爲了便於理解,先來看看雲開發的流量計費模式。服務器
簡單來講,按量計費就是:你有多少個量跑出去了,就給你算多少許;可是它並不限制你同一時間跑出去的量,也就是流量峯值不設限。微信
若是你在同一時間須要跑出去100M的量,那麼峯值就給你開到100M,在同一時間跑完,最後算費用是100M的錢。網絡
而管道付費則是限制給你開多寬的「道路」,按照這個「道路」的寬窄收費,好比你選擇1M的網絡道路,那就按照1M的價格來收錢;在使用時,你的量只能達到1M的速度,再也高不了了,這個最大速度就被稱作帶寬。框架
可是即便低峯沒多少許時,你還必須爲這個「道路」付錢。仍是上述例子,你同一時間須要跑出去100M,可是速度只能給你開到1M,那麼這些量在100秒後才能夠走完,最後算費用是1M的道路租金*租用時長。less
而在現實項目中,總會有業務的高峯和低峯,流量幾乎不可能始終保持在一個恆定的速率,這就會形成管道計費有速度的天花板、但閒置時仍在計費的資源浪費問題。
雲開發做爲 Serverless 雲原生一體化後端服務,提供的流量是按量計費的,不限制同一時刻的流量速度,所以,若是開發者使用不合理就會致使流速過快,進而形成「一眨眼的功夫,流量就超額了」的狀況。
瞭解了按量付費和管道付費的區別後,我們進入正題,說說 CDN。
咱們在使用雲開發時,幾乎在各處都會看到CDN這個詞。
CDN又稱內容分發網絡,通俗來說就是將你主存儲(源站)中的文件,複製給各地的存儲點(CDN節點),當有用戶訪問這個資源時,直接從就近的存儲點(CDN節點)獲取便可。
雲開發的雲存儲和靜態網站託管自然支持 CDN 加速,因此你的用戶經過客戶端下載文件跑的流量都是 CDN 流量。
以上 CDN 流量只適用於各類渠道走加速公網下載文件的狀況,好比瀏覽器加載網站,客戶端下載資源,外部系統請求文件,經過臨時地址的各類訪問打開文件都在消耗 CDN 流量。
可是若是是內網訪問文件,則不走 CDN 流量消耗,好比在雲函數中經過 fileID 訪問文件等。
當咱們的存儲中有文件更新時,存儲在 CDN 節點的舊文件又該如何處理呢?在這裏引入一個知識點——緩存時間。
這裏的緩存時間其實就是文件副本在各地存儲點(CDN節點)的有效時間,好比默認是兩小時,那麼每次文件副本在各地存儲點的有效時間就是兩小時,超過這個時間以後再收到請求時,存儲點(CDN節點)就會丟棄過時的舊文件,向主存儲(源站)請求最新的文件,而這一請求所產生的流量就稱爲 CDN 回源流量。
緩存時間既不能太長也不可過短,若是 CDN 緩存間隔時間太短,那麼 CDN 節點上的數據會常常失效,致使頻繁回源,增長了源站的負載,進而影響了總體的傳輸效率;若是緩存間隔時間過長,會帶來數據更新不及時等嚴重的業務問題。
雲開發的雲存儲就提供了很是細微顆粒度的緩存時間設置,你能夠針對一個文件、一個路徑甚至是文件後綴來進行分別設置。
另外,多個緩存規則設置中還有優先級策略,調配變得更加靈活。
雲存儲是以從後到前的配置模式來作策略計算的,好比一個雲存儲的域名作了以下緩存配置:
如今請求此路徑下資源/test/abc.jpg,其從後到前匹配方式以下:
匹配第一條全部文件,命中,此時緩存時間爲 2 分鐘。
匹配第二條,未命中。
匹配第三條,命中,此時緩存時間爲300秒。
匹配第四條,命中,此時緩存時間爲400秒。
匹配第五條,命中,此時緩存時間爲200秒。
咱們須要把握一個原則:
縮減大小,善用緩存。
縮減大小的意思就是,咱們在開發應用時,所須要的多媒體文件,若是沒有特殊要求(好比攝像館的原圖發送),須要儘量的壓縮。只有減輕了業務資源的大小,纔可以根本的減小流量資源的消耗。
另外,用戶在上傳多媒體資源時,仍然可使用平臺或框架能力對資源進行壓縮後再上傳,保證資源都是通過優化後進入存儲,這樣在請求下載時就會減輕不少負擔。
善用緩存意思就是同一個用戶、同一份資源儘量不要請求一次以上,要合理使用客戶端的本地緩存能力,將固定資源所有緩存。當用戶再此進入時,直接使用緩存的資源。
例如,微信小程序官方就提供了圖片緩存配置,開啓後全部圖片均進行緩存,下次讀取相同資源時,直接從緩存中讀取。
文檔連接:http://mrw.so/6wT3TR
再送給你們一句網絡金句:緩存用的好,PV 的效果用的只是 UV 的量。
而在具體使用時,你們仍是須要根據本身的業務狀況來合理把握。好比你的資源變動很是頻繁,就不太適合緩存優化;而你的資源不能壓縮,要保持原大小,則就不適合壓縮優化。
以上攻略送給各位 hold 不住 CDN 流量的小夥伴們,若是你們以爲 CDN 消耗如流水,用戶活躍卻沒有多少轉機,可能就須要好好檢查一下本身哪裏浪費了。勤儉節約但是中華民族的傳統美德,雲開發雖好,也須要節約使用哦~
誠邀各位雲開發者參與小程序·雲開發「錯誤監控」功能有獎調研,參與即送小禮品。
期待您的寶貴建議,快掃描下圖中的二維碼參與吧!
雲開發(Tencent CloudBase,TCB)是騰訊雲提供的雲原生一體化開發環境和工具平臺,爲開發者提供高可用、自動彈性擴縮的後端雲服務,包含計算、存儲、託管等serverless化能力,可用於雲端一體化開發多種端應用(小程序,公衆號,Web 應用,Flutter 客戶端等),幫助開發者統一構建和管理後端服務和雲資源,避免了應用開發過程當中繁瑣的服務器搭建及運維,開發者能夠專一於業務邏輯的實現,開發門檻更低,效率更高。