tva
← Insights

単一サーバーで複数のデータベースインスタンスをセルフホスティングする

データベースのセルフホスティングという選択

クラウドマネージドデータベースは便利です — 請求書が届くまでは。複数プロジェクトを運営するチームにとって、それぞれ独自の Postgres インスタンスが必要な場合、データベースが 3〜4 つを超えた時点でコスト計算が大きく変わります。

しかし現実には、複数のデータベースインスタンスを 1 台のマシンに詰め込むことは、単にコンテナを増やせばよいという話ではありません。メモリの競合、ディスク I/O の衝突、バックアップのオーケストレーションはすべて、マネージドサービスが静かに処理してくれていた重要な課題となります。

構成:1 台のサーバーで複数の Supabase スタックを運用

私たちは、Postgres、GoTrue、PostgREST、Realtime、Storage から成る完全な Supabase スタックを複数、1 台の専用サーバーで稼働させています。このサーバーは欧州のデータセンターにある 16 vCPU・32 GB のマシンで、すべて Docker Compose で管理されています。

各スタックはそれぞれ独自の compose ファイル、独自のネットワーク名前空間、独自のデータボリュームを持ちます。重要なアーキテクチャ上の決定は:Postgres クラスターを共有しないこと。各プロジェクトは完全に分離されたデータベースインスタンスを持ちます。複数の Postgres プロセスを実行するオーバーヘッドは現実に存在し — アイドル状態のインスタンスあたり約 200〜400 MB — ですが、完全分離によるオペレーションの簡素さがリソースコストを上回ります。

実際に意味のあるリソース制限

services:
  db:
    image: supabase/postgres:15.6
    deploy:
      resources:
        limits:
          memory: 2G
          cpus: '2.0'
        reservations:
          memory: 512M
          cpus: '0.5'

Docker のリソース制限は最初の防衛線です。これがなければ、暴走したクエリ 1 つがマシン上の他のすべてのデータベースを枯渇させる可能性があります。リザーベーションにより、競合状態でも各インスタンスが常に最小限のリソースを確保できます。

インスタンス間のバックアップオーケストレーション

複数データベースの問題はバックアップそのものではありません — pg_dump は信頼性高く対応します。問題は、すべてが同時実行されてディスク I/O が飽和しないようにバックアップをオーケストレーションすることです。

シンプルなオフセット付き cron スケジュールを使ってバックアップを分散させています。インスタンス A は 02:00 にバックアップ、インスタンス B は 02:15、インスタンス C は 02:30。各バックアップは gzip を通じてオブジェクトストレージにアップロードされます。全インスタンスのバックアップ所要時間は 45 分以内です。

モニタリングスタックなしの監視

よくある落とし穴:サーバーを監視するために Prometheus、Grafana、AlertManager をデプロイしてしまい、守ろうとしているリソースを消費してしまうことです。私たちのスケールでは、軽量なアプローチの方が効果的です。

シェルスクリプトが cron で 5 分ごとに実行され、pg_isready で各 Postgres インスタンスを確認し、ボリュームごとのディスク使用量を測定し、いずれかの閾値を超えた場合は通知エンドポイントにサマリーを送信します。総リソースコストはごくわずかです。

セルフホスティングをやめるべき時

複数データベースのセルフホスティングは、チームが Postgres の運用を理解しており、ワークロードが予測可能で、コスト削減が運用オーバーヘッドを正当化できる場合に有効です。これらの条件のいずれかが変わった瞬間 — 急速なスケーリング要件、マネージドサービスへのコンプライアンス要求、またはチームの入れ替わり — コスト計算はマネージドオファリングに戻ります。

最良のインフラ上の決定は可逆的です。Docker ボリュームはエクスポートでき、pg_dump ファイルはどこでもリストアでき、アプリケーション層はデータベースがどこにあるかを気にすべきではありません。そのポータビリティこそがコンテナ化アプローチの真の価値であり — コスト削減ではありません。

関連インサイト

関連記事