摘要:最近又火起來,原因是用戶對網絡響應時間的要求深化。今天主要分享的是第點動態在年開始在支持動態,意思就是可以把也存到上,用戶拿到和靜態文件都在上,不需要向服務器請求。下次我們可以討論如何在全局負載均衡加上做全球化布局的動態。
CDN 不是一個新名詞,這個把緩存分布到世界各地的技術起碼出現了 10 年。最近又火起來,原因是用戶對網絡響應時間的要求深化。國內就有阿里云的 CDN, ChinaCache, Baidu+Cloudfare, UCloud, 7牛 還有很多。。。因為網絡問題,很多大公司都會采用國外服務器,然后把內容通過CDN 推到國內。
技術上,我認為這么多公司一起做CDN,其中一個原因就是這東西不復雜,當然國內國外的支持還會加上一些其他問題。主流技術就是 Nginx / Varnish 作為 File Cache, 然后部署 全局負載均衡GSLB(上一篇文章也有提及過)。 以技術角度來看,我是不會自己架一個CDN網絡的,因為你必須有上百節點的才算得上CDN,個人架設成本有點高。
選擇 CDN 時一半會考慮以下的因素:
支持 Cache invalidation
Invalidation 所需要的時間與價格
流量費不要超過 USD 0.14/GB
支持動態 CDN
支持子域名 (CloudFlare / 安全寶 都需要域名切換,防DDOS)
支持 Cache Behaviour (不同的路徑有不同的 cache 特性)
可以 pass through header / cookie
Respect Cache-control header
最好可以直接有操作介面更改 header
支持 edge side include
相信能做到以上的,就不純粹是個簡單的CDN,是個真正的CDN。今天主要分享的是第 4)點 動態 CDN
AWS 在 2013 年開始在 Cloudfront 支持動態CDN,意思就是可以把 html 也存到 CDN 上,用戶拿到 HTML 和 靜態文件都在 CDN 上,不需要向服務器 (origin) 請求。原理上,這就支持無限的訪問。read 請求日千萬不是問題,問題你的信用卡能刷多少錢而已。
這個 Dynamic CDN 的原理是這樣的 比如,以 abc.com為例子作一下說明。
abc.com CNAME 去 Cloudfront 的域名 (xxxxxxxx.aws.cloudfront.com)
在 xxxxxxxx.aws.cloudfront.com 以下的 Cloudfront ID (cloudfrontID.default.cloudfront.com) 接受 abc.com 的請求
xxxxxxxx.aws.cloudfront.com 指向 origin.abc.com 拿數據 (就是本服務器)
要是請求沒有 cloudfront 本地 cache, 就繼續,否則反回 cache
要是請求不是特定的 path ( cache behaviour),則反回
cloudfrontID.default.cloudfront.com 向 web 服務器 (Origin) 請求 object
(html / css / .jpg / …)
把 header (cache-header / CORs) 也記到 cache 中
把 xxx.default.cloudfront.com 的 cache 反回到 abc.com 的客戶端
跟據在第 7) 點 定義的 header按時間清理緩存
跟據請求的來源IP,在世界各地每一個edge 上操作 1-9
這有點像反向代理,比如 Varnish 就在做差不多的事。只是CDN 在用 edge cache. Varnish 一般的使用情況是把文件緩存最長時間,然后根據 Origin 給的指令來更新緩存。這是客戶最想要的,這樣就不會有 “第一位用戶變慢” 這樣的問題。但要是用過好幾個 CDN 的人就會發現,市面上沒有CDN 支持永久緩存這回事。原因在哪?這沒有官方回應,我感覺是 edge cache 是很多很多的服務器,在 AWS 上跑一次 cache invalidation 去清理所有 edge 上的 cache 要花上 20-30 分鐘,要是每一次的 object 更新也得像 Varnish 去 “push” 更新,就會花上很大的成本。倒不如自動 Expire, 然后在下一位用戶有需要時,才把最近那地理位置的 edge cache 上加一個 object cache. 這樣就省去一筆很大的成本。
好的 CDN 得支持 Behavior, 就是路徑不同的特性,在不同的應用上,特別是已登錄的用戶,使用太多的 cache 會令系統出問題。得跟據路徑來刪除/加速 刷新。
要是支持登錄用戶的話, Cookie 要用客戶端直接傳送到 Origin, 所以得支持 (forward cookie)
每個 CDN 會有一個 Default behaviour, 就是不指定情況下,都跟據這個 behaviour 作出回應。比如我們要支持用戶登錄,得把 session 通過 Dynamic CDN 回傳到 origin
整體來說,AWS Cloudfront 是個很不錯的 CDN, 需要有的都有了。要是能支持 ESI (Edge Side Includes) 就更好了。市面上的云加速 / 云防護大約都是 Dynamic CDN 的原理,至于能加速多少,能不能支持用戶登錄,還有 Cookie/Cache-header 等問題,就是深度用戶需要關注的地方。
下次我們可以討論如何在全局負載均衡GSLB 加上 Cloudfront 做全球化布局的動態 CDN。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/10932.html
摘要:在這篇文章內,我站在開發者的角度解析一下的商業化架構。的商業化架構首先,我們采用了分層的方式來實現整體架構,包含區塊鏈層激勵層存儲層數據分發層音視頻等應用層。我認為去中心化服務的另外一種說法就是霧計算,或者邊緣技術。 showImg(https://segmentfault.com/img/remote/1460000019213551); 目前大多數的區塊鏈項目,設計時更重視代幣發行...
摘要:本期大綱隨著從到千萬用戶的業務增長,通過的不同服務輕松地實現高性能和高可用的基礎架構。方坤老師本次的主題比較偏向實踐的基礎部分,假設了一個應用從小型到中型和大型的時候,可能需要用到的服務,以及相關介紹和實踐建議。 極牛技術實踐分享活動 極牛技術實踐分享系列活動是極牛聯合頂級VC、技術專家,為企業、技術人提供的一種系統的線上技術分享活動。每期不同的技術主題,和行業專家深度探討,專注...
摘要:這種情況并非完全是一個云爆發的場景,因為根據定義,爆發意味著工作負載在一段時間內被移動到云端,然后最終返回到內部部署。在這種情況下,云爆發將是其設計的固有特征。如今,公共云已迅速成為構建IT基礎設施的一種簡單而無障礙的方式。如果企業已經擁有內部部署系統,那么在某些時候,可能就會希望將內部部署和外部部署整合在一起。而實現這一目標的一種方法是采用云爆發,但云爆發究竟是什么?以及爆發在云端意味著什...
摘要:當更新時,負載均衡器還被增強以考慮更多規則的屬性,包括協議和。以前這些字段的更改不會觸發更新,因為負載均衡器認識不到已經發生了更改。 Kuberentes可謂是2017年風頭最勁的編排工具了,隨著Kubernetes社區及各大廠商的不斷改進、發展,Kuberentes將成為容器管理領域的領導者,昨天,Kubernetes官方發布了本年度第四次也是最后一次新版本的更新公告,即Kubere...
閱讀 1014·2021-11-22 14:56
閱讀 975·2021-11-11 16:54
閱讀 7553·2021-09-23 11:55
閱讀 3000·2021-09-22 15:57
閱讀 2787·2021-08-27 16:25
閱讀 667·2019-08-30 15:55
閱讀 1657·2019-08-30 15:43
閱讀 1592·2019-08-30 14:23