Узнать стоимость

Blog

Архитектура SaaS-платформы: модели изоляции данных клиентов

Разбираем модели мультитенантности SaaS: общая схема, отдельные схемы и базы, изоляция данных, эксплуатация, миграции и критерии выбора.

  • 20.07.2026
  • Автор: команда Paladin
К списку статей

Слои мультитенантной архитектуры SaaS-платформы

SaaS-платформу разумно проектировать не с вопроса «одна база или много», а с требований к изоляции клиентов, стоимости эксплуатации и скорости изменений. Для большинства новых B2B-продуктов подходит общая инфраструктура с явным tenant_id, централизованной авторизацией и автоматическими проверками границ тенанта. Отдельные схемы, базы или контуры нужны не «для солидности», а когда этого требуют регуляторика, объём нагрузки, договорные условия или цена возможной ошибки. Самая дорогая проблема здесь — не выбранный облачный сервис, а архитектура, в которой изоляцию нельзя проверить и безопасно изменить.

Что означает мультитенантность

Тенант — организация-клиент, чьи пользователи, настройки и данные обслуживает одна платформа. Мультитенантная система разделяет вычислительные ресурсы между клиентами, но обязана сохранять логическую или физическую границу их данных. AWS SaaS Lens рассматривает идентичность тенанта, онбординг, метрики и операции как связанные части SaaS-архитектуры [1]. Microsoft описывает мультитенантность как спектр моделей, а не единственный шаблон [2].

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

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

Нужна оценка архитектуры SaaS до разработки? Paladin Engineering может провести короткое обследование требований, выделить риски изоляции и подготовить варианты целевой схемы с последствиями для бюджета и эксплуатации.

Три базовые модели хранения данных

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

Общие таблицы

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

Для PostgreSQL дополнительной линией защиты может служить Row-Level Security. Документация PostgreSQL поясняет, что при включённой защите строки становятся доступны только по политикам, а при отсутствии политики действует запрет по умолчанию [3]. RLS не заменяет корректную авторизацию: владельцы таблиц и роли с BYPASSRLS имеют особенности, которые надо учитывать в модели угроз и тестах.

Отдельные схемы

Схема на тенанта облегчает некоторые операции экспорта и удаления, но быстро увеличивает число объектов. Каждое изменение структуры приходится применять ко всем схемам, контролировать частично завершённые миграции и поддерживать совместимость версий. Модель оправдана, если команда заранее построила автоматизированный lifecycle тенанта, а не рассчитывает обслуживать схемы вручную.

Отдельные базы или контуры

Наиболее сильная граница полезна для крупных клиентов и специальных требований. Но она переносит сложность в управление конфигурациями, секретами, обновлениями, резервным копированием и мониторингом. Если у каждого клиента появляется «почти своя версия», платформа превращается в набор заказных внедрений и теряет экономику SaaS.

Изоляция проходит через весь запрос

Надёжная схема начинается с единого источника контекста тенанта. После аутентификации сервер получает подтверждённые идентификаторы пользователя и организации. Нельзя доверять tenant_id, который клиентское приложение прислало в теле запроса. Далее контекст передаётся в бизнес-логику, запросы к данным, очередь задач, хранилище файлов и журнал аудита.

Минимальный контрольный список:

  • членство пользователя в организации проверяет сервер;
  • идентификатор тенанта есть во всех доменных сущностях, где он нужен;
  • уникальные индексы учитывают тенанта, например (tenant_id, external_id);
  • фоновые задачи несут подтверждённый контекст тенанта;
  • пути объектов в файловом хранилище и правила доступа разделены;
  • кэш не возвращает результат соседней организации;
  • логи, метрики и трассировка позволяют расследовать инцидент по тенанту;
  • интеграционные тесты пытаются получить чужую запись по известному ID;
  • административный доступ ограничен, записывается и проверяется.

Полезно отдельно проверять «боковые» каналы: поиск, экспорт, автодополнение, уведомления, вебхуки, аналитические витрины. Именно они часто обходят общий слой репозитория и создают незаметный путь к данным другого клиента.

Наблюдаемость и «шумный сосед»

Средняя загрузка системы мало говорит о качестве SaaS. Нужно видеть потребление по тенантам: частоту запросов, задержки, объём очередей, ошибки, размер данных и дорогостоящие операции. Тогда можно отличить общий сбой от поведения одного крупного клиента.

Защита от «шумного соседа» строится слоями: лимиты на API, квоты на фоновые операции, раздельные очереди или приоритеты, таймауты, контроль сложных запросов. Для особо тяжёлого тенанта возможен перенос в выделенный пул без изменения пользовательской модели. Microsoft прямо предлагает рассматривать разные паттерны развёртывания и смешивать их по требованиям, а не искать один универсальный вариант [2].

Вывод автора — непроверенный до нагрузочного теста. Гибридная модель часто становится разумным целевым состоянием: основная масса клиентов работает в общем пуле, а отдельные организации переводятся в выделенные ресурсы по формальным критериям.

Как выбрать модель без преждевременного усложнения

Перед решением соберите ответы на шесть вопросов:

  1. Есть ли юридическое требование к физическому размещению или отдельному резервному копированию данных?
  2. Каков ожидаемый разброс нагрузки между самым маленьким и самым крупным клиентом?
  3. Нужны ли индивидуальные сроки обновлений или изменения схемы?
  4. Как быстро должна выполняться выгрузка и гарантированное удаление данных клиента?
  5. Какой простой допустим и кто несёт ответственность по SLA?
  6. Сколько изолированных контуров команда способна обновлять и наблюдать автоматически?

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

Как Paladin Engineering может помочь

Мы проектируем веб-системы и корпоративные платформы от требований до эксплуатации. Для SaaS-проекта можем описать модель тенанта и ролей, спроектировать API и данные, собрать прототип критического сценария, настроить CI/CD, мониторинг и тесты изоляции. Если продукт уже работает, начнём с архитектурного аудита: найдём места, где контекст тенанта теряется, а ручные операции мешают масштабированию.

Смежные материалы и услуги: разработка веб-сервисов, интеграция информационных систем и разработка корпоративных порталов.

Хотите понять, нужна ли вам общая база или выделенные контуры? Напишите в Telegram или пришлите описание пользователей, данных, интеграций и требований к размещению. Мы подготовим варианты архитектуры и укажем, какие допущения надо подтвердить до оценки сроков.

FAQ

Можно ли безопасно хранить данные всех клиентов в одной базе?

Да, если логическая изоляция реализована во всех путях доступа и регулярно тестируется. Решение зависит от модели угроз и договорных требований; одна база сама по себе не означает ни безопасность, ни её отсутствие.

Достаточно ли добавить tenant_id во все таблицы?

Нет. Нужны проверенный контекст пользователя, серверная авторизация, корректные индексы, изоляция файлов, кэша и фоновых задач, а также негативные тесты доступа.

Заменяет ли PostgreSQL RLS проверки в приложении?

Нет. RLS — дополнительный барьер на уровне базы. Особенности ролей, владельцев таблиц и служебных процессов всё равно требуют отдельного проектирования.

Когда выделять отдельную базу?

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

Можно ли сочетать разные модели?

Да. Платформа может обслуживать стандартных клиентов в общем пуле, а отдельных — в выделенном. Важно, чтобы маршрутизация и операции оставались едиными и проверяемыми.

Что проверить в MVP SaaS?

Онбординг тенанта, роли, невозможность межтенантного доступа, применение тарифа, резервное восстановление и наблюдаемость. Эти механизмы труднее и дороже добавлять после роста продукта.

Источники

  1. AWS, SaaS Lens — AWS Well-Architected Framework: https://docs.aws.amazon.com/wellarchitected/latest/saas-lens/saas-lens.html (дата обращения: 20.07.2026).
  2. Microsoft Learn, Architectural approaches for multitenancy: https://learn.microsoft.com/en-us/azure/architecture/guide/multitenant/overview (дата обращения: 20.07.2026).
  3. PostgreSQL Documentation, Row Security Policies: https://www.postgresql.org/docs/current/ddl-rowsecurity.html (дата обращения: 20.07.2026).

Комментарии

Вопрос от редакции 22.07.2026
Если сейчас клиентов мало, есть ли смысл сразу внедрять Row-Level Security?
Paladin Engineering 22.07.2026
Это зависит от модели доступа и компетенций команды. RLS может стать полезным дополнительным барьером, но не заменяет серверную авторизацию и тесты. Для начала мы бы описали пути чтения и записи данных, а затем проверили, где защита на уровне базы действительно уменьшает риск.
Вопрос от редакции 22.07.2026
Отдельная схема на каждого клиента выглядит компромиссом. Почему её не выбирать по умолчанию?
Paladin Engineering 22.07.2026
Потому что сложность переносится в миграции, диагностику и контроль версий схем. При десятках клиентов это может быть управляемо, а при быстром росте без автоматизации — стать постоянным источником сбоев. Выбор лучше подтверждать нагрузочным и операционным сценарием.
Вопрос от редакции 22.07.2026
Можно ли позже перевести крупного клиента из общей базы в отдельную?
Paladin Engineering 22.07.2026
Да, если идентификатор тенанта последовательно присутствует в данных, файлах и событиях, а экспорт и импорт предусмотрены заранее. Мы обы