透過 CDN 來增加我與倒站的距離

PTS Taiwan Team
PTS Taiwan
Published in
4 min readApr 29, 2019
圖片來源:https://www.pts.org.tw/theworld_betweenus/news.html

標題很沒梗我知道 哈哈~
但目的是說明公視+在 我們與惡的距離 上映時遇到的狀況,
就忽略這沒梗的標題吧。Let’s Go!

我:劇透!就在 API 前面加上 CDN 來減少資源的直接存取。

觀眾:咦?!好像就講完了,那就來洗洗睡囉~

我:誒先不要,先不要,看一半再關分頁也不遲啊~

事件回顧

先把世界線的事件整理一下:

  1. 與惡EP5, EP6 更新(2019/04/07):公視+出現狀況
  2. 與惡EP7, EP8 更新(2019/04/14):公視+再次出現狀況(´Д` )
  3. 與惡EP9, EP10 更新(2019/04/21):終於沒問題惹(撒花

EP5,EP6 事件的隔天,公視與開發夥伴立刻開始尋找原因
經過測試與收集資料後訂出了改善方向:

  1. 調整服務的參數
  2. 可暫時關閉推薦功能以減省資源
  3. 全面升級服務基礎建設

問:咦?看起來有模有樣啊,那是遇到啥問題?

答:就是。。。第三點啊!

項目 1 和 2 很快都被完成,但是項目 3 在短時間內要執行的風險比較大。

最終我們選擇最簡單直接的 CDN Cache!

解決方法

CDN - AWS Cloudnfront

CDN Cache 這個解法其實就是暫存,對於服務來說有三大好處:

  1. 提高存取速度:從 CDN 的 cache 拿資料一定比從資料庫快。
  2. 降低成本:請求減少後資料庫就不需使用更高的規格。
  3. 隱藏錯誤:在服務反應時間中,如果有錯誤也不會立刻被前台看見。

但暫存也不是沒有壞處,若沒有規劃好的話,網站的資訊就無法順利更新,

所以必須同時搭配清除 Cache 的步驟才能順利更新服務資料。

資訊無法被更新的話會看不到我們與惡的距離的最新集數 QQ

那執行的細節有哪些呢?

實作步驟(有點技術名詞,慎入)

Photo by Ilya Pavlov on Unsplash
  1. 過濾出可讓 CDN 暫存的 API 並新增到 Cloudfront 的 Behavior 中。
  2. 壓測單個 Instance 的極限來推算需要預先開起 EC2 的數量。
  3. 確認測試環境在執行 invalidation 後能順利更新影集。

第一點除了調整設定外,因為公視+還有前端 token 驗證的機制,還需要多加上 Lambda@Edge 來補強。

第二點則是直接透過內部 VPC 做壓測就好,不走外部網路的原因有二:

  1. 可能會需要對 AWS 提出壓力測試申請。
  2. 需要調整的是自己的應用,不用浪費資源去壓測 AWS 的骨幹。

第三點是要強調一定要有測試環境來驗證你的想法喔!啾咪(≧∇≦)

成果與改善

最後一週雖然發生了盜版事件,但還是有許多支持公視+的觀眾選擇了正版的觀看來源。Google Analytics 的數據顯現出當周的使用者創了公視+的紀錄新高,也讓公視+學到很有價值的經驗!

支持正版推推 👍

因為有了 CDN Cache ,當周前臺錯誤資訊幾乎是零,也沒出現倒站白畫面。

這個方法將會是公視+巔峰時段的解決方案,因為 CDN Cache 除了能自動化以外,也能夠維持服務的彈性。

若有遇到任何公視+的使用問題,歡迎透過公視+ 聯絡客服或 email 到 ptsplus@newmedia.pts.org.tw

希望未來能繼續支持我們 m(_ _)m

參考

  1. 壓力測試工具: https://github.com/tsenart/vegeta
  2. Lamda@Edge 說明文件: https://docs.aws.amazon.com/zh_tw/lambda/latest/dg/lambda-edge.html

--

--