Что такое Multi-Tenancy
Multi-tenancy — это обслуживание нескольких клиентов (тенантов) на единой общей инфраструктуре, одновременно балансируя затраты, изоляцию и производительность.
Модели изоляции
Самое критичное архитектурное решение — выбор стратегии изоляции тенантов:
- Общая база данных с tenant ID — каждая таблица включает столбец
tenant_id для фильтрации данных; самый экономичный вариант, но с минимальной изоляцией
- Schema-per-tenant — отдельные схемы в одной базе данных; средний уровень изоляции и сбалансированные затраты
- Database-per-tenant — полностью изолированные базы данных для каждого клиента; самая сильная изоляция, но самые высокие затраты на инфраструктуру
Выбирай исходя из требований по соответствию и уровня клиента.
Безопасность данных
- Всегда обеспечивай изоляцию данных тенантов на уровне приложения, а не только на уровне базы данных
- Используй row-level security (например, PostgreSQL
RLS), чтобы предотвратить утечку данных между тенантами
- Шифруй данные тенантов с помощью уникальных для каждого тенанта ключей шифрования, если этого требуют нормативные акты
Изоляция производительности
- Внедри rate limiting и квоты ресурсов для каждого тенанта, чтобы избежать проблемы шумного соседа
- Используй отдельные queue workers или приоритетные очереди для тенантов высокого уровня
Паттерны масштабируемости
- Применяй tenant-aware routing для направления запросов в нужный шард данных
- Используй
shard keys на основе tenant_id для горизонтального масштабирования базы данных
- Активно кешируй конфигурацию и метаданные тенантов, чтобы снизить накладные расходы на их получение
Операционные вопросы
- Onboarding/offboarding — автоматизируй подготовку тенантов с помощью infrastructure-as-code
- Billing и metering — отслеживай потребление ресурсов для каждого тенанта с самого начала
- Compliance — соблюдай требования по размещению данных, привязывая тенантов к конкретным регионам
Краткое резюме основных компромиссов
| Подход | Стоимость | Изоляция | Сложность |
|---|
| Shared DB | Низкая | Низкая | Низкая |
| Schema-per-tenant | Средняя | Средняя | Средняя |
| DB-per-tenant | Высокая | Высокая | Высокая |