Multi-tenant SaaS: изоляция данных и модели биллинга — как выбрать архитектуру
Разбираемся, как выбрать стратегию изоляции данных и биллинга для multi-tenant SaaS: schema-per-tenant, общая база, гибридные решения и их влияние на сто…Почему архитектура multi-tenant — краеугольный камень SaaS
Когда бизнес запускает B2B-платформу, вопрос изоляции данных клиентов и гибкой монетизации встаёт сразу. От выбора модели — одна база на всех или отдельная схема под каждого арендатора — зависят безопасность, масштабируемость и юнит‑экономика сервиса. В этой статье мы разберём ключевые подходы к изоляции, их влияние на биллинг и подскажем, когда стоит переходить от shared к schema-per-tenant, опираясь на практику разработки SaaS‑приложений.
Два полюса изоляции: schema-per-tenant vs shared database
В основе multi-tenant архитектуры лежит компромисс между простотой управления и изоляцией данных. Рассмотрим два классических подхода.
Shared database — единая схема для всех
Все клиенты хранят данные в общих таблицах, а принадлежность записей определяется по полю tenant_id. Это удешевляет развёртывание и обновления, но требует жёсткой фильтрации на уровне запросов и почти исключает возможность кастомизации схемы под заказчика.
- Минимальные инфраструктурные затраты — одна база данных.
- Простота CI/CD: один деплоймент обновляет сервис для всех.
- Риск: утечка данных из‑за ошибки в запросе без tenant_id.
- Сложность с аналитикой: разделение метрик требует дополнительной логики.
Schema-per-tenant — каждому клиенту своя схема
При регистрации нового тенанта создаётся отдельная схема в базе данных (например, PostgreSQL) или даже выделенная БД. Это даёт почти физическую изоляцию, упрощает бэкап, восстановление и соответствие требованиям вроде GDPR. Такой подход часто используют в продуктах, где клиенты требуют раздельного хранения данных, например, в CRM-системах или финансовых сервисах.
- Полноценная изоляция: запросы внутри схемы не нуждаются в tenant_id.
- Простое масштабирование: «тяжёлых» клиентов можно вынести на отдельные серверы.
- Индивидуальные миграции и обновления схемы для каждого тенанта.
- Выше накладные расходы на обслуживание множества схем.
Гибридные сценарии и каталожная изоляция
На практике редко встречается «чистый» shared или schema-per-tenant. Чаще используют гибрид: общая БД для общих справочников и отдельные схемы для критичных данных. Ещё один компромисс — подход «catalog-based»: общий сервер баз данных, но отдельная БД (catalog) на каждого клиента. Это упрощает миграцию между shared и schema-per-tenant, если стартап вырастает из монолита. При выборе архитектуры важно учитывать не только текущий MRR, но и будущий рост, так как миграция данных «на лету» в SaaS-сервисах с десятками клиентов может остановить весь бизнес. Здесь выручает опыт команд, которые проектируют облачные сервисы с учётом плавного масштабирования.
Модели биллинга: как архитектура диктует монетизацию
Схема хранения данных напрямую влияет на то, как вы выставляете счета. Разберём три популярные модели и их связь с изоляцией.
Плоская подписка (flat subscription)
Фиксированная цена в месяц за доступ к платформе. Проще всего реализуется при shared database: все клиенты потребляют одинаковые ресурсы, и разница в нагрузке нивелируется за счёт усреднения. Но если клиентский трафик растёт неравномерно, вы рискуете субсидировать «тяжёлых» пользователей за счёт лёгких. Для такой модели часто достаточно минимальной обвязки, которую можно реализовать даже в рамках быстрой веб-разработки.
Биллинг по пользователям или лицензии (per-seat)
Цена зависит от количества активных учётных записей или лицензий. Удобна при schema-per-tenant, потому что можно легко подсчитать использование и изолировать нагрузку на уровне клиента. Работает в CRM, системах документооборота и других B2B-сервисах, где ценность растёт с числом пользователей. Часто такую модель выбирают для многофункциональных корпоративных порталов.
Оплата по потреблению (usage-based)
Метрики: количество API-запросов, объём хранимых данных, часы использования. Требует детального учёта на уровне транзакций, что проще реализовать в schema-per-tenant, так как нагрузка метрики не смешиваются. Однако внедрить usage-based биллинг можно и в shared-архитектуре, если настроить агрегацию событий по tenant_id. В любом случае потребуется надёжный пайплайн для сбора и тарификации событий — это один из ключевых модулей при создании SaaS-приложений.
На что обратить внимание при выборе изоляции и биллинга
- Безопасность: если вы работаете с финансовыми, медицинскими или персональными данными, schema-per-tenant практически обязателен для аудита и комплаенса.
- Операционные расходы: администратору БД проще обслуживать 10 схем, чем 1000. Автоматизация создания и удаления схем — обязательная часть платформы.
- Onboarding клиентов: shared database позволяет запустить пилот за часы; schema-per-tenant требует автоматизированных скриптов миграции.
- Кастомизация: если клиентам нужны индивидуальные поля, отчёты или интеграции, shared схема быстро превращается в «лоскутное одеяло».
- План роста: если вы планируете выход на рынок США и ЕС, заранее закладывайте возможность физического разделения данных по регионам (data residency).
Часто задаваемые вопросы
Можно ли комбинировать shared database и schema-per-tenant в одном продукте?
Да, это распространённый гибрид. Например, общие справочники, шаблоны и данные для machine learning хранятся в общей схеме, а клиентские заказы, документы и финансы — в изолированной. Такой подход снижает накладные расходы и сохраняет безопасность критичных данных.
Какой биллинг выгоднее при старте SaaS?
На начальном этапе обычно выбирают плоскую подписку или per-seat — они проще в реализации и понятны клиентам. Usage-based требует более зрелой инфраструктуры учёта, но позволяет точнее монетизировать ценность и привлекать клиентов с небольшим чеком.
Сколько времени занимает миграция с shared на schema-per-tenant?
Всё зависит от объёма данных и сложности сервиса. В простых случаях — несколько недель с полным регрессионным тестированием. Для крупных B2B-платформ с историческими данными процесс может занять месяцы, включая этапы двойной записи и постепенного переключения клиентов. Поэтому архитектурное решение лучше принимать до запуска продукта.
Достаточно ли Row-Level Security (RLS) для shared database, чтобы пройти аудит безопасности?
RLS помогает отсечь чужие записи на уровне базы данных, но для строгих стандартов (PCI DSS, HIPAA) часто требует дополнительных мер: логирования обращений, маскирования данных, контроля доступа администраторов. Аудиторы могут потребовать физическую сепарацию, поэтому RLS не всегда заменяет schema-per-tenant.


