«Система работает отлично на 50 пользователях. Мы готовы к масштабированию». Эту фразу CTO крупного банка произнёс за три месяца до катастрофы. Когда количество пользователей достигло 800, CRM начала тормозить. При 2 000 – падать несколько раз в день. Проект заморозили, потратив258 500 000 ₸. Переписывали архитектуру с нуля.
История типичная. Большинство CRM-систем проектируются для малого и среднего бизнеса. Они работают прекрасно на сотнях пользователей. Но enterprise – другой мир. 10 000, 50 000, 100 000 пользователей. Миллионы записей. Тысячи одновременных операций. Требования к доступности 99,99%. Это принципиально иной класс задач.
В этой статье разберём, как строить CRM-архитектуру, способную масштабироваться до сотен тысяч пользователей. Технические детали, проверенные паттерны, реальные кейсы. Материал будет полезен архитекторам, техническим директорам и всем, кто планирует enterprise-внедрение.

Когда нужна enterprise-архитектура
Не каждой компании нужна архитектура на 100 000 пользователей. Enterprise-подход оправдан, когда стандартные решения перестают справляться. Вот конкретные пороги:
По количеству пользователей:
- До 500 пользователей – большинство облачных CRM справляются
- 500–5 000 пользователей – нужна оптимизация, но архитектура может быть стандартной
- 5 000–20 000 пользователей – требуется специализированная архитектура
- 20 000+ пользователей – только enterprise-grade решения
По объёму данных:
- Более 10 миллионов контактов
- Более 50 миллионов сделок
- Более 1 ТБ файлов и документов
- История взаимодействий за 10+ лет
По требованиям к доступности:
- SLA 99,9% – допустимо 8,76 часов простоя в год
- SLA 99,95% – допустимо 4,38 часа простоя в год
- SLA 99,99% – допустимо 52 минуты простоя в год
Правило: если падение CRM на час стоит компании более55 000 000 ₸ – вам нужна enterprise-архитектура.
Ключевые метрики: RPS, latency, availability
Прежде чем проектировать архитектуру, нужно определить целевые метрики. Без них невозможно принимать обоснованные решения.
RPS (Requests Per Second) – количество запросов в секунду, которое система должна обрабатывать. Как рассчитать:
Формула для CRM:
RPS = (Активные пользователи × Запросов на пользователя в минуту) / 60
Пример: 10 000 одновременных пользователей × 10 запросов/мин = 100 000 / 60 ≈ 1 700 RPS
Latency (задержка) – время ответа системы. Для CRM критичны:
- P50 (медиана) – 50% запросов быстрее этого времени. Цель: <200 мс
- P95 – 95% запросов. Цель: <500 мс
- P99 – 99% запросов. Цель: <1 000 мс
Availability (доступность) – процент времени, когда система работает:
| SLA | Допустимый простой в год | Типичные требования |
|---|---|---|
| 99% | 3,65 дня | Малый бизнес, некритичные системы |
| 99,9% | 8,76 часа | Средний бизнес |
| 99,95% | 4,38 часа | Крупный бизнес |
| 99,99% | 52 минуты | Enterprise, финансы, телеком |
| 99,999% | 5 минут | Mission-critical системы |
Важно: каждая дополнительная «девятка» в SLA кратно увеличивает стоимость инфраструктуры. Не гонитесь за 99,99%, если бизнес переживёт час простоя.
Горизонтальное масштабирование: stateless-сервисы
Главный принцип масштабируемой архитектуры – stateless. Сервис не хранит состояние между запросами. Любой запрос может обработать любой экземпляр сервиса.
Почему это критично:
- Горизонтальное масштабирование – добавляем серверы, не меняя код
- Отказоустойчивость – падение одного сервера не влияет на остальные
- Простота деплоя – rolling updates без downtime
Что нужно вынести из сервиса:
- Сессии пользователей → Redis / Memcached
- Временные файлы → S3-совместимое хранилище
- Кэш → распределённый кэш (Redis Cluster)
- Очереди задач → RabbitMQ / Kafka
Пример архитектуры API-слоя:
Load Balancer → N экземпляров API (stateless) → Распределённый кэш → База данных
Автомасштабирование. В облаке (или Kubernetes) можно настроить автоматическое добавление/удаление экземпляров по метрикам:
- CPU > 70% в течение 5 минут → добавить экземпляр
- CPU < 30% в течение 15 минут → убрать экземпляр
- RPS на экземпляр > 500 → добавить экземпляр
Результат: система автоматически адаптируется к нагрузке. Утром, когда все приходят на работу – больше серверов. Ночью – меньше.
Шардинг данных: по клиентам, по регионам
База данных – обычно главное узкое место. Вертикальное масштабирование (более мощный сервер) имеет предел. Горизонтальное масштабирование БД – шардинг.
Что такое шардинг. Данные разбиваются на части (шарды), каждая часть хранится на отдельном сервере. Запросы маршрутизируются к нужному шарду по ключу.
Стратегии шардинга для CRM:
1. Шардинг по tenant (клиенту). Каждый крупный клиент или группа клиентов – на отдельном шарде. Идеально для SaaS CRM с enterprise-клиентами.
Пример:
Клиенты A, B, C → Шард 1
Клиенты D, E, F → Шард 2
Клиент G (очень крупный) → Шард 3 (выделенный)
Преимущества: изоляция данных, возможность выделить ресурсы для VIP-клиентов, соответствие требованиям compliance.
2. Шардинг по региону. Данные клиентов хранятся в их географическом регионе. Критично для соответствия законам о локализации данных.
Пример:
Россия → Шард в Москве (соответствие 152-ФЗ)
Казахстан → Шард в Алматы
Европа → Шард в Франкфурте (соответствие GDPR)
3. Шардинг по диапазону ID. Записи распределяются по шардам в зависимости от ID. Простая реализация, но может привести к неравномерной нагрузке.
Проблемы шардинга:
- Cross-shard запросы – запросы, затрагивающие несколько шардов, медленные и сложные
- Ребалансировка – перемещение данных между шардами при росте
- Транзакции – распределённые транзакции сложны и дороги
Рекомендация: проектируйте схему данных так, чтобы 95% запросов были в рамках одного шарда. Для CRM это обычно означает – все данные клиента на одном шарде.
Нужна консультация по enterprise-архитектуре?
Наши архитекторы спроектировали системы для банков, телекома, ритейла. Проведём аудит вашей архитектуры и подготовим план масштабирования.
Кэширование: что кэшировать и как инвалидировать
Кэширование – самый эффективный способ снизить нагрузку на базу данных и ускорить отклик. Но неправильное кэширование хуже, чем его отсутствие.
Уровни кэширования в CRM:
1. Кэш запросов к БД (Query Cache). Результаты частых запросов кэшируются. TTL: секунды-минуты.
- Список стадий воронки – меняется редко, кэш на 5 минут
- Справочники (города, категории) – кэш на час
- Права пользователя – кэш на 1 минуту с инвалидацией при изменении
2. Кэш объектов (Object Cache). Сериализованные объекты CRM. TTL: минуты-часы.
- Карточка клиента – кэш на 5 минут
- Структура организации – кэш на 15 минут
- Настройки системы – кэш на час
3. Кэш страниц / API-ответов. Полные ответы API. TTL: секунды. Осторожно с персонализированными данными.
4. CDN для статики. Изображения, скрипты, стили. TTL: дни-недели.
Стратегии инвалидации:
| Стратегия | Описание | Когда использовать |
|---|---|---|
| TTL (Time To Live) | Кэш автоматически истекает через N секунд | Данные, где допустима небольшая задержка обновления |
| Write-through | При записи в БД – сразу обновляем кэш | Критичные данные, которые часто читаются |
| Write-behind | Пишем в кэш, асинхронно в БД | Высокая нагрузка на запись, допустима потеря данных |
| Event-driven | Событие изменения → инвалидация кэша | Распределённые системы, микросервисы |
Типичные ошибки:
- Cache stampede – много запросов при истечении кэша. Решение: mutex, probabilistic early expiration
- Stale data – устаревшие данные показываются пользователю. Решение: правильные TTL, event-driven инвалидация
- Memory pressure – кэш занимает всю память. Решение: LRU eviction, мониторинг
Метрика успеха: cache hit ratio должен быть >90% для read-heavy операций. Если ниже – пересмотрите стратегию.
Очереди и асинхронность
Не всё нужно делать синхронно. Пользователь нажал «Сохранить» – он хочет быстрый ответ, а не ждать, пока система отправит уведомления, обновит поиск, пересчитает аналитику.
Что выносить в асинхронную обработку:
- Отправка email и SMS уведомлений
- Индексация для полнотекстового поиска
- Генерация отчётов и экспорт данных
- Интеграционные запросы к внешним системам
- Обработка файлов (конвертация, превью)
- Пересчёт агрегатов и аналитики
- Webhooks и callbacks
Технологии очередей:
| Технология | Особенности | Когда использовать |
|---|---|---|
| RabbitMQ | Гибкая маршрутизация, подтверждения, простота | Большинство задач, task queues |
| Apache Kafka | Высокая пропускная способность, хранение событий | Event sourcing, аналитика, интеграции |
| Redis Streams | Простота, если Redis уже есть | Небольшие очереди, real-time |
| Amazon SQS | Managed, масштабируется автоматически | AWS-инфраструктура |
Паттерны обработки:
- Work Queue – задача обрабатывается одним воркером. Для уникальных операций
- Pub/Sub – сообщение получают все подписчики. Для уведомлений, событий
- Dead Letter Queue – неудачные задачи попадают в отдельную очередь для анализа
Важно: асинхронная обработка требует идемпотентности. Задача может выполниться дважды (at-least-once delivery). Код должен корректно это обрабатывать.
Микросервисы vs монолит
Вечный спор. Правильный ответ: зависит от контекста. Для enterprise CRM оба подхода могут работать.
Монолит (modular monolith):
- Плюсы: простота разработки, отладки, деплоя. Нет сетевых вызовов между модулями
- Минусы: масштабирование только целиком, один стек технологий, большая кодовая база
- Когда подходит: команда до 30 разработчиков, относительно однородная нагрузка
Микросервисы:
- Плюсы: независимое масштабирование, разные технологии, изоляция сбоев, независимые релизы
- Минусы: сложность операций, распределённые транзакции, сетевые задержки
- Когда подходит: большие команды (50+ разработчиков), разные требования к масштабированию модулей
Типичное разбиение CRM на сервисы:
- Auth Service – аутентификация, токены, SSO
- User Service – пользователи, роли, права
- Contact Service – клиенты, компании, контакты
- Deal Service – сделки, воронки, стадии
- Activity Service – звонки, письма, встречи, задачи
- Notification Service – уведомления всех типов
- Search Service – полнотекстовый поиск (Elasticsearch)
- Analytics Service – отчёты, дашборды, BI
- Integration Service – внешние интеграции, webhooks
- File Service – хранение и обработка файлов
Рекомендация: начните с модульного монолита. Выделяйте микросервисы, когда появляется явная потребность (разные требования к масштабированию, независимые релизы, разные команды).
Отказоустойчивость: репликация и failover
Для SLA 99,99% система должна переживать отказы компонентов без простоя. Это требует избыточности на всех уровнях.
Репликация базы данных:
- Primary-Replica – один master для записи, несколько replica для чтения
- Synchronous replication – данные подтверждаются на replica до ответа клиенту. Надёжно, но медленнее
- Asynchronous replication – replica отстаёт. Быстрее, но риск потери данных при failover
Automatic failover:
Сценарий: Primary БД падает
- Health check обнаруживает недоступность (5-30 секунд)
- Orchestrator выбирает replica с минимальным отставанием
- Replica промотится в primary
- DNS/proxy обновляется
- Приложение переключается на новый primary
Multi-region deployment:
Для максимальной отказоустойчивости – развёртывание в нескольких дата-центрах или регионах облака.
- Active-Passive – один регион активный, второй в режиме ожидания. Простое, дешевле
- Active-Active – оба региона обрабатывают трафик. Сложнее, но нет downtime при переключении
Circuit Breaker паттерн:
Если внешний сервис недоступен – не пытаться бесконечно. После N неудач – «открыть circuit», возвращать ошибку сразу. Периодически проверять, восстановился ли сервис.
Практика: регулярно проводите Chaos Engineering – намеренно «убивайте» компоненты, чтобы проверить, как система восстанавливается.

Мониторинг и observability
Нельзя управлять тем, что не измеряешь. Enterprise-система требует комплексного мониторинга.
Три столпа observability:
1. Metrics (метрики) – числовые показатели, агрегированные по времени.
- RPS, latency (P50, P95, P99), error rate
- CPU, memory, disk I/O, network
- Количество активных пользователей, сессий
- Размер очередей, cache hit ratio
Инструменты: Prometheus + Grafana, Datadog, New Relic
2. Logs (логи) – события в системе.
- Структурированные логи (JSON)
- Correlation ID для отслеживания запроса через сервисы
- Уровни: DEBUG, INFO, WARN, ERROR
Инструменты: ELK Stack (Elasticsearch, Logstash, Kibana), Loki + Grafana
3. Traces (трейсы) – путь запроса через систему.
- Distributed tracing – видеть, какие сервисы вызываются, сколько времени занимает каждый
- Критично для микросервисной архитектуры
Инструменты: Jaeger, Zipkin, Datadog APM
Алертинг:
- Critical – немедленное оповещение (PagerDuty, звонки). Система недоступна
- Warning – Slack/email. Деградация, но работает
- Info – для анализа. Аномалии, тренды
Важно: избегайте alert fatigue. Если алертов слишком много – их начнут игнорировать. Каждый алерт должен требовать действия.
Безопасность на масштабе
Enterprise CRM хранит критичные данные: клиентов, сделки, финансовую информацию. Безопасность – не опция.
Аутентификация и авторизация:
- SSO интеграция – SAML 2.0, OIDC для корпоративных IdP (Active Directory, Okta)
- MFA – обязательно для enterprise. TOTP, SMS, hardware keys
- RBAC – ролевая модель доступа. Роли → Права → Ресурсы
- ABAC – атрибутная модель. Более гибкая (доступ на основе атрибутов пользователя и ресурса)
Шифрование:
- In transit – TLS 1.3 везде. Включая внутренние коммуникации между сервисами
- At rest – шифрование дисков (AES-256). Managed keys или customer-managed keys
- Field-level encryption – для особо чувствительных данных (номера карт, паспортные данные)
Аудит и compliance:
- Audit log – кто, когда, что изменил. Неизменяемый, хранится отдельно
- Data retention – политики хранения и удаления данных
- GDPR/152-ФЗ – право на удаление, экспорт данных, согласия
Сетевая безопасность:
- WAF – защита от OWASP Top 10
- DDoS protection – на уровне CDN/облака
- Network segmentation – изоляция сервисов, private subnets
- VPN/Private Link – для on-premise интеграций
Практика: регулярные penetration tests, bug bounty программа, security reviews при изменениях архитектуры.
Стоимость инфраструктуры
Enterprise-архитектура стоит денег. Важно понимать, за что платите и как оптимизировать.
Основные статьи расходов:
| Компонент | Примерная стоимость (облако) | На что влияет |
|---|---|---|
| Compute (серверы) | 2 500 000 ₸ – 25 000 000 ₸/мес | Количество пользователей, RPS |
| База данных (managed) | 1 500 000 ₸ – 15 000 000 ₸/мес | Объём данных, IOPS, репликация |
| Кэш (Redis/Memcached) | 250 000 ₸ – 2 500 000 ₸/мес | Объём кэша, высокая доступность |
| Хранилище (S3) | 250 000 ₸ – 5 000 000 ₸/мес | Объём файлов, трафик |
| CDN | 100 000 ₸ – 1 000 000 ₸/мес | Трафик, география |
| Мониторинг | 250 000 ₸ – 2 500 000 ₸/мес | Объём метрик, retention |
| Сеть (трафик) | 500 000 ₸ – 5 000 000 ₸/мес | Исходящий трафик, cross-region |
Пример бюджета для 50 000 пользователей:
- Compute: 20 × m5.xlarge = 3 500 000 ₸/мес
- RDS PostgreSQL (multi-AZ, r5.2xlarge): 2 000 000 ₸/мес
- ElastiCache Redis: 750 000 ₸/мес
- S3 + CloudFront: 1 000 000 ₸/мес
- Elasticsearch (managed): 1 500 000 ₸/мес
- Мониторинг (Datadog): 1 250 000 ₸/мес
- Итого: ~10 000 000 ₸/мес (200 ₸ на пользователя)
Способы оптимизации:
- Reserved Instances – скидка 30-70% за commitment на 1-3 года
- Spot Instances – для некритичных воркеров, batch-обработки
- Автомасштабирование – платить только за нужные ресурсы
- Data tiering – старые данные в дешёвое хранилище
- Right-sizing – регулярно проверять, не переплачиваете ли за ресурсы
Cloud vs on-premise: когда что выбрать
Для enterprise оба варианта жизнеспособны. Выбор зависит от требований, компетенций, регуляторики.
Cloud (AWS, Azure, GCP, Yandex Cloud):
- Плюсы: быстрый старт, эластичность, managed services, глобальное присутствие
- Минусы: vendor lock-in, стоимость при больших масштабах, ограничения compliance
- Когда выбрать: нет своей инфраструктуры, нужна гибкость, глобальная аудитория
On-premise / private cloud:
- Плюсы: полный контроль, предсказуемая стоимость, compliance
- Минусы: капитальные затраты, нужна экспертиза, время на масштабирование
- Когда выбрать: строгие требования безопасности (банки, госструктуры), уже есть инфраструктура
Гибридный подход:
Часто оптимальный вариант – гибрид. Чувствительные данные on-premise, остальное в облаке.
Пример гибридной архитектуры:
- База данных с персональными данными → on-premise
- Application servers → облако (автомасштабирование)
- Файловое хранилище → облачный S3
- Аналитика → облачный data warehouse
Важно: для России 152-ФЗ требует хранения персональных данных граждан РФ на территории страны. Это ограничивает выбор западных облаков для определённых данных.
Кейс: банк на 50 000 пользователей
Один из крупнейших банков СНГ внедрял CRM для всей розничной сети. 50 000 пользователей: операционисты, менеджеры по продажам, руководители отделений.
Требования:
- SLA 99,95% – банк не может работать без CRM
- Latency P95 < 500ms – операционисты работают с клиентами
- 30 миллионов клиентских записей
- Интеграция с 15 core-banking системами
- Хранение данных только на территории страны
Архитектурные решения:
- Развёртывание: private cloud в двух дата-центрах банка (active-active)
- База данных: PostgreSQL с шардингом по регионам (4 шарда)
- Кэширование: Redis Cluster, 128 ГБ, cache hit ratio 94%
- Очереди: Kafka для интеграций, RabbitMQ для внутренних задач
- Поиск: Elasticsearch кластер (5 нод)
- API: 40 экземпляров приложения за HAProxy
Результаты после года работы:
- Фактический SLA: 99,97% (превысили требования)
- P95 latency: 320ms (лучше требований)
- Пиковая нагрузка: 8 500 RPS (утро понедельника)
- Обработано 45 миллионов обращений клиентов
- Сокращение времени обслуживания клиента на 23%
Уроки:
- Инвестиции в мониторинг окупились – проблемы ловили до жалоб пользователей
- Шардинг по регионам – правильное решение, cross-region запросы редки
- Кэширование справочников банка дало 40% снижения нагрузки на БД
- Chaos engineering (ежеквартальные учения) – критически важен для уверенности в failover
CRM AI Enterprise Edition
Масштабируемая архитектура, on-premise или cloud deployment, SLA до 99,99%. Проектируем и внедряем CRM для компаний от 5 000 пользователей.
Чек-лист готовности к enterprise-масштабированию
Перед масштабированием убедитесь, что архитектура готова:
Stateless и масштабирование:
- Application servers – stateless
- Сессии вынесены в распределённый кэш
- Настроен автоскейлинг
- Load balancer с health checks
База данных:
- Read replicas настроены и используются
- Стратегия шардинга определена
- Индексы оптимизированы
- Query performance мониторится
- Backup и recovery протестированы
Кэширование:
- Определено, что кэшировать
- Стратегия инвалидации реализована
- Cache hit ratio мониторится
Асинхронная обработка:
- Тяжёлые операции вынесены в очереди
- Dead letter queue настроен
- Воркеры идемпотентны
Отказоустойчивость:
- Нет single point of failure
- Automatic failover настроен
- Circuit breakers реализованы
- Graceful degradation продуман
Мониторинг:
- Метрики собираются (RPS, latency, errors)
- Логи централизованы
- Distributed tracing работает
- Алерты настроены
- Дашборды созданы
Безопасность:
- SSO/MFA интегрированы
- Шифрование in transit и at rest
- Audit log ведётся
- Penetration test проведён
Заключение
Enterprise-масштабирование CRM – это не просто «добавить серверов». Это другой подход к архитектуре, другие требования к команде, другой бюджет.
Ключевые принципы:
- Stateless-сервисы для горизонтального масштабирования
- Шардинг данных, спроектированный под паттерны доступа
- Многоуровневое кэширование с продуманной инвалидацией
- Асинхронная обработка для всего, что не требует мгновенного ответа
- Отказоустойчивость на всех уровнях – никаких single points of failure
- Observability – метрики, логи, трейсы, алерты
- Безопасность как часть архитектуры, а не надстройка
Не пытайтесь построить enterprise-архитектуру сразу. Начните с модульного монолита, масштабируйте по мере роста. Преждевременная оптимизация дороже, чем эволюционное развитие.
И помните историю из начала статьи. CRM, которая «отлично работает на 50 пользователях» – это не enterprise-ready система. Проектируйте с запасом. Тестируйте под нагрузкой. Мониторьте всё. Тогда ваша CRM выдержит и 100 000 пользователей.
Полезные материалы
Для тех, кто планирует enterprise-внедрение:
- Скрытые расходы при внедрении CRM – как рассчитать реальный бюджет
- CRM в кризис – оптимизация без потери функциональности
- Тестирование AI-ботов – QA для enterprise-уровня
- AI intent detection – умная маршрутизация запросов