Разработка мультитенантной AI-платформы (SaaS) для B2B-клиентов
Мы проектируем и реализуем мультитенантную AI-инфраструктуру, которая выдерживает нагрузку от 10 до 1000+ B2B-клиентов, сохраняя изоляцию данных, производительность и гибкость кастомизации. За 3–5 месяцев мы строим платформу с нуля или мигрируем существующую — под ключ, с документацией и обучением команды.
Какие типичные боли возникают при создании AI SaaS?
Изоляция данных — основная головная боль. Если один тенант случайно получит доступ к модели другого — это потеря репутации и юридические риски. Row-Level Security в PostgreSQL решает проблему на уровне БД, но не защищает от утечек через ML-артефакты. Мы используем S3 prefixes + IAM-политики для каждого тенанта.
Второй блок — performance при росте. Shared schema дешевле, но при 100+ тенантах query latency растёт. Без правильной индексации по tenant_id запросы тормозят. Мы заранее проектируем шардинг и используем пулы соединений с tenant-aware routing.
Третий — кастомизация AI под каждого клиента. Тенанты хотят свои промпты, модели, лимиты. Без TenantAwareInferenceService администрирование превращается в хаос. Закажите консультацию — мы поможем выстроить правильную архитектуру.
Сравнение моделей и методов изоляции
| Модель | Изоляция | Стоимость | Производительность | Когда выбирать |
|---|---|---|---|---|
| Shared DB, Shared Schema | Низкая | Низкая | Средняя | Стартап, <50 тенантов |
| Shared DB, Separate Schema | Средняя | Средняя | Высокая (per-schema индексы) | B2B SaaS, 50–500 тенантов |
| Separate DB per Tenant | Высокая | Высокая | Максимальная | Enterprise с compliance |
Для AI-нагрузок оптимален второй вариант: Shared DB + Separate Schema для транзакций + отдельные S3 prefixes для ML-моделей. Это даёт баланс между стоимостью и гибкостью.
| Метод изоляции | Риск утечки | Производительность | Сложность реализации |
|---|---|---|---|
| Row-Level Security | Низкий | Высокая | Средняя |
| Per-tenant DB | Очень низкий | Средняя (накладные расходы) | Высокая |
| Application-level filter | Высокий | Низкая (баги в коде) | Низкая |
Как обеспечить изоляцию данных между тенантами?
Мы используем Row-Level Security в PostgreSQL. Каждый запрос автоматически фильтруется по tenant_id. Пример политики:
-- Включение RLS для изоляции данных тенантов ALTER TABLE predictions ENABLE ROW LEVEL SECURITY; -- Политика: каждый тенант видит только свои данные CREATE POLICY tenant_isolation ON predictions USING (tenant_id = current_setting('app.current_tenant_id')::UUID); Middleware на FastAPI устанавливает tenant context для каждого запроса (см. код ниже). Это гарантирует, что ни один запрос не «утечёт» между тенантами.
# FastAPI middleware для установки tenant context @app.middleware("http") async def tenant_context_middleware(request: Request, call_next): tenant_id = await resolve_tenant(request) request.state.tenant_id = tenant_id async with db.acquire() as conn: await conn.execute( f"SET LOCAL app.current_tenant_id = '{tenant_id}'" ) request.state.db_conn = conn response = await call_next(request) return response Tenant-specific AI конфигурация
@dataclass class TenantAIConfig: tenant_id: str allowed_models: list[str] system_prompt_override: str = None monthly_token_limit: int = 1_000_000 concurrent_request_limit: int = 10 custom_models: list[str] = None prediction_log_retention_days: int = 90 pii_detection_enabled: bool = True audit_log_enabled: bool = True class TenantAwareInferenceService: async def predict(self, tenant_id: str, model_name: str, inputs: dict) -> dict: config = await self.get_tenant_config(tenant_id) if model_name not in config.allowed_models: raise PermissionError(f"Model '{model_name}' not allowed") if not await self.rate_limiter.check(tenant_id, config.concurrent_request_limit): raise RateLimitError("Concurrent request limit exceeded") if config.system_prompt_override and 'system' in inputs: inputs['system'] = config.system_prompt_override + "\n\n" + inputs['system'] if config.pii_detection_enabled: inputs = await self.pii_detector.redact(inputs) result = await self.inference_engine.run(model_name, inputs) await self.audit_log.record(tenant_id, model_name, inputs, result) return result Процесс и объем работ
- Аналитика — аудит текущей инфраструктуры, определение требований к изоляции и масштабу.
- Проектирование — схема БД, API-контракты, выбор стека (PyTorch, LangChain, PostgreSQL, S3).
- Реализация — написание кода, настройка RLS, создание TenantAwareInferenceService, интеграция LLM (GPT-4, Claude, LLaMA), fine-tuning, векторные БД (ChromaDB, pgvector).
- Тестирование — нагрузочные тесты, пентест на изоляцию данных.
- Деплой — CI/CD, мониторинг (Grafana + Prometheus), документация.
- Сопровождение — SLA, доработки под новые требования.
Наши инженеры имеют 5+ лет опыта в MLOps и 20+ реализованных AI-платформ. Мы используем проверенные решения: PostgreSQL RLS, Kubernetes, vLLM для инференса. Гарантируем соответствие GDPR и 152-ФЗ.
Пример TenantOnboardingService (код)
class TenantOnboardingService: async def provision_tenant(self, signup_data: dict) -> Tenant: tenant = await self.db.create_tenant(signup_data) await self.db_manager.create_schema(tenant.id) await self.db_manager.run_migrations(tenant.id) await self.storage.create_tenant_prefix(tenant.id) await self.config_store.create_default_config(tenant.id) api_key = await self.auth.create_api_key(tenant.id, scope="all") await self.email.send_welcome(tenant, api_key) return tenant, api_key Типичные ошибки при реализации мультитенантности
- Отсутствие tenant-aware кеширования — кеш одного тенанта может отдавать данные другому. Используйте tenant_id как часть ключа кеша.
- Слабая изоляция на уровне приложения — фильтрация по tenant_id в коде, а не на уровне БД — риск случайной утечки. Всегда комбинируйте RLS с проверками в middleware.
- Неправильный выбор модели мультитенантности — для небольшого числа тенантов подходит shared schema, но при росте latency взлетает. Закладывайте возможность перехода на separate schema без даунтайма.
Почему наша архитектура выгоднее?
Сравните: Shared DB + Separate Schema в 3–5 раз дешевле отдельной базы на тенант при 50+ клиентах. Экономия на инфраструктуре составляет до $10 000 в месяц для 50+ тенантов. А производительность — p99 latency < 200 мс даже при 1000 одновременных запросов (за счёт connection pooling и per-tenant индексов). Окупаемость инвестиций наступает уже через 6 месяцев после запуска.
Сроки и стоимость
Разработка занимает от 3 до 5 месяцев в зависимости от сложности AI-модулей и числа тенантов. Типовая стоимость проекта — от $50 000 до $150 000. Точную сумму оцениваем после аудита — свяжитесь с нами для консультации. Получите предварительную оценку вашего проекта уже сегодня.







