Wingtip Tickets SaaS アプリケーション

適用対象: Azure SQL データベース

同じ Wingtip Tickets SaaS アプリケーションが、3 つのサンプルの各々に実装されています。 このアプリは、シアター、クラブなど小規模の場所を対象とする SaaS アプリを一覧表示しチケット発行する、単純なイベントです。それぞれの場所はアプリのテナントで、会場の詳細、イベント一覧、顧客、チケット注文などの独自のデータを持ちます。このアプリは、管理スクリプトとチュートリアルと共に、1 つの完全な SaaS シナリオを示します。 これには、テナントのプロビジョニング、パフォーマンスの監視と管理、スキーマ管理、およびテナント間のレポートと分析が含まれます。

3 つの SaaS アプリケーションとテナント パターン

このアプリには 3 つのバージョンがあります。それぞれが、Azure SQL Database 上で異なるデータベース テナント パターンを探求します。 1 つ目では、独自のデータベースを持つテナントごとのスタンドアロン アプリケーションを使用します。 2 つ目では、テナントごとにデータベースを持つマルチテナント アプリを使用します。 3 つ目のサンプルは、シャードされたマルチテナント データベースを持つマルチ テナント アプリを使用します。

3 つのテナント パターン

各サンプルには、アプリケーション コードに加え、設計パターンと管理パターンの範囲を紹介する管理スクリプトとチュートリアルが含まれています。 各サンプルは、5 分未満でデプロイされます。 3 つすべてを並行してデプロイできるので、設計と管理の違いを比較できます。

テナントごとのスタンドアロン アプリケーション パターン

テナントごとのスタンドアロン アプリ パターンは、各テナント用に 1 つのデータベースがあるシングル テナント アプリケーションを使用します。 各テナントのアプリは、そのデータベースも含めて、別々の Azure リソース グループにデプロイされます。 リソース グループはサービス プロバイダーのサブスクリプションまたはテナントのサブスクリプション内にデプロイでき、テナントに代わってプロバイダーが管理できます。 テナントごとのスタンドアロン アプリ パターンはテナントを最大限に分離させますが、複数のテナント間でリソースを共有する機会がないため、通常は最もコストが高くなります。 このパターンは、少数のテナントにデプロイされる複雑なアプリケーションに適しています。 スタンドアロン デプロイでは、他のパターンに比べ、各テナントに合わせてアプリを簡単にカスタマイズできます。

チュートリアルおよび GitHub .../Microsoft/WingtipTicketsSaaS-StandaloneApp 上のコードを確認してください。

テナントごとのデータベース パターン

テナントごとデータベースのパターンが効果的なのは、テナントの分離を考慮し、共有リソースの費用対効果の高い使用ができる一元的なサービスを実行したいサービス プロバイダーです。 場所またはテナントごとにデータベースが作成され、すべてのデータベースが一元的に管理されます。 データベースはエラスティック プールにホストされて、高い費用対効果と簡単なパフォーマンス管理を実現できますが、これはテナントの予期できないワークロード パターンを活用しています。 カタログ データベースには、テナントとそのデータベースの間のマッピングが格納されます。 このマッピングは、Elastic Database クライアント ライブラリのシャード マップ管理機能を使用して管理されており、アプリケーションへの効率的な接続管理を提供します。

チュートリアルおよび GitHub .../Microsoft/WingtipTicketsSaaS-DbPerTenant 上のコードを確認してください。

シャード マルチテナント データベース パターン

マルチテナント データベースは、テナントあたりのコスト削減を求めていて、テナント分離は減らしてもよい、というサービス プロバイダーに効果的です。 このパターンでは、1 つのデータベースに多数のテナントを包含することができ、テナントごとのコストを削減します。 複数のデータベース間でテナントをシャーディングすることにより、ほぼ無限のスケールが可能です。 カタログ データベースは、テナントをデータベースにマップします。

このパターンではハイブリッド モデルも可能で、1 つのデータベース内の複数テナントでコストを最適化したり、独自のデータベース内の 1 つのテナントで分離を最適化したりすることもできます。 この選択は、テナントのプロビジョニング時あるいはその後のどちらでも、アプリケーションに影響を与えずに、テナントごとに可能です。 このモデルは、テナントのグループを異なる方法で処理する必要がある場合に効果的に使用できます。 たとえば、低コストのテナントを共有データベースに割り当て、プレミアム テナントを独自のデータベースに割り当てることができます。

チュートリアルおよび GitHub .../Microsoft/WingtipTicketsSaaS-MultiTenantDb 上のコードを確認してください。

次のステップ

概念の説明

チュートリアルとコード