2015-12-28 3 views
14

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

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

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

Затем кто-то предложил использовать Multi Instance, где каждая компания будет иметь свой экземпляр приложения (то есть код, библиотеки, базы данных, фреймворки ... и т. Д.), Полностью отделенные от других компаний. Это звучит лучше, поскольку мне не нужно заботиться о дополнительном слое, где мне нужно убедиться, что пользователи каждого арендатора имеют доступ только к данным своей компании. Я думаю, что хорошо упомянуть, что я в зависимости от для достижения такого подхода (я никогда не использовал его раньше), но я думаю, что ему не хватает функций (подробнее об этом позже) мне понадобится в будущем (по крайней мере Я не нашел их с небольшим поиском).

Однако каждый подход имеет свои плюсы и минусы, поэтому я не мог принять решение, с каким подходом идти. Вот список, но голый со мной, поскольку мне не хватает знаний в них обоих, поэтому может быть что-то, что я не знаю, или решение проблемы, которую я не нашел в Интернете: [Каждый подход упорядоченный список которых я следовал один за другим сравнения]

Мульти Tenancy:

  1. Shared хост/аппаратных средств, общий код, и нескольких баз данных.
  2. Это проще, чтобы расширить функциональность кода и исправить ошибки (общий код).
  3. Это сложнее, чтобы расширить аппаратное обеспечение (может использовать облачный сервис) или переместить базу данных отдельного арендатора в другую систему без внесения изменений в код.
  4. Самое главное, как я уже упоминал ранее, мне нужно добавить дополнительный уровень в систему, чтобы убедиться, что пользователь действительно принадлежит его/ее компании и не имеет доступа к информации другой компании.

нескольких экземпляров:

  1. Shared или неразделенная хост/аппаратных средств, код каждого экземпляра и базы данных в экземпляре.
  2. Это сложнее, чтобы расширить функциональность или исправить ошибки (я не уверен, есть ли способ сделать это в Docker, где вы можете добавить функциональность/функцию в один экземпляр или контейнер Docker и развернуть его другим пользователям).
  3. Это проще, чтобы переместить весь экземпляр на другой хост/оборудование.
  4. В качестве экземпляра мне не нужно заботиться об этом слое, так как каждый экземпляр будет иметь свою собственную базу данных.

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

В случае, если это поможет (может быть?), Мы используем Laravel в качестве основной структуры для back-end (все RESTfully).

ответ

3

У других были проблемы раньше. Например. есть sth. там называется SaaS Maturity Model. Я думаю, что большинство успешных моделей началось с функциональности в первую очередь, а платформа стала второстепенной. Таким образом, я бы пошел с примером для каждой стратегии клиента. В любом случае, сколько клиентов будет в начале? Вероятнее всего, это терпит неудачу, потому что клиент не любит функциональность или потому, что вы используете несколько экземпляров, приходящих, конечно, с накладными расходами ops?

=> Сначала сосредоточиться на продукте/функциональности. Таким образом, цель для уровня 1, сосредоточиться на других уровнях позже.

С Докером (по крайней мере, с моей точки зрения, как с одним парнем, который не сделал много с ним): Артефакт вашей разработки - это изображение с загружаемым контейнером. Когда этот артефакт публикуется в репозитории, очень просто обновить все экземпляры, чтобы использовать этот новый артефакт. Так что с небольшим количеством сценариев и, возможно, с. например, Kubernetes он должен быть выполнен, чтобы переместить даже много экземпляров в новую версию. Поэтому я думаю, что новые разработки, такие как Docker, делают многопользовательские установки еще более выполнимыми.

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

  1. Наши клиенты очень заинтересованы в сохранении данных отдельно от конкурентов. Это намного проще показать с помощью стратегии нескольких экземпляров.
  2. Клиенты иногда хотят контролировать цикл выпуска. Например, они должны сообщать о изменениях функциональности для сотрудников или в процессе бизнес-процесса, что не позволяет обновить. Поэтому они могут захотеть подождать с новой версией или даже пропустить ее. Снова намного проще с экземпляром для каждого клиента.

Как всегда с такими вопросами, я даю свое мнение и свой опыт здесь. Это действительно зависит от вашего варианта использования - у SaaS много разнообразия.

+0

Спасибо. Я отвечу на ваши вопросы в начале. Вначале будут два клиента (компании), поэтому два экземпляра. По второму вопросу, просто еще один SaaS, это может быть успех или неудача, однако, по крайней мере, будут два клиента. Понятно, что все зависит от варианта использования, но модель зрелости, на которую вы ссылались, рассматривает решение с несколькими экземплярами как более низкий уровень (уровень 1) и другое решение для нескольких арендаторов (уровень 2) как более высокий уровень, но я не вижу этого. Он также ничего не упоминал о переходе от уровня к другому ... – Anas

6

Вам не нужны разные базы данных для каждого клиента, если они все равно будут иметь общие схемы. Большинство программ SaaS являются многопользовательскими и работают таким образом, общая база данных с логикой приложения, чтобы пользователи могли получать доступ только к тем, к которым им разрешен доступ. Например. В Facebook нет миллиардов баз данных, по одному для каждого пользователя, чтобы мы не могли видеть непубличные фотографии друг друга.

Кроме того, проблемы, которые вы пытаетесь решить, не выглядят так, как будто они должны иметь какое-либо отношение к переносимости вашего приложения или вашей способности переместить их в облако. Если вы treat backing services, e.g. database(s), as attached resources, то это не имеет значения, если у вас есть один или многие (хотя я по-прежнему рекомендую вам иметь только один).

Я бы рекомендовал прочитать 12-factor principles для разработки и развертывания SaaS. Они являются отличной отправной точкой для размышлений об архитектуре программного обеспечения, которое будет легко работать в среде с облачным интерфейсом. Я бы сосредоточился на решении бизнес-задач вашего программного обеспечения и его архитектуре облачным способом, например. по 12-факторным принципам.

Ничего о проблемах, о которых вы описали, свидетельствует о том, что Docker vs. not-Docker даже является актуальной проблемой в настоящее время. То есть все ваши предложенные подходы можно было бы сделать довольно точно с/без Docker. Docker решает проблемы изоляции процессов, упаковки зависимостей на уровне ОС, сокращения вычислительных ресурсов накладных расходов, согласованности между разработкой и производством и т. Д. И только кажется косвенно связанным с тем, что вы после.

+0

Спасибо за ваш ответ. Я понимаю, почему вы сказали, что мне не нужна база данных для каждого арендатора, поскольку у меня есть общая схема, но мое предположение зависело от двух вещей: Во-первых, арендатор мог иметь огромный объем данных в своем центре обработки данных, а другой - меньше. Таким образом, с меньшим количеством пострадает производительность (может быть?). Во-вторых, некоторым арендаторам может потребоваться расширенная услуга (нужна новая таблица), было бы проще включить это для одной базы данных арендатора (добавить код), чем в одну базу данных (необходимо изменить код) ... – Anas

+3

«Во-первых, у арендатора мог быть огромный объем данных в его/ее центре обработки данных, а у другого - меньше. Таким образом, у одного с меньшим количеством будет производительность (может быть?) «Или, может быть, нет? Есть лучшие решения для оптимизации запросов, чем другая база данных для каждого арендатора. «Во-вторых, некоторым арендаторам может потребоваться расширенный сервис (нужна новая таблица), было бы проще включить это для одной базы данных арендатора (добавить код), чем в одну базу данных (необходимо изменить код)». Для этого есть лучшие, более «облачные» шаблоны ... –

+4

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

3

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

Немногие другие причины, по которым я бы с Мульти Сдача в аренду

  1. Одна версия для создания и развертывания
  2. Share ресурсы, такие как кэширование
  3. Тестирование только одна версия приложения
  4. тестирование
  5. безопасности будет упрощенное
  6. Использовать CDN эффективно
Смежные вопросы