Django を使用してマルチテナント アプリケーションを作成するために人々が使用する一般的なパターンはありますか。組み込みの「サイト」フレームワークはオプションのようです。人々が成功した他のアプローチはありますか?
2 に答える
各サイト インスタンスに一意のテーブルを与えると仮定すると、サイト フレームワークを使用すると、「テナント」にセキュリティ保証を提供するのに大いに役立ちます。
一方、テナント数が少ない場合は、顧客が使用していない場合でも、顧客ごとに少なくとも 1 つのサーバー プロセスが必要になるため、膨大な量のサーバー リソースを浪費することになるため、大きな手間がかかります。システム。多数のテナントがある場合は、アプローチに関係なくソリューションを自動化する必要があるため、それほど面倒ではありません。
ほとんどすべてのモデルにテナント外部キーを配置しても問題なく機能し、Django の ORM を使用すると、カスタム マネージャーを使用してセキュリティを簡単に (簡単に?) 適用できます。欠点は、スケールアップする簡単な方法がないため、多くのユーザーに悩まされ始めた場合のパフォーマンスです。
スケーリングが必要な場合は、両方のアプローチを組み合わせることが最善の解決策になると思います。すべてのモデルにはテナントの外部キーがあるため、データベースを共有できますが、Django よりも高いレベルで何らかのメカニズムを開発して、顧客をサイト インスタンスにルーティングします。これにより、非常に大きなテナントを独自のデータベースに適切に調整したリソース (たとえば、適切な数の mod_wsgi デーモン、データベース接続の数、適切なサイズの memcache プールなど) を配置し、小さなテナントは共通のリソースを共有できます。
https://github.com/bcarneiro/django-tenant-schemasをご覧ください 。プロジェクト インスタンスは 1 つしかないため、コードに多くの変更を加える必要はありません。