コンテンツにスキップ

マイクロサービス──独立 DB か共有 DB か(6 人チーム・50 万ユーザー)

問い

チーム 6 人・50 万ユーザー・急成長中。

エンジニア A「すべてのサービスはそれぞれ独自の DB を持つべき。それが本物のマイクロサービス。」

エンジニア B「サービスに明確な境界があれば共有 DB でも問題ない。個別 DB は運用上の複雑さを増すだけでまだ必要ない。」

どちらが正しいか?この決定を下すべき唯一の要因は何か?

2 つの立場の整理

観点 独立 DB(エンジニア A) 共有 DB(エンジニア B)
理念 本物のマイクロサービス、完全な疎結合 境界が明確なら共有でも疎結合を達成できる
運用コスト DB 数×運用・監視・バックアップが必要 1 DB の運用で済む(6 人チームには現実的)
デプロイ独立性 サービスごとに独立したリリースが容易 スキーマ変更の影響が他サービスに波及しうる
スケール サービスごとに独立したスケーリング可能 ボトルネックが共有化される

「唯一の要因」の考え方

  • デプロイ独立性の要件があるかが最も重要な判断軸

  • サービス A のデプロイがサービス B に影響なく行えるか? → 影響が出るなら独立 DB が必要

  • 6 人チームで複数 DB の運用はオーバーヘッドが大きい → 境界が明確で今は共有でも可

  • 将来分離するコストも考慮する(シームレストランザクションが共有 DB を強制していないか)

実践的な指針

  • スキーマを論理的に分離(テーブルの所有権をサービスごとに明確化)すれば、物理 DB が共有でも疎結合に近い状態を維持できる

  • 他サービスのテーブルに直接 JOIN しない規律を守る

  • 急成長中であれば、スケールが求められる時点で独立 DB へ移行するロードマップを持つ