Масштабирование системы
Система Пуаро поддерживает горизонтальное масштабирование для обеспечения высокой производительности и отказоустойчивости при росте нагрузки. Масштабирование может выполняться на нескольких уровнях в зависимости от требований инфраструктуры.
Способы масштабирования
Система предоставляет несколько способов масштабирования:
| Способ | Описание |
|---|---|
| Масштабирование ядра | Развёртывание дополнительных инстансов компонентов системы |
| Балансировка PostgreSQL | Распределение нагрузки на базу данных PostgreSQL |
| Балансировка ClickHouse | Распределение нагрузки на аналитическую базу данных ClickHouse |
| Балансировка Airflow | Распределение задач между воркерами Airflow |
Масштабирование ядра
Все компоненты системы поддерживают развёртывание дополнительных инстансов и работу через встроенный балансировщик нагрузки.
Принцип работы
- Каждый компонент системы может быть развёрнут в нескольких экземплярах
- Встроенный балансировщик распределяет запросы между инстансами
- При выходе из строя одного инстанса нагрузка автоматически перераспределяется на оставшиеся
Масштабируемые компоненты
| Компонент | Описание |
|---|---|
| API-сервер | Обработка запросов от пользовательского интерфейса |
| Сборщики данных | Получение данных от агентов мониторинга |
| Процессоры событий | Обработка и анализ событий безопасности |
| Модуль анализа SQL-запросов | Анализ и классификация SQL-запросов, обнаружение аномалий |
| Профилировщик | Построение поведенческих профилей пользователей и анализ отклонений |
| Поведенческая модель | Анализ поведения пользователей и выявление аномальной активности |
| Модуль поиска уязвимостей | Сканирование баз данных на наличие уязвимостей и несоответствий требованиям безопасности |
| Веб-интерфейс | Отображение данных пользователям |
Рекомендации
- Разворачивайте минимум 2 инстанса каждого компонента для обеспечения отказоустойчивости
- Используйте мониторинг для отслеживания загрузки каждого инстанса
- Добавляйте инстансы при достижении 70% загрузки существующих
Балансировка PostgreSQL
PostgreSQL используется для хранения конфигурации системы, метаданных и оперативных данных. Для обеспечения высокой доступности и производительности поддерживается балансировка нагрузки.
Варианты масштабирования
| Вариант | Описание |
|---|---|
| Репликация Primary-Replica | Основной сервер для записи, реплики для чтения |
| Streaming Replication | Синхронная или асинхронная репликация данных |
| Connection Pooling | Использование PgBouncer для управления соединениями |
Архитектура
┌─────────────────────────────────────────────┐
│ Балансировщик │
└─────────────────┬───────────────────────────┘
│
┌───────────┼───────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Primary │ │ Replica │ │ Replica │
│ (Write) │ │ (Read) │ │ (Read) │
└──────────┘ └──────────┘ └──────────┘Рекомендации
- Используйте Primary-сервер для операций записи
- Направляйте операции чтения на реплики
- Настройте автоматический failover при недоступности Primary
Балансировка ClickHouse
ClickHouse используется для хранения и анализа больших объёмов данных аудита. Поддерживается кластерное развёртывание для обеспечения высокой производительности.
Варианты масштабирования
| Вариант | Описание |
|---|---|
| Шардирование | Распределение данных между несколькими серверами |
| Репликация | Дублирование данных для отказоустойчивости |
| Distributed-таблицы | Автоматическое распределение запросов по кластеру |
Архитектура кластера
┌─────────────────────────────────────────────┐
│ Distributed-таблица │
└─────────────────┬───────────────────────────┘
│
┌─────────────┼─────────────┐
▼ ▼ ▼
┌────────┐ ┌────────┐ ┌────────┐
│ Shard 1│ │ Shard 2│ │ Shard 3│
├────────┤ ├────────┤ ├────────┤
│Replica │ │Replica │ │Replica │
│ A │ │ A │ │ A │
├────────┤ ├────────┤ ├────────┤
│Replica │ │Replica │ │Replica │
│ B │ │ B │ │ B │
└────────┘ └────────┘ └────────┘Рекомендации
- Используйте шардирование для распределения данных по объёму
- Настройте репликацию для обеспечения отказоустойчивости
- Используйте ZooKeeper для координации кластера
Балансировка Airflow
Apache Airflow используется для выполнения заданий обработки данных, формирования отчётов и автоматизации задач. Поддерживается масштабирование воркеров для параллельного выполнения заданий.
Компоненты Airflow
| Компонент | Описание |
|---|---|
| Scheduler | Планировщик задач, определяет порядок выполнения |
| Webserver | Веб-интерфейс для мониторинга и управления |
| Worker | Исполнители задач, выполняют непосредственную работу |
| Triggerer | Обработчик отложенных задач |
Архитектура
┌──────────────┐ ┌──────────────┐
│ Scheduler │ │ Webserver │
└──────┬───────┘ └──────────────┘
│
▼
┌──────────────────────────────────┐
│ Message Broker │
│ (Redis / RabbitMQ) │
└──────────────────┬───────────────┘
│
┌─────────────┼─────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Worker 1 │ │ Worker 2 │ │ Worker N │
└──────────┘ └──────────┘ └──────────┘Масштабирование воркеров
Воркеры можно масштабировать горизонтально для увеличения пропускной способности:
- Добавляйте воркеры при увеличении количества задач
- Распределяйте воркеры по разным серверам для отказоустойчивости
- Используйте Celery Executor для распределённого выполнения
Рекомендации
- Настройте достаточное количество воркеров для параллельного выполнения задач
- Мониторьте очередь задач для своевременного масштабирования
- Используйте пулы для ограничения параллельных задач определённого типа
Общие рекомендации
Мониторинг
При масштабировании системы важно настроить мониторинг:
- Загрузка CPU и памяти — для каждого компонента
- Размер очередей — для балансировщиков и брокеров сообщений
- Время отклика — для API и баз данных
- Количество соединений — для баз данных
Планирование ресурсов
| Метрика | Действие |
|---|---|
| CPU > 70% | Добавить инстансы или увеличить ресурсы |
| Память > 80% | Увеличить память или оптимизировать запросы |
| Очередь растёт | Добавить воркеры или увеличить пропускную способность |
| Время отклика > SLA | Проанализировать узкие места и масштабировать |
Отказоустойчивость
Для обеспечения отказоустойчивости:
- Разворачивайте компоненты в разных зонах доступности
- Настройте автоматический failover для критичных сервисов
- Регулярно тестируйте сценарии восстановления