В настоящее время я изучаю преобразование однопользовательского веб-приложения на основе Java, которое использует Spring, GWT, Hibernate, Jackrabbit, Hibernate Search/Lucene (среди прочих) в полноценное приложение стиля SaaS.
Я наткнулся на статью, в которой подчеркиваются следующие 7 "вещей" как важные изменения, сделанные для одного приложения-арендатора, чтобы сделать его SaaS-приложением:
- Приложение должно поддерживать мульти-аренда.
- Приложение должно иметь некоторый уровень регистрации самообслуживания.
- Должен быть установлен механизм подписки/выставления счетов.
- Приложение должно иметь возможность эффективно масштабировать.
- Должны быть предусмотрены функции для мониторинга, настройки и управления приложением и арендаторами.
- Должен существовать механизм поддержки уникальной идентификации пользователя и аутентификации.
- Должен существовать механизм для поддержки определенного уровня настройки для каждого арендатора.
Мой вопрос: кто-нибудь выполнил любую из вышеуказанных 7 вещей в приложении SaaS/multi-tenant, используя аналогичные технологии для тех, которые я перечислил? Я очень хочу получить столько информации о наилучших способах сделать это, прежде чем я пойду по тому пути, который я сейчас рассматриваю.
В начале я совершенно уверен, что у меня есть хороший способ управления несколькими арендаторами на уровне модели. Я собираюсь добавить идентификатор арендатора ко всем нашим таблицам, а затем использовать фильтр Hibernate (и полнотекстовый фильтр для поиска в спящем режиме) для фильтрации на основе идентификатора арендатора пользователя во всех запросах.
У меня, однако, есть некоторые проблемы с производительностью, особенно когда наше количество арендаторов растет довольно высоко.
Любые предложения о том, как реализовать такое решение, будут очень благодарны (и я приношу свои извинения, если этот вопрос слишком открыт).