見出し画像

個人開発 | 環境構築の考察メモ

個人開発の環境構築について考察したメモです
随時更新していく予定です


やりたいこと

  • Clubhouse」や「stand.fm」のような音声ベースのアプリが作りたい

  • 開発環境と本番環境を同じ構成にしたい


基本構成

まずは、基本的な構成を考えた

DNSサーバー
・名前解決
http サーバー

・URL おび HTTPを理解してもらう
アプリケーションサーバー
・実装するソースコードを置くところ
・httpサーバーと通信してDBにアクセスしたりできる
リアルタイム通信サーバー
・音声チャット専用のサーバー。レイテンシー低遅延を実現予定。
バッチサーバー
・仕様により、外部API叩いて、週次でDBのレコードを一括更新したい
DBサーバー
・永続化したいデータを保存する


技術選定

事例をいろいろ見てみると、以下の技術で実装すると、コスパがよさそう

Honoで完結できそう

当初は、Google Cloudの Cloud Run でアプリケーションサーバーを建てようと思ったけど、以下の記事で、CloudflareからDBにTCPで直接アクセスでそう

そうなると、アプリケーションサーバーを切り離す理由がなくなる。
Honoでどこまで実装できるかによるけど、不都合があれば、Google Cloudの Cloud Run でアプリケーションサーバーを建てようと思う

バッジサーバーは、Google Cloud Runを採用

AWS App Runner と悩んだけど、事例が多いCloud Runを採用した。
パフォーマンスが良さそうなGolang試してみる。

DBはNeon

Neon、PlanetScale、Supabase で迷ったけど、コストがよさそうなNeonを採用した

リアル通信サーバーはJanus Gateway

Agoraと迷ったけど、Janus Gatewayを採用する。

Agoraは、サーバー構築が不要で便利なんだけど、無料プランが月額10,000分間しかつかえない。



見積もり

各Passのフリープランで、どれぐらいのユーザ数のアクセスに耐えれるか計算してみる

Cloudflare Workers

Requests:
100,000 per day : 無料プランでは、1日あたり最大100,000回のリクエストを処理することができます。リクエストとは、Worker(あなたのコード)がクライアントや他のサーバーから受け取るHTTPリクエストのことです。

Duration:
No charge for duration : 使用時間(コードの実行時間)に対して追加料金は発生しません。要するに、コードがどれだけの時間を実行されても、その時間に対しては課金されないということです。

CPU time:
10 milliseconds of CPU time per invocation : 無料プランでは、コードが一度呼び出される(invocation)ごとに、最大で10ミリ秒間のCPU使用時間が許可されます。もしコードの実行が10ミリ秒を超えると、実行は中断される可能性があります。

Freeプラン- chatGPTで翻訳

1ユーザーがアプリを使用するたびに叩くリクエスト数は、仕様的におそらく50回もいかない気がする。

1日5回はアプリを使用と想定した場合、1ユーザーが叩くリクエスト数は多くても、250回になる

なので、Daily Active Usersが400ユーザー(100,000 ➗ 250)であれば無料プランでも耐えれそう

ここらへんは、実際にリリースしてみないとわからないけど、仮説として持っておく

Daily Active Usersの監視には、Firebase を使用する。

CPU timeに関しては、どうなるかわからないなー。

これはHoneで実装しながら、確認する必要がある

OSでCPU timeを取得できるぽいので、10ミリ秒間を超えたら、Error Reporting API エンドポイントでGCPになげれば検知できそう

Cloud Run

Google Cloud Platform 料金計算ツール で見積もりしたら、月額3.22円でいけそうだ。(ほんとうかな)

仕様的に、週次で、数万行のレコードを更新しそう
どれぐらいのスペックが必要なのか現時点ではイメージつかない

Neon

Pro プランを使用する

Janus Gateway

GCPのインスタンスにJanusいれて、インストールすれば良さそう最適化するには、インプットする必要がありそう


開発環境

  • Cloudflare Workersに関しては、wrangler を使ってにHonoを入れたらよさあそう

  • Goolge Cloud Run は Dockerで行う。そのままPushもできるみたい

  • Neonで開発環境、本番環境の両方が作れそう

(原文)
Neon fit well with Proposales’ workflow because they got the best of managed and local Postgres setup worlds. This shared cloud-based database can be branched into isolated environments for local development.

(日本語翻訳 - chatGPT)
Neonは、Proposalesのワークフローと非常に適しています。なぜなら、それは管理されたPostgresセットアップとローカルPostgresセットアップのベストな部分を組み合わせています。この共有クラウドベースのデータベースは、ローカル開発向けに分離された環境に分岐することができます。


まとめ

  • 判断材料がある程度揃ってきたので、実際に開発してみる


参考資料

家族アルバム みてね のインフラをマルチリージョン化しました
初心者でも10分で分かるnginxの役割と使い方
GraphQL Server on Edge
エンジニア向け会社紹介資料 / company deck for engineers
Clubhouse リアルタイム配信の仕組みについて (妄想編)
一休.comのアーキテクチャ変遷から考えるサービス分割の勘所
コンテナ移行ってこんなに大変?
安く早く開発するための個人開発アーキテクチャ
Next.js × AWS App Runner × AWS AppSyncで進めるクライアントファーストのWEB開発
ZennにみるCloudRunとBigQueryによるアプリケーション構築 / zenn-cloudrun-bigquery-serverless
現状Cloudflare WorkersでGraphQLサーバを構築するならコレ
AWSサーバーレスバッチ処理アーキテクチャの構築
データベースの負荷分散を実現する「リードレプリカ」
Cloudflare Docs - Pricing
Database Integrationsを発表:数回クリックして、Workers上のNeon、PlanetScale、Supabaseに接続できます
バッチ処理 プラクティス
WebRTC Gateway JanusをGCPで動かす
WebRTC を今から学ぶ人に向けて
Cloudflare Workersフレームワーク「Hono」の紹介
Cloud Run サービスをローカルでテストする

この記事が気に入ったらサポートをしてみませんか?