лучший подход для мультитенантного приложения SaaS

Я пытаюсь создать приложение SaaS с несколькими арендаторами, и я знаю, что есть несколько подходов к этому, но я выбрал вариант с несколькими базами данных, который, как мне кажется, подойдет больше всего.

поэтому я создаю базу данных для каждого клиента и сохраняю таблицу клиентов в основной базе данных и подключаю пользователей к их соответствующей базе данных на основе поддомена.

Теперь моя проблема здесь в том, где хранить пользователей, в основной базе данных? или tenant db, хранение пользователей в основной db затруднит получение моделей, связанных с пользователем, в других db, но хранение их внутри tenants db затруднит аутентификацию для всех пользователей ...

также какой сценарий лучший?

  1. пройти аутентификацию, получить токен jwt.
  2. отправлять токен с каждым запросом.
  3. при каждом запросе проверяйте токен, проверяйте субдомен, подключайтесь к соответствующему клиенту db, выполняйте запрос.

это хороший подход? что мне делать с проблемой таблицы пользователей? ThnQ


person Sherif    schedule 30.08.2016    source источник
comment
хранение его внутри tenants db затруднит аутентификацию для всех пользователей. Зачем вам это нужно?   -  person Alex Howansky    schedule 30.08.2016
comment
возможно, я не прояснил это ... если я сохраню его в tenants db, когда пользователь входит в первый раз, не указывая, какой арендатор. как мне узнать, из какой базы данных проходить аутентификацию?   -  person Sherif    schedule 30.08.2016
comment
Либо заставьте их явно указать клиента, используя идентификаторы пользователя, которые выглядят как электронные письма (например, [email protected]), либо неявно определите клиента, посмотрев на доменное имя, которое обслужило запрос. В любом случае вы хотите, чтобы ваши идентификаторы пользователей были уникальными для каждого клиента, а не для всех из них. То есть, если кто-то устанавливает идентификатор пользователя bob в арендаторе №1, это не должно мешать кому-либо другому использовать идентификатор пользователя bob в арендаторе №2.   -  person Alex Howansky    schedule 30.08.2016
comment
Я знаю, что вы используете несколько баз данных, но если вы решите переключиться на одну базу данных, я бы посоветовал взглянуть на Landlord, что отлично подходит для Saas-платформ. Просто мысль, удачи.   -  person camelCase    schedule 30.08.2016


Ответы (2)


Могу предложить третий вариант. У пользователя есть как в арендаторе, так и в основной БД. Затем вы можете создать процедуру для обновления основной базы данных, когда пользователь меняет базу данных клиента (или наоборот).

Кроме того, я не знаю моделей в Laravel, но MySQL не имеет проблем с подключениями к кросс-базам данных.

person Tomáš Jacík    schedule 30.08.2016
comment
Я посмотрю на соединения MYSQL cross db, но я стараюсь избегать дублирования данных, я думаю, что это плохая практика - person Sherif; 30.08.2016
comment
Это зависит. В мультитенантном приложении иногда лучше иметь несколько данных для повышения производительности. Что делать, если одного сервера будет недостаточно? Вы можете просто разделить базы данных клиентов между несколькими серверами db, но вам все равно нужно, чтобы все они были в основной базе данных. - person Tomáš Jacík; 30.08.2016

Хорошим вариантом будет сохранение пользователей в базе данных арендаторов. Поскольку вы различаете своего клиента на основе поддомена, вы можете указать своей системе аутентификации запросить базу данных, специфичную для поддомена.

Совместное использование потока аутентификации

  1. Пользователь попадает в поддомен для входа в приложение
  2. Учетные данные будут отправлены в приложение.
  3. Перед передачей учетных данных для аутентификации выберите базу данных для аутентификации пользователя на основе поддомена, из которого пришел пользователь.
  4. Передайте имя базы данных, учетные данные пользователя в систему аутентификации
  5. Система аутентификации запрашивает конкретную базу данных и аутентифицирует пользователя
  6. Создать сеанс
person Ketan Ghumatkar    schedule 02.06.2017