MediaStoreのフォルダ構成をシンプルにできないかと検討したが却下した

1. Record architecture decisions

Date: 2020-06-05

Status

検討 -> 却下。 Decision に理由を書いた。

Context

MediaStoreのフォルダ構成をシンプルなものにしたい。

以前、Adobeのライブツールから MediaLiveに切り替えた直後は、 一つの MediaSotre に全てのスタジオの映像データを入れる という構成だった。

つまり、

A, L -> MediaLive ->          -> MediaStore -> CloudFront -> ユーザ B, C -> MediaLive ->

という構成だった。 この方が、CloudFrontのオリジン設定は 一つの MediaStore を参照するだけで済むため、シンプルな設定ですむ。

ひとつのMediaStoreに集約するため、MediStore上のフォルダ構成は /a/live.m3u8 /a/live_1080p30.m3u8 /a/live-lq.m3u8 /a/live-lq_00001.ts /a/live-lq_??????.ts

/b/live.m3u8 /b/live_1080p30.m3u8 /b/live-lq.m3u8 /b/live-lq_00001.ts /b/live-lq_??????.ts

これが各スタジオごとにフォルダを作っていた。

ただ、まれに MediaStoreのパフォーマンスがでないケースが起きたため、各スタジオごとにMediaStoreを用意する という形に変更した。 ( どうもMediaStoreの性能の限界に達したようだ。これは将来的に改善するとは思う)

この変更後、MediaStoreは各スタジオごとに用意した、 MediaStore上のフォルダ構成もそのまま

/a/live.m3u8 /a/live_1080p30.m3u8 /a/live-lq.m3u8 /a/live-lq_00001.ts /a/live-lq_??????.ts

というフォルダ構造を引き継いだが、この /a/ というフォルダは MediaLive 側の出力設定を変更する事で無くせる事が分かったので、 消してシンプルにしたい。

Decision

MediaLive -> MediaStore のフォルダ構成は変更できる。 が、現状、ビデオプレーヤーのアクセスは https://live3.aoi-zemi.com/a/live.m3u8 のような形で /a/ とサブディレクトリがある状態でリクエストが来ている。

この /a/ のディレクトリを オリジンサーバのトップディレクトリと変更する つまりクライアントからリクエストの GET /a/live.m3u8 HTTP/1.1 をオリジンへのリクエストの際に GET /live.m3u8 HTTP/1.1 とするような変更はできなかった。

このため諦める。

別のアプローチとしては「スタジオごとに CDNのエンドポイントを持つ」例えば live3.test.com だけではなく、 live4, live5, live6 などを用意する、 というアプローチであれば、可能だが、これは

  • アプリ側の開発工数がかかり
  • 切り替え日にリスクが伴う ため、見送りたい。 ただ将来的にコストに見合うようであれば検討しても良いかもしれない。

Consequences

この方針は諦める。 将来的にMediaStoreでのファイル削除のコストが大きすぎる、リスクが大きい場合は再度検討する。

User
CloudFront
ALB
EC2
RDS