Twitch VOD 卡頓 / 轉圈問題 — 工程師的解決方法

最近 Twitch 只要撥放 VOD 就會開始轉轉轉,實在是非常困擾。

要解決轉轉轉問題,首先就是要先分析到底在轉幾點的,照慣例打開 F12,經過簡單的分析發現 Twitch 的 VOD 是放在 akamai 的 CDN 上,並且速度非常不穩定。

速度時快時慢,有時候速度只有 257KB/s
從影片檔的 host name 可看到是使用 akamai 的 CDN 平台
Response header 表示 server 是放在 AmazonS3

而稍微檢測一下可以發現,同一個影片載第二次的速度和第一次差非常多,推測是有進行 cache。

traceroute 一下發現這個 hostname 對應到的 ip 位址在台灣

這些證據指出一件事情:akamai 在台灣有 CDN Server,但沒載過的資料就會速度極慢(100KB/s ~ 1MB/s 不等),聽起來就像是 akamai 跟 hinet 買的頻寬不夠導致(或其他原因),因為我們使用其他國外的服務並不會這麼慢。

而這個問題聽起來沒辦法藉由 routing 解決,因為問題不在家裡 -> akamai 而是 akamai TW -> akamai US 中間的頻寬不夠導致。

那麼,如果我們經由 VPN 將流量全部往 US 丟,應該就可以直接連到美國的 akamai CDN,享受台灣 -> 美國的頻寬,不再受限於 akamai 的內部頻寬囉?

為了驗證這個假設,我決定自己架設一台 amazon EC2 的 VPN Server。

google “PPTP server ec2” 就可以根據 這篇文章 快速架設好一台 PPTP server。設定好並連上線之後我立刻發現,居然沒辦法看 twitch 了?!想了一下推測是因為我之前都在台灣的網路環境下進行 dns lookup,我的 browser 已經 cache 了 akamaized 的台灣 IP,然後 akami 可能有擋台灣的 CDN 美國 IP 連不過來之類的。

其實我只是希望讓 *.akamaized.net 都改用美國的 IP 連而已,用 VPN 讓整台都 route 過去好像有點過頭了。了解到這點之後,我改為使用 HTTP proxy,而且用 HTTP Proxy 有個好處,就是有 chrome extension(Swichy Omega) 可以直接讓符合某個 pattern 的網址都過某個 Proxy。

於是簡單架設了一個 squid proxy 在 EC2 上,並透過 swichy omega 讓 *.akamaized.net 全都過該 proxy 就完成囉!!

實測起來速度有 2MB/s 左右,比沒 cache 過的 akamai TW 快太多了,讚讚讚 :)