Как реализовать мультитенантную систему на asp.net mvc?

Всем привет. В общем передо мной встала проблема реализации мультитенантной облачной системы. Разделять данные хочется на уровне баз данных (т.е. для каждого клиента своя база данных), но я не совсем представляю как это реализовать. Сейчас для доступа к данным использую Entity Framework, есть мысль подменять connectionString для разных тенантов, но возможно это не совсем верный ход мыслей?

И вторая часть вопроса. Хочется организовать доступ к данных с разных адресов, т.е. у клиента1 домен вида site1.ru, у клиента2 домен site2.ru и т.д. Сайты могут отличаться друг от друга визуально, но функционально все одинаковые. Возможно ли реализовать такую схему в asp.net mvc? Причем хочется добавлять новых клиентов без перекомпиляции всей системы. Мне приходит вариант с area'ми, но тогда при добавлении нового клиента придется все перекомпилять.

Буду благодарен за любую информацию, заранее спасибо!
  • Вопрос задан
  • 694 просмотра
Решения вопроса 2
dmitry_pavlov
@dmitry_pavlov
World-class .NET freelance contractor (remotely)
Логику вынести в API (WebAPI), к ней обращайться из ASP.NET MVC приложений, которые хостятся под разными доменами и при каждом обращении API будут передавать помимо прочих параметров два дополнительных - откуда запрос (чтобы идентифицировать домен) и кто спрашивает (чтобы идентифицировать пользователя).

Логика в API на основании домена и пользователя будет соответственно использовать нужную базу данных. Можно соответствие домена/пользователя и его базы хранить в служебной базе данных. Там же - хранить данные о пользователях и прочую общую служебную информацию.

Если структура баз данных для каждого пользователя одинаковая, то логикак обработки будет единой. При добавлении нового пользователя - достаточно будет задеплоить на домен новое ASP.NET MVC приложение, настроить его на адрес API, в служебной завести необзодимые данные. Если база под каждого пользователя создается автоматически программно - то все. Если нет - еще базу создать.

CMS пишете?
Ответ написан
@mletov

И вторая часть вопроса. Хочется организовать доступ к данных с разных адресов, т.е. у клиента1 домен вида site1.ru, у клиента2 домен site2.ru и т.д. Сайты могут отличаться друг от друга визуально, но функционально все одинаковые. Возможно ли реализовать такую схему в asp.net mvc? Причем хочется добавлять новых клиентов без перекомпиляции всей системы. Мне приходит вариант с area'ми, но тогда при добавлении нового клиента придется все перекомпилять.


В общем виде можно сделать так:
Завести таблицу в базе типа ClientSettings, а в ней поля domain, template и пр, которые влияют на содержимое и отображение. Даль по HTTP_HOST вытаскивать настройки из этой таблицы и на их основе показывать нужный контент в нужном дизайне. Обработчик при этом остается единым.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы