![見出し画像](https://assets.st-note.com/production/uploads/images/124368003/rectangle_large_type_2_5f123b07db47f6e7c37f237436a1eb90.png?width=800)
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サーバ上に簡易なものを用意しています。
![](https://assets.st-note.com/img/1702372631827-ekKQybAa8a.png?width=800)
Cloud Storage上の特定のバケット配下に動画がアップロードされると、Cloud Pub/Subに対して通知が集約され、Cloud Runに対してリクエストが送られます。
Cloud Run上で動画のエンコードが行われ、モバイルに適した動画として公開される流れとなります。
動画のIDや投稿者などの投稿データはCloud Spanner上で管理され、動画を視聴する際などに使用します。
![](https://assets.st-note.com/img/1702371360531-N7ASVwJcFx.png?width=800)
まとめ
昨年度とは違い、より本番の運用を想定してアーキテクチャを構築してみました。ユーザーの規模によって、適切なアーキテクチャを構築しないと、費用やスループットで大きな違いが出てくるので、今回の合宿で様々なサービスに触れられて、大変有意義な時間を過ごすことができました。これらの経験をREALITYの今後の開発に役立てられればと思います。
明日のアドベントカレンダーは?
明日の記事はAruさん、ヤザキさんのタッグによる「配信プレビュー」機能になります、お楽しみに!