Wカップ日本代表戦で学ぶCDN

経緯

2022年Wカップは日本がジャイアントキリングを達成して決勝トーナメントに進出。その1回戦は非常に注目されていたが、その中でも特に「本田の解説がおもしろい!」とAbemaTVでのインターネット中継放送が人気であった。

当日は約2000万人(延べ)がAbemaTVの放送を視聴していたようだ。

同時にこれだけの人数に映像を配信する仕組み(バックエンドとフロントエンド)にはCDN(Content Delivery Network)が深くかかわっている。 (詳しくはAbemaやAkamaiの中の人たちが後日発表してくれるだろう。)

CDNとは

https://voice.stream.co.jp/technology/20211109/ https://www.cloudflare.com/ja-jp/learning/cdn/what-is-a-cdn/ https://www.akamai.com/ja/our-thinking/cdn/what-is-a-cdn 1つのコンテンツを1つのサーバにおいてしまうと、同時アクセスが増えるほどサーバ負荷が増大してそのうちパンクする。 そこでキャッシュサーバによりリソースを散在させ、加えてロードバランサーを用いて負荷の分散を図る。

自分が見ている映像はどこからきているのか?verAkamai

ブラウザの開発者ツール(デベロッパーツール)から簡単に確認できる。 F12などから開発者ツールを開き、Networkタブを選択する。

画像では伝わらないが、このNetworkの情報はリアルタイムで更新されており、常にリクエスト/レスポンスがやり取りされている。(わかりにくい場合はWaterfallを降順にするとよい)

Name列に注目すると、○○.mp4となっているものが2種類あり、それぞれ「audio」「video」とある。これが今見ている映像だと思われる。

カーソルを合わせてクリックすると詳細が表示される。

Request URL: https:// *****.akamaized.net/seoul

とある。 AkamaiCDNサービスの一つである。 驚くべきはソウルのCDNサーバへリクエストを飛ばしているということ!すごい。ロードバランシング極まれりといった感がある。

自分が見ている映像はどこからきているのか?verCloud Front

再度接続しなおし、同様の手順で調べると今度はCloud Frontだった。 (Via部を見ればわかる)

ちなみにリクエスト先のdig結果はこちら

$ dig text live-playout-cf-sel.p-c2-x.abema-tv.com

; <<>> DiG 9.11.9 <<>> text live-playout-cf-sel.p-c2-x.abema-tv.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 2235
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: a827fec471825dca0377ecbf638e32319a6fd0d5cd7f1245 (good)
;; QUESTION SECTION:
;text.                          IN      A

;; AUTHORITY SECTION:
.                       10800   IN      SOA     a.root-servers.net. nstld.verisign-grs.com. 2022120500 1800 900 604800 86400

;; Query time: 15 msec
;; SERVER: 192.168.10.1#53(192.168.10.1)
;; WHEN: Tue Dec 06 03:02:28 JST 2022
;; MSG SIZE  rcvd: 136

;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11182
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: a827fec471825dca67fe28d7638e32318f536a06f9c3a4e1 (good)
;; QUESTION SECTION:
;live-playout-cf-sel.p-c2-x.abema-tv.com. IN A

;; ANSWER SECTION:
live-playout-cf-sel.p-c2-x.abema-tv.com. 58 IN A 13.32.50.68
live-playout-cf-sel.p-c2-x.abema-tv.com. 58 IN A 13.32.50.107
live-playout-cf-sel.p-c2-x.abema-tv.com. 58 IN A 13.32.50.78
live-playout-cf-sel.p-c2-x.abema-tv.com. 58 IN A 13.32.50.106

;; Query time: 10 msec
;; SERVER: 192.168.10.1#53(192.168.10.1)
;; WHEN: Tue Dec 06 03:02:28 JST 2022
;; MSG SIZE  rcvd: 160

合わせ技

Abemaは普段からAkamaiを利用しているらしいが、今回はAWS CloudFrontやGoogleGCPも併用していた。CDNサービスの合わせ技だ。他にも入場制限のsorryページはFastlyだったらしい。

トラフィックがいかに異常だったか

今回の延べ視聴者数が2000万人を超えているということも驚きだが、もっと定量的なデータもある。

JPNAPサービス(Internet Exchange) https://www.jpnap.net/ix/traffic.html 詳細までは筆者は理解していないが、ある種のトラフィックを計測しておりグラフが見られる。

これによると普段に比べて2T bits/sもトラフィックが多いことが分かる!普段のおよそ2倍である。

おまけ:H.264コーデック

今回AbemaはH.264コーデックの映像を配信していたようだが、H.264は次世代のH.265と比べて圧縮率が半分であるため、トラフィック増大に拍車をかけていた可能性がある。 https://atcl-dsj.com/useful/4678/

どのように調べたか。 開発者ツール→Networkと進んでNameが「manifes.mpd」となっているものの詳細を眺める。Responseにほしい情報がある。

codecs="avc1.4D4028" とあるが、これを検索するとGoogle Castのページにたどり着き、H.264コーデックであることが分かる。 おもしろいね。

参考ツイート