Наиболее подходящий веб-фреймворк для мультитенантных / мульти-шаблонных приложений SAAS - PullRequest
4 голосов
/ 19 мая 2011

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

Требования

  1. Единый источник кода. (у каждого клиента будет субдомен или отдельный домен, но все должны работать с одной и той же кодовой базой и одинаковыми серверами)
  2. Должен быть в состоянии обновить источник программирования один раз и сделать так, чтобы все арендаторы подняли его
  3. Информация о сеансе должна храниться в кэшированном хранилище или просто в файлах cookie (без общего состояния)
  4. Встроенная функциональность мультитенантной базы данных (в зависимости от домена, используемого для доступа к приложению, платформа должна автоматически использовать информацию о подключении к базе данных, назначенную этому домену)
  5. Каждый клиент / домен может иметь свой собственный шаблон для веб-страниц. Шаблоны должны назначаться индивидуально для каждого клиента и храниться вне кода приложения
  6. Безопасность и быстрое создание прототипов важнее скорости
  7. Будет много экранов типа CRUD, поэтому для этого нужна простая встроенная функциональность

У меня довольно продолжительный опыт работы с Java и PHP, но я бы рассматривал PHP только в качестве последнего средства для этого. Мой опыт работы с Scala, Python и Ruby немного грубее, но я не возражаю против того, чтобы набрать скорость, если они предлагают значительное преимущество. Я посмотрел на Play! Структура и как она (выполняет # 1, # 2, # 6 очень хорошо), но аспекты с несколькими арендаторами не очень сильны. Я сделал несколько проектов с использованием Grails, и он обрабатывает все, кроме # 3 и # 5, и может быть взломан, чтобы сделать все остальное.

Ответы [ 4 ]

3 голосов
/ 21 ноября 2011

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

Многопользовательская среда в Grails довольно зрелая и намного менее навязчива, чем решение из блога в ответе Себастьяна.Независимо от того, используете ли вы один клиент (несколько баз данных) или несколько клиентов, он более или менее прозрачен для вашего кода, и большая часть головной боли устраняется.Имейте в виду, что вам нужно выполнить некоторую интеллектуальную индексацию (например, включить идентификатор клиента в многостолбцовый индекс и т. Д.), Чтобы не получить очень печальные скорости, когда ваши данные начинают расти.

Что касается внешних представлений, вы можетеЛибо добавьте их в базу данных, либо вставьте символическую ссылку в свое веб-приложение и просто храните их в отдельных пронумерованных папках.Затем из плагина клиента вы можете использовать TenantUtils.getCurrentTenant() и просто выполнить рендеринг из соответствующей папки "/" + (tenantID ?: "default") + "/whatever/view/path".Таким образом, макеты и т. Д. Могут быть разделены между арендаторами, если вы того пожелаете, и вы просто помещаете специфические вещи арендатора в папки, специфичные для арендатора.

Возможно, вы тоже можете делать это в игре, или, но я не вижувсе, что мешает вам делать это в Grails.

Мои $ 0,02 на этот вопрос.

1 голос
/ 10 июня 2011

На самом деле играть!хорошо вписывается в то, что вы ищете.

Прочитайте этот пост: http://www.lunatech -research.com / archives / 2011/03/04 / play-framework-writing-multitenancy-application-hibernate-фильтры

Отлично работает.Вы можете даже заставить этот фильтр работать так, чтобы вы могли предоставлять клиенту модуль crud, и они будут получать только свои собственные данные ...

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

0 голосов
/ 28 января 2014

В PHP вы можете использовать Innomatic Platform для создания мультитенантных (изолированных баз данных) приложений: http://www.innomatic.org

0 голосов
/ 12 февраля 2012

Я слышал, что плагин Grails ' Multi-Tenant предлагает несколько хороших инструментов для нескольких различных методов многопользовательской аренды.

"Каждый клиент / домен может иметь свой собственный шаблон для веб-страниц. Шаблоны должны присваиваться каждому клиенту и храниться вне кода приложения "

Полагаю, вы имеете в виду, что у каждого из них свой макет / скин. Есть несколько методов, чтобы выполнить это:

  • Вы можете вручную назначить макеты на основе арендатора. <meta name="layout" content="${tenantName}/main" />

  • Напишите свой собственный осведомленный об арендаторе LayoutDecoratorMapper и переопределите значение по умолчанию GrailsLayoutDecoratorMapper в sitemesh.xml

  • Узнайте, как переопределить и улучшить. Некоторые внутренние инструменты динамически разрешают представления (для каждого владельца) или ресурсы (GrailsViewResolver, GrailsConventionGroovyPageLocator, GrailsResourceLoader и т. Д.)

...