見出し画像

REALITYにショート動画の投稿機能を入れてみた (Part 2) REALITY Advent Calendar 2023

REALITY Advent Calendar 2023 13日目担当のサーバチームのあさだです。
今年は、昨年度挑戦したショート動画機能に、さらに手を加えるため、開発合宿に参加しました。
前回の合宿時には下記のようなものを作っていました。


作ったもの

今回の合宿で作ったものも「ショート動画の投稿機能」になります。
成果物としては同じものになりますが、前回とは異なるGoogle Cloud Platform(以下GCP)のサービスを利用して、アーキテクチャを構築してみました。

今回使ってみたGCPのサービス

今回、ショート動画の投稿機能を作る上で、触ってみたGCPのサービスは以下の4つです。

  • Google Cloud Storage

  • Google Cloud Pub/Sub

  • Google Cloud Run

  • Google Cloud Spanner

Google Cloud Storage

ファイルの管理などを行うサービスです。動画やサムネイルなどのメディアの管理に使いました。クライアントから署名付きURLをリクエストし、メディアデータのアップロード及びダウンロードを行うのに使いました。
こちらに関しては昨年度と同じ構成のものを使っています。

Google Cloud Pub/Sub

メッセージングサービスです。Cloud Storageへの動画やサムネイルのアップロードを検知し、後述するCloud Run上のサービスへの、エンコードなどのリクエストを管理するために使っています。

Google Cloud Run

Cloud Functionと同様に、クラウド上でコードを実行できるサービスです。Cloud Functionとは違い、デプロイに関しては少し複雑になりますが、長時間の複雑な処理を行ったり、より細かい実行環境の設定を行うことができます。
今回は動画のエンコードをこちらのサービス上で行いました。

Google Cloud Spanner

フルマネージドのリレーショナルデータベースサービスです。REALITYではデータベースとしてほぼCloud SQLを採用しておりますが、Cloud Spanner はより柔軟なスケーリングを行うことができるので、大量になるであろうショート動画の投稿データを捌くことを期待して取り入れてみました。

機能の流れ

まず、サーバ上でGCSに動画をアップロードするための署名付きURLを発行します。これについては既存のコードを流用しています。

アップロードを行うクライアントは前回の合宿で作成したものを流用。
Webサーバ上に簡易なものを用意しています。

動画投稿画面

Cloud Storage上の特定のバケット配下に動画がアップロードされると、Cloud Pub/Subに対して通知が集約され、Cloud Runに対してリクエストが送られます。
Cloud Run上で動画のエンコードが行われ、モバイルに適した動画として公開される流れとなります。
動画のIDや投稿者などの投稿データはCloud Spanner上で管理され、動画を視聴する際などに使用します。

ショート動画投稿のアーキテクチャ

まとめ

昨年度とは違い、より本番の運用を想定してアーキテクチャを構築してみました。ユーザーの規模によって、適切なアーキテクチャを構築しないと、費用やスループットで大きな違いが出てくるので、今回の合宿で様々なサービスに触れられて、大変有意義な時間を過ごすことができました。これらの経験をREALITYの今後の開発に役立てられればと思います。

明日のアドベントカレンダーは?

明日の記事はAruさん、ヤザキさんのタッグによる「配信プレビュー」機能になります、お楽しみに!