Архитектура SaaS-платформы: три подхода к мульти-арендности
Как устроена архитектура SaaS-платформы: общая схема + RLS, схема-на-арендатора, база-на-арендатора. Когда какой подход выбирать, как мигрировать между ними, безопасность данных арендаторов.
Архитектура SaaS-платформы отличается от обычного веб-приложения одним фундаментальным решением — мульти-арендностью. Если ваше приложение должно одновременно обслуживать сотни клиентов с изолированными данными по одной кодовой базе, вам нужен паттерн multi-tenant. От того, какой из трёх классических подходов вы выберете, зависят расходы на инфраструктуру, скорость обновлений, безопасность данных и потолок масштабирования.
Эта статья — практический разбор для основателя и архитектора, который проектирует архитектуру SaaS-платформы и выбирает между «общей схемой», «схемой-на-арендатора» и «базой-на-арендатора». Без академизма, с критериями выбора, типовыми ошибками и сценариями миграции.
Что такое архитектура SaaS-платформы
SaaS-платформа — это программный продукт, доставляемый клиентам через интернет по модели подписки. Архитектурно это означает четыре требования:
- Мульти-арендность. Одна копия приложения обслуживает много клиентов, данные изолированы.
- Единая кодовая база. Все клиенты пользуются одной версией приложения; обновления выкатываются централизованно.
- Самостоятельное подключение. Клиент сам регистрируется, выбирает тариф, оплачивает и начинает работать.
- Биллинг подписок. Регулярные списания, тарифные планы, фискальные чеки, повторные попытки списания.
Если хотя бы одно из требований не выполнено, у вас не SaaS-платформа, а заказное приложение с поддержкой. Это влияет на экономику: SaaS-компании оцениваются в 4-8 раз дороже проектных при той же выручке именно благодаря масштабируемой архитектуре.
Три подхода к мульти-арендности
1. Общая схема + row-level security (shared schema + RLS)
Все данные всех клиентов в одной базе и одной схеме. Каждая таблица помечена идентификатором арендатора (например, tenant_id). СУБД (PostgreSQL) на уровне политики безопасности (RLS) фильтрует выдачу по тому арендатору, который установлен в контексте сессии: SET app.current_tenant = '...'.
Плюсы:
- Самая дешёвая инфраструктура — один пул соединений на всех.
- Простая аналитика по всем клиентам — один SQL-запрос.
- Лёгкое обновление схемы — миграция выполняется один раз.
- Подходит для тысяч SMB-арендаторов.
Минусы:
- Утечка при ошибке в коде или RLS-политике — гипотетически возможна, нужна защита в нескольких слоях.
- Шумные соседи: один большой клиент может занимать ресурсы остальных.
- Бэкапы общие, восстановление по одному клиенту — отдельная процедура.
Когда выбирать: ваш сегмент — SMB, чек 1-30 тысяч ₽/мес, число клиентов до 5000, требований по физической изоляции нет.
2. Схема-на-арендатора (schema-per-tenant)
Одна база, но у каждого клиента своя PostgreSQL-схема. Названия таблиц одинаковые, доступ изолирован на уровне схемы.
Плюсы:
- Лучшая логическая изоляция: исключена утечка между схемами на уровне СУБД.
- Можно настраивать индексы и расширения отдельно для крупных клиентов.
- Удобнее отдавать бэкапы по запросу клиента.
Минусы:
- Миграции схемы должны прокатываться по всем схемам — N раз дольше.
- Пул соединений сложнее: переключение схемы на каждый запрос.
- Аналитика по всем клиентам требует UNION ALL по N схемам.
Когда выбирать: средний сегмент (чек 30-200 тысяч ₽/мес), 100-500 клиентов, есть требования к отдельным бэкапам или отдельной настройке производительности.
3. База-на-арендатора (database-per-tenant)
Отдельная база у каждого клиента. Максимальная изоляция: разные машины, разные сети, разные ключи шифрования.
Плюсы:
- Физическая изоляция данных и нагрузки.
- Отдельные бэкапы, отдельные SLA, отдельные ключи шифрования.
- Регуляторика отдельных клиентов (банки, ВПК, госорганы) обычно требует именно этого.
Минусы:
- Стоимость инфраструктуры растёт пропорционально числу клиентов.
- Обновление схемы — операция с N деплоями.
- Аналитика и кросс-арендаторные операции почти невозможны без отдельных ETL-процессов.
Когда выбирать: enterprise-сегмент (чек от 500 тысяч ₽/год), регуляторика, ВПК, банки. Чаще всего применяется как «hybrid» — основа SaaS на общей схеме, отдельные базы для самых крупных клиентов по запросу.
Сравнительная таблица подходов
| Критерий | Общая схема + RLS | Схема-на-арендатора | База-на-арендатора |
|---|---|---|---|
| Стоимость инфры | низкая | средняя | высокая |
| Изоляция данных | логическая | сильная логическая | физическая |
| Сложность миграций | низкая | средняя | высокая |
| Аналитика по всем клиентам | простая | средняя | сложная |
| Бэкапы по клиенту | сложно | средне | просто |
| Потолок числа клиентов | 5000+ | 500-1000 | 50-200 |
| Подходит сегменту | SMB | SMB+средний | enterprise |
Безопасность данных арендаторов
При мульти-арендной архитектуре безопасность строится в нескольких слоях:
- Слой приложения. Каждый входящий запрос привязан к арендатору через JWT или сессию; middleware устанавливает контекст и отказывает в запросах без подтверждённого арендатора.
- Слой СУБД. На общей схеме — row-level security, фильтр по
tenant_idиз переменной сессии. На схема-на-арендатора — разныеsearch_path. - Слой данных. Чувствительные поля (пароли, токены, документы) шифруются с возможностью ротации ключей по арендатору.
- Слой логирования. Все операции изменения логируются с
tenant_idдля аудита и восстановления. - Слой тестирования. Регулярные синтетические тесты на изоляцию: создаётся клиент A и клиент B, A пытается получить данные B, тест должен падать.
Для enterprise-клиентов с требованиями ИБ:
- Отдельная схема или БД.
- Отдельные ключи шифрования и отдельные бэкапы.
- Отдельные SLA на инциденты безопасности.
- Аттестация по 152-ФЗ или 187-ФЗ при необходимости.
Когда мигрировать с одного подхода на другой
Стандартный сценарий: вы стартуете на общей схеме + RLS, через 2-3 года приходит первый enterprise-клиент с требованием физической изоляции — переводите его в отдельную схему или БД. Через 5 лет основная масса SMB-клиентов остаётся на общей схеме, 5-10% enterprise живут на отдельных схемах.
Когда миграция нужна:
- Достигли потолка по числу клиентов или нагрузке.
- Регуляторика требует отдельных бэкапов или ключей.
- Шумные соседи мешают мелким клиентам.
- ИБ-отдел крупного клиента не подписывает договор без отдельной БД.
Стоимость миграции: 4-8 недель работы 2 senior-разработчиков на каждый шаг, плюс окно миграции по каждому клиенту. Поэтому архитектурное решение на старте важнее, чем кажется: правильный паттерн сэкономит 6-12 месяцев инженерных работ через 2-3 года.
Какой подход выбирать на старте
Для подавляющего большинства B2B SaaS-стартапов на российском рынке оптимальный старт — общая схема + row-level security с заложенным слоем абстракции для будущей миграции. Это значит:
- Все запросы к БД идут через слой репозиториев, которые получают
tenant_idиз контекста. - Никаких хардкодных таблиц — всё через ORM с учётом RLS.
- Тесты на изоляцию — в CI с первого релиза.
- При появлении enterprise-клиента — точечная миграция в отдельную схему без переписывания приложения.
Подробнее об общей архитектуре SaaS — в гиде по разработке SaaS под ключ, о биллинговой части — в материале о приёме платежей онлайн.
Связанные архитектурные решения
Архитектура SaaS-платформы — это не только мульти-арендность. Сопутствующие решения:
- Тарифная модель и переключение между тарифами. Должна закладываться в архитектуру с первого релиза: одна таблица тарифов, привязка арендатора к тарифу, проверка лимитов в коде.
- Самостоятельное подключение и onboarding. Регистрация без участия менеджера, выбор тарифа, ввод платёжных данных, первое использование за 1-2 сессии.
- Биллинг и фискальные чеки. Подписки, рекуррент, ОФД-интеграция, dunning при сбоях списания — отдельный модуль архитектуры.
- Метрики и аналитика арендаторов. Каждое действие пользователя помечается
tenant_idи записывается в аналитический слой (ClickHouse, BigQuery или внутренний data warehouse). - Удержание клиентов как функция архитектуры. События активации, метрики использования, триггеры коммуникации — закладываются в продукт, а не приделываются сверху.
Что часто упускают при проектировании архитектуры SaaS
- Жёсткий хардкод одного арендатора. Когда продукт начинался как заказная разработка, а потом «переделывается в SaaS». Это всегда дороже, чем стартовать сразу с мульти-арендности.
- RLS без тестов. Политика безопасности живёт в SQL и легко ломается миграциями. Тесты на изоляцию — обязательны.
- Отсутствие плана миграции на отдельную базу. Когда придёт первый enterprise-клиент, вы должны быть готовы перевести его за 1-2 недели, а не за квартал.
- Игнорирование «шумных соседей». Без квот по ресурсам один большой клиент может сделать продукт неработоспособным для остальных. Закладывайте лимиты по запросам, объёмам данных и фоновым задачам.
- Аналитика поверх боевой схемы. Любые отчёты по всем арендаторам должны идти через отдельный аналитический слой, а не сожрать прод-базу.
Что дальше
Если вы проектируете архитектуру SaaS и колеблетесь между подходами — следующий шаг это предпроектное обследование с архитектором: 2-3 недели работы, на выходе техническое задание с выбранным паттерном мульти-арендности, диаграмма данных и схема миграции на будущее. Это даёт ясный план, который можно показать команде разработчиков и инвесторам.
FAQ о архитектура SaaS
Что такое мульти-арендность в SaaS?
Мульти-арендность (multi-tenancy) — это архитектурный принцип, при котором одна копия программного обеспечения обслуживает множество клиентов-арендаторов одновременно, но данные каждого арендатора изолированы от остальных. Это отличает SaaS-платформу от заказного приложения с множеством инстансов: один деплой, одна кодовая база, одно обновление, но строгая логическая или физическая изоляция данных. Без мульти-арендности SaaS либо невозможен экономически (отдельный сервер на клиента), либо опасен (смешивание данных).
Какие подходы к мульти-арендности существуют?
Три классических подхода: 1) Общая схема с разделением по полю tenant_id и row-level security — все данные в одной таблице, СУБД на уровне политики безопасности фильтрует выдачу по арендатору. Самый экономный, подходит SMB-сегменту. 2) Схема-на-арендатора — одна база, отдельная схема для каждого клиента. Лучшая изоляция, нативные миграции на схему, но сложнее эксплуатация при тысячах клиентов. 3) База-на-арендатора — отдельная БД для каждого клиента. Максимальная изоляция, физическое разделение бэкапов, удобно для enterprise с требованиями ИБ. Стоимость растёт с увеличением изоляции, но падает гибкость аналитики и сложность обновлений увеличивается.
Когда выбирать общую схему + RLS, а когда схему-на-арендатора?
Общая схема + row-level security — выбор по умолчанию для B2B SMB-сегмента (до 1000 клиентов, чек 1-30 тыс ₽/мес). Преимущества: один пул соединений, простая аналитика по всем клиентам, дёшево. Недостатки: ошибка в RLS-политике даёт утечку, регуляторика отдельных клиентов может требовать физической изоляции. Схема-на-арендатора подходит, когда: клиенты крупные (от 50к ₽/мес), требуют отдельных бэкапов, ИБ-отдел хочет видеть «свою» базу, нужно отдельно настраивать индексы. Если 95% клиентов SMB и 5% enterprise — оставляйте основу на общей схеме, а под крупных делайте отдельные схемы по запросу.
Как обеспечить безопасность данных арендаторов?
Базовый набор для SaaS на общей схеме: 1) Row-level security в PostgreSQL — политики безопасности, фильтрующие выдачу по tenant_id, поднятому из контекста сессии. 2) Внешний слой проверок — middleware приложения отвергает запросы без подтверждённого арендатора. 3) Шифрование чувствительных полей на уровне приложения (e2e или с ротацией ключей по арендаторам). 4) Логи всех операций изменения с tenant_id для аудита. 5) Регулярные тесты на изоляцию — синтетический клиент пытается прочитать чужие данные, тест должен падать. Для enterprise добавляется: отдельная схема или БД, отдельные ключи шифрования, отдельные бэкапы, договорные SLA на инциденты.
Можно ли мигрировать между подходами потом?
Да, но это серьёзная инженерная работа. Типовой путь миграции: «общая схема + RLS → схема-на-арендатора → база-на-арендатора по запросу». Миграция выполняется через теневую запись (dual write) или окно обслуживания. Затраты: 4-8 недель работы 2 senior-разработчиков на каждый шаг, плюс окно миграции по каждому клиенту. Поэтому архитектурное решение на старте важно: правильно подобранный паттерн сэкономит 6-12 месяцев работ по миграции через 2-3 года. Стандартная рекомендация: стартуйте с общей схемы + RLS, заложите слой абстракции для будущей миграции, переходите на изолированные схемы только когда первый enterprise-клиент это требует контрактом.