Масштабирование системы

Масштабирование системы

Система Пуаро поддерживает горизонтальное масштабирование для обеспечения высокой производительности и отказоустойчивости при росте нагрузки. Масштабирование может выполняться на нескольких уровнях в зависимости от требований инфраструктуры.

Способы масштабирования

Система предоставляет несколько способов масштабирования:

СпособОписание
Масштабирование ядраРазвёртывание дополнительных инстансов компонентов системы
Балансировка 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 для критичных сервисов
  • Регулярно тестируйте сценарии восстановления