Подтвердить что ты не робот

Многократная аренда или несколько экземпляров?

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

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

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

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

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

Многоквартирный дом:

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

Multi Instance:

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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

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

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

Ответ 3

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

Несколько других причин, по которым я бы пошел с Multi Tenancy

  • Одна версия для сборки и развертывания
  • Поделиться ресурсами, такими как кеширование
  • Тестирование только одной версии вашего приложения
  • Тестирование безопасности будет упрощено.
  • Использовать CDN эффективно