TVer動画配信を支えるCDN

## 前書き

[TVer Advent Calendar 2024](https://qiita.com/advent-calendar/2024/tver) 5日目の担当のtomoです。
TVerではサービスの基盤となるインフラ周りの業務を担当しています。
昨日は @_kurose さんによる [BigQueryのExternal Tableのスキーマ変更に対応する方法の一つ](https://techblog.tver.co.jp/entry/kurose/external-tables-schema-evolution) でした。
今回は私の業務担当である動画配信で使われていますサCDNサービスに関してこの機会に書いていきます。
この業界にいる人であればCDNサービスはもうすっかりお馴染みのサービスだと思いますが、このCDNサービスは巷にはAkamai、Fastly、CloudflareなどCDNメインのサービスとして提供されているものから、パブリッククラウドサービスであるAWSなどの一部のサービスとして提供されるものなど現在ではとてもカジュアルに導入可能で尚且つパフォーマンス問題やインフラコストを下げるサービスとして一般的になっています。
ではTVerではどこのCDNサービスを利用している見ていきましょう。

### 使用サービス

それでは[TVer](https://tver.jp/)にアクセスして、興味のある動画を選びましょう。

![Monosnap スクリーンショット 2024-11-15 13.30.55 2024-11-25 15-03-34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935478/72f4334e-273f-f8fe-f8fe-66a65a0e5064.png)

私はガイアの夜明けをよく見るのでこの動画を選んでChrome DevToolsを使用して通信を行っているドメインを確認します。
通信対象のドメインに `tx-vod-cdn.tver.jp` とありますね、これは名前からしてCDNのドメインっぽいですね。それではこのドメインをdigってみましょう。

```dig
% dig tx-vod-cdn.tver.jp

; <<>> DiG 9.10.6 <<>> tx-vod-cdn.tver.jp
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6031
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;tx-vod-cdn.tver.jp.            IN      A

;; ANSWER SECTION:
tx-vod-cdn.tver.jp.     154     IN      CNAME   tx-vod-cdn.tver.jp.id165.jocdn.jp.
tx-vod-cdn.tver.jp.id165.jocdn.jp. 37 IN A      210.149.92.134
tx-vod-cdn.tver.jp.id165.jocdn.jp. 37 IN A      210.149.92.234
```

CDNのCNAMEが確認できました。　`XXX.jocdn.jp`　とありこれがTVerで利用していますCDNサービスになります。
[JOCDN](https://www.jocdn.co.jp/)とあまり聞いたことのないCDNサービスですね。
簡単に説明すると放送者向けの動画配信でよく使われているCDNサービスなので業界にいなければ全く聞いたことがないCDNサービスなのでITエンジニアであっても聞いたことがある人は少ないかと思います。
TVerではこのCDNサービスをVOD（ビデオオンデマンド）などの動画配信で利用しています。

他にもTVerにある動画を確認しますと、 `cx-vod-cdn.tver.jp` や　`ex-vod-cdn.tver.jp` などがあり、返されるエッジのIPが違うことを確認出来ます。
これはテレビをよく見る方ならわかるかと思いますが、コンテンツ制作しています放送局毎に配信ドメインが設定されています。

### 対応状況

#### IPv6

```dig
% dig ex-vod-cdn.tver.jp AAAA

; <<>> DiG 9.10.6 <<>> ex-vod-cdn.tver.jp AAAA
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16349
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;ex-vod-cdn.tver.jp.            IN      AAAA

;; ANSWER SECTION:
ex-vod-cdn.tver.jp.     230     IN      CNAME   ex-vod-cdn.tver.jp.id165.jocdn.jp.
ex-vod-cdn.tver.jp.id165.jocdn.jp. 50 IN AAAA   2001:240:1a7:102a::1:87
ex-vod-cdn.tver.jp.id165.jocdn.jp. 50 IN AAAA   2001:240:1a7:1015::1:198

;; Query time: 48 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
;; WHEN: Fri Nov 15 16:52:22 JST 2024
;; MSG SIZE  rcvd: 148
```

ちゃんとIPv6で名前解決してくれるので安心してIPv6環境から利用出来ます。
* 一部API関連など対応していないものもあります

#### HTTP3

CDNサービスでは対応していますが、TVerのサービスはHTTP/1.1、HTTP/2のみの対応で現在はHTTP3に関してはまだ有効になっていません。

#### TLS

TLSv1.2、TLSv1.3に対応しています。

#### Cache周り

Cache-Status Field [RFC 9211](https://datatracker.ietf.org/doc/html/rfc9211)
HTTP 応答ヘッダで、Cacheをどう取り扱ったかを表す。
リストで返し、最後の結果がUAなどユーザーに近いCacheを表す。今回は各種CDNのエッジが返したもの。
x-cacheなど独自のheaderを付与しているCDNサービスもありますが、JOCDNは`cache-status` を付けて返してくれます。

##### JOCDN

```
cache-status: oke; hit; ttl=7765780
```

##### CloudFront

```
x-cache: RefreshHit from cloudfront
```

##### fastly

```
x-cache: HIT, HIT
```

##### Cloudflare

```
cf-cache-status: MISS
```

#### 監視周り

JOCDNのコンソール画面から使用帯域や、転送量、アクセス数を確認することが出来ますが日頃もっと簡単に確認したい場合やアラートなどの設定を行いたい要件がありますので弊社ではAPIを利用してデータを取得してそれを定期的にNewRelicに送っています。

![スクリーンショット 2024-11-18 19.45.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935478/ff9ea57b-bc1f-ca20-ce15-dcc4c49e73ce.png)

その他現在はまだ利用していないですが、アクセスログ転送も可能なのでこれもS3などに転送して監視やSIEM周りで利用していきたいと思っています。

#### サービスのトラフィック周り

CDNサービスによらない内容となりますが、TVerのトラフィックが日頃どうゆう感じになっているか少しだけお見せします。

![スクリーンショット 2024-11-19 19.15.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935478/2bbe1e74-b0da-71f4-f259-de9b3e29ba00.png)

上記はとあるVOD配信ドメインの1日の帯域推移になります。
増加している時間帯はお昼やゴールデンタイムが上がっているのが見て取れると思いますが、これに関してはTVの視聴者数と似たような動きをしているかと思います。
この他VOD以外にもライブ配信などもTVerにありますが、よく地上波で配信が終わったタイミングでTVer側にユーザーが流入して一気にアクティブユーザーが増えるトラフィックなどのリソースが爆発的に増える特徴があります。

#### まとめ

今回は簡素になりますがTVerのサービスを支えています大事なCDNサービスについて紹介しました。
どのCDNサービスを選定するにあたって重要な要素はいくつかあるかと思います。
サービスの信頼性、安全性、料金面など、また最近のニッチなエッジコンピューティングなどを重視する人もいるかもしれません。
ただ個人的には各社のCDNサービスを利用してきてこのサービスに最も重要なものはサービスの信頼性だと思います。そのため今後も安定的に障害がなく頑張って運用していただきたいと思います:bow_tone1:
＊過去海底ケーブルやエッジの障害など経験した中での思い。

明日の [TVer Advent Calendar 2024](https://qiita.com/advent-calendar/2024/tver) 6日目は @t-arai1228  さんによる [GitHubを活用したプロジェクトのIssue管理](https://qiita.com/t-arai1228/items/fb22c72f4e8eacacaae6) になります。