私は現在、Spring、GWT、Hibernate、Jackrabbit、Hibernate Search / Lucene(とりわけ)を使用するシングルテナントのJavaベースのWebアプリを本格的なSaaSスタイルのアプリに変換することを検討しています。
SaaSアプリにするために単一のテナントアプリに加える重要な変更として、次の7つの「もの」を強調する記事に出くわしました。
- アプリケーションはマルチテナンシーをサポートする必要があります。
- アプリケーションには、ある程度のセルフサービスサインアップが必要です。
- サブスクリプション/請求メカニズムが整っている必要があります。
- アプリケーションは効率的に拡張できる必要があります。
- アプリケーションとテナントを監視、構成、および管理するための機能が整っている必要があります。
- 一意のユーザーの識別と認証をサポートするメカニズムが必要です。
- テナントごとにある程度のカスタマイズをサポートするメカニズムが必要です。
私の質問は、私がリストしたものと同様のテクノロジーを使用して、SaaS /マルチテナントアプリに上記の7つのことのいずれかを実装した人はいますか?私は、現在検討している道を進む前に、そうするための最良の方法についてできるだけ多くの意見を得ることに熱心です。
まず、モデルレベルで複数のテナントを処理する方法を十分に理解していると確信しています。すべてのテーブルにテナントIDを追加してから、Hibernateフィルター(およびHibernate Searchのフルテキストフィルター)を使用して、ログオンしているユーザーのすべてのクエリのテナントIDに基づいてフィルター処理することを考えています。
ただし、特にテナント数が非常に多くなった場合は、パフォーマンスについても懸念があります。
このようなソリューションを実装する方法についての提案は大歓迎です(そして、この質問が少し自由すぎる場合はお詫びします)。