【まるちてなんと】

マルチテナント とは?

最終更新:
💡 1つのビルに複数の会社が「間借り」する

1つのシステムやインフラを複数の顧客(テナント)で共有するアーキテクチャ。SaaSでよく使われる。

📌 このページのポイント
シングルテナント vs マルチテナント シングルテナント 企業A専用 アプリ DB インフラ 企業B専用 アプリ DB インフラ 各社が専用環境を持つ コスト高・個別に設定しやすい マルチテナント 共有インフラ 共有アプリケーション 企業A 企業B 企業C テナントIDなどで分離 共有インフラ 1つの環境を複数社で共有 コスト低・隣の影響に注意 共有する範囲は層ごとに選べる (例: アプリは共有し、DBだけテナントごとに分ける)
マルチテナントアーキテクチャのイメージ
ひよこ ひよこ
シングルテナントとの違いは?
ペンギン先生 ペンギン先生
シングルテナントは顧客ごとに専用の環境を用意し、マルチテナントは1つの環境を複数の顧客で共有するんだ。「一戸建て」と「マンション」みたいな違いだね。共有するほどコストは下がりやすいけど、データの分け方や性能への影響をしっかり考える必要があるよ。
ひよこ ひよこ
データが他の会社に見えちゃわない?
ペンギン先生 ペンギン先生
そうならないように「テナント分離」を設計するのが重要なんだ。ログインできていて権限があっても、それだけで他のテナントのデータに届かないとは限らない。だからアクセスのたびに「どのテナントのリクエストか」を確かめて、そのテナントのデータだけに絞り込む仕組みを作るよ。データが混ざらないことをテストで確かめることも大事だね。
ひよこ ひよこ
データベースはどう分ける?
ペンギン先生 ペンギン先生
全テナントで1つのデータベースを共有してテナントIDで分ける方法から、テナントごとに別のデータベースを用意する方法まで、段階的に選べるよ。共有するほどコストは下がり、分けるほど分離は強くなるんだ。PostgreSQLの行レベルセキュリティのように、DB側で見える行を絞り込む機能を使うこともあるね。
ひよこ ひよこ
RLSを使えば安心?
ペンギン先生 ペンギン先生
設定しだいだよ。PostgreSQLでは、スーパーユーザーやBYPASSRLS属性を持つロールは常にRLSを通らず、テーブルの所有者も通常は対象外なんだ(所有者はFORCE ROW LEVEL SECURITYで対象にできる)。アプリがどのロールで接続しているかも確認しようね。
ひよこ ひよこ
「ノイジーネイバー問題」って?
ペンギン先生 ペンギン先生
共有している環境で、あるテナントが資源をたくさん使ったせいで、ほかのテナントの性能が落ちる問題だよ。「隣の部屋がうるさい」のと同じだね。テナントごとの使用量の監視、スロットリングやレート制限による上限の設定、負荷の大きいテナントを別の環境に移すことなどで対策するんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「マルチテナント」って出てきたら「1つのシステムを複数の顧客で共有する仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Multi-Tenant」 = 複数借用者
💬 Tenant(借用者・テナント)が複数(Multi)。賃貸ビルの各フロアに異なる会社が入居しているイメージだよ

参考資料

← 用語集にもどる