Перейти к содержимому
akitoo
Технические статьи

Мультитенантная архитектура в SaaS: три подхода и критерии выбора

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

Alp3 мин чтения

В SaaS-продуктах одно приложение обслуживает множество клиентов. Каждого клиента называют «тенантом» (tenant), и свои данные должен видеть только он сам. То, как будут разделены данные тенантов, — архитектурное решение, которое годами влияет на стоимость продукта, его безопасность и эксплуатационную нагрузку.

Три основных подхода

1. Общая база данных, общая схема

Данные всех тенантов лежат в одних и тех же таблицах; каждая строка содержит поле, которое указывает, какому тенанту она принадлежит. Каждый запрос фильтруется по этому полю. Это самый простой в развёртывании и эксплуатации подход с самым эффективным использованием ресурсов.

Его риск в том, что единственный запрос, в котором забыли о фильтрации, может показать данные другого тенанта. Этот риск снижают, не оставляя фильтрацию на усмотрение кода приложения, а делая её обязательной на уровне базы данных; например, для этого используется защита на уровне строк в PostgreSQL.

2. Общая база данных, отдельная схема для каждого тенанта

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

3. Отдельная база данных для каждого тенанта

У каждого тенанта своя база данных. Изоляция максимальна; интенсивное использование одним тенантом не влияет на остальных, и можно выполнить такие требования, как хранение данных в определённом регионе. Цена этого — более высокая стоимость инфраструктуры и эксплуатационная нагрузка, связанная с управлением большим числом баз данных.

Сравнение

КритерийОбщая схемаОтдельная схемаОтдельная база данных
Изоляция данныхЛогическаяБолее сильнаяСамая сильная
Стоимость на одного тенантаСамая низкаяСредняяСамая высокая
Изменение схемыЗа один разДля каждой схемыДля каждой базы данных
Резервная копия и восстановление для отдельного тенантаСложноПростоПроще всего
Большое число небольших тенантовОчень подходитОграниченноНе подходит
Небольшое число крупных корпоративных тенантовМожет быть достаточноПодходитОчень подходит

Что определяет выбор?

  • Профиль клиентов: Вы будете обслуживать тысячи небольших компаний или небольшое число крупных организаций?
  • Требования договоров и законодательства: Ставят ли клиенты условием физически раздельное хранение своих данных?
  • Уровень кастомизации: Тенанты будут менять только настройки или захотят собственные поля и рабочие процессы?
  • Возможности команды: Есть ли у вас эксплуатационные ресурсы, чтобы отслеживать и обновлять большое число баз данных?

Гибридная модель

Подходы можно использовать и вместе. Распространённый вариант — держать клиентов на стандартных тарифах в общей схеме, а корпоративным клиентам предлагать отдельную базу данных. Чтобы это было возможно, информация о тенанте должна с самого начала передаваться через все слои приложения.

О чём нужно подумать помимо базы данных

  • Идентификация и права доступа: Должно быть точно известно, какому тенанту принадлежит каждый сеанс; если пользователи могут состоять в нескольких тенантах, переключение между ними должно быть выстроено безопасно.
  • Разделение ресурсов: Интенсивное использование одним тенантом не должно замедлять остальных. Для этого применяются лимиты запросов и квоты на фоновые задачи для каждого тенанта.
  • Файлы и кеш: Изоляция должна обеспечиваться не только в базе данных, но и в файловом хранилище, кеше и поисковом индексе.
  • Мониторинг: Журналы ошибок и производительности должны содержать информацию о тенанте; иначе вопрос «какой клиент пострадал?» останется без ответа.
Для большинства SaaS-продуктов общая схема — правильное начало; важно выстроить её так, чтобы в будущем она не мешала переходу на отдельную базу данных.

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

Далее

Материалы по теме

Технические статьи

Веб-приложение, мобильное приложение или PWA: что и когда выбрать?

Одну и ту же потребность можно закрыть и веб-приложением, работающим в браузере, и мобильным приложением, которое скачивают из магазина. Сильные и слабые стороны трёх подходов и критерии выбора.

Технические статьи

Что такое API-интеграция? Методы и на что обратить внимание

Как системы общаются друг с другом? Запрос в реальном времени, вебхук, пакетная передача и очередь сообщений — и вопросы, которые нужно продумать заранее, чтобы интеграция была надёжной.

Технические статьи

Когда разработка мобильного приложения на Flutter — правильный выбор?

Flutter позволяет разрабатывать приложения для iOS и Android на единой кодовой базе. Но подходит ли он для каждого проекта? Ситуации, в которых он силён, и ситуации, требующие внимания.

Контакты

У вас есть идея?Давайте воплотим её вместе.

Обсудим ваш проект
Обсудим ваш проект