Что следует иметь в виду при разработке мультитенантного MVC-приложения asp.net? - PullRequest
10 голосов
/ 11 февраля 2011

Добрый день - у меня сегодня довольно общий вопрос - мне было поручено создать веб-приложение для управления некоторой базовой информацией о клиентах.Это очень простое приложение, но я не знаю, что нужно иметь в виду, чтобы разработать сайт, поддерживающий поддержку нескольких пользователей на их собственных доменах или поддоменах нашего URL-адреса?

Как мне запретить пользователям входить в систему?в каждой другой части приложения?

Я видел упоминание о области баз данных в аналогичных вопросах о переполнении стека, кто-нибудь мог бы рассказать о передовых методах такой реализации?

какие-нибудь новые функции в MVC3 для поддержки мультитенантности?Я столкнулся с этой проблемой с MVC2 и моим сайтом электронной коммерции, где мы решили, что мы хотим, чтобы он был белым и настраиваемым для нескольких владельцев магазинов, и не знаю, с чего начать реализацию этих функций в существующем приложении.Любой вклад приветствуется.

edit

Чтобы подробно остановиться на том, что я имею в виду, в контексте магазина, например, несколько пользователей подписываются на своисобственный магазин на www.mystore.com, и каждому из них предоставляется уникальный поддомен для доступа к своему собственному экземпляру магазина, на user1.mystore.com, user2.mystore.com и т. д. В каждом магазине будут клиенты с историей заказов, и эти клиентыбудет иметь логины.Мне нужно было бы ограничить пользователей user1.mystore.com от входа в user2.mystore.com без новой учетной записи, а также запретить user2.mystore.com доступ к истории клиентов user1.mystore.com.

Ответы [ 3 ]

20 голосов
/ 11 февраля 2011

Я реализовал полное мультитенантное приложение MVC.Вот некоторые ссылки, которые я нашел полезными, и некоторые примеры приложений:

http://msdn.microsoft.com/en-us/library/aa479086.aspx

http://codeofrob.com/archive/2010/02/14/multi-tenancy-in-asp.net-mvc-controller-actions-part-i.aspx

http://www.developer.com/design/article.php/10925_3801931_2/Introduction-to-Multi-Tenant-Architecture.htm

http://msdn.microsoft.com/en-us/library/aa479086.aspx#mlttntda_cc

http://lukesampson.com/post/303245177/subdomains-for-a-single-application-with-asp-net-mvc

http://code.google.com/p/multimvc/

http://www.paulstovell.com/widgets

http://www.agileatwork.com/bolt-on-multi-tenancy-in-asp-net-mvc-with-unity-and-nhibernate/

http://ayende.com/blog/3530/multi-tenancy-approaches-and-applicability

http://weblogs.asp.net/zowens/archive/tags/Multi-tenancy/default.aspx

http://cloudsamurai.codeplex.com/

http://cloudninja.codeplex.com/

http://msdn.microsoft.com/en-us/library/hh534484.aspx

http://blog.maartenballiauw.be/post/2009/05/20/ASPNET-MVC-Domain-Routing.aspx

http://blog.tonywilliams.me.uk/asp-net-mvc-2-routing-subdomains-to-areas

Даже начиная с нуля, вам грозит мир боли.Среда MVC делает очень мало, чтобы помочь вам решить проблемы.

7 голосов
/ 11 февраля 2011

Скорее всего, вы собираетесь потратить немало времени на реструктуризацию своей базы данных.

Первый шаг - создание таблицы для размещения списка «Арендатор».Затем вам нужно добавить этот TenantId практически к каждой таблице в вашей системе, чтобы никто не наступал друг на друга.Вы можете пропустить любые таблицы, которые имеют глобальный характер.Одним из примеров может быть список кодов состояния.

Однако все, от пользователей до данных, которые они имеют, и т. Д. Должны иметь этот идентификатор.Кроме того, измените все свои индексы, чтобы учесть тенантид.

Как только вы это сделаете, вам нужно будет изменить все ваши запросы, чтобы учесть тенантид.

Один столбецтаблица арендаторов должна быть URL портала.Как customername.oursite.com или что-то еще.Таким образом, вы можете указать несколько ссылок на один и тот же код.Когда сайту нужно использовать текущий tenantid, просто посмотрите его по URL-адресу, который был передан.

Если бы я делал это, я планировал бы тратить 1-2 часа на таблицу в базе данных, чтобысделать это "мультитенант".Очевидно, что некоторые таблицы (и их запросы) будут работать быстрее;другие займут больше времени.

Кстати, это не касается таких вещей, как настройка пользовательского интерфейса (внешнего вида) для каждого арендатора или чего-либо подобного.Если вам нужно сделать это, то вам нужно будет либо создать на сервере каталог для каждого арендатора, в котором будут храниться их таблицы стилей, либо загрузить его непосредственно из БД (которая имеет свои проблемы с кэшированием).

Как правило, вы разрабатываете это в начале проекта.Переоборудование уже (или почти) завершенного проекта - это PITA.

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

1 голос
/ 11 февраля 2011

Некоторые разговоры о поддержке нескольких арендаторов в Sharp Architecture (на основе MVC 3) можно найти здесь: http://www.yellowfeather.co.uk/2011/02/multi-tenancy-on-sharp-architecture-revisited/

Не уверен, если это действительно поможет вам с вашим существующим приложением, перенос через порт будет немного трудным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...