Установка Segments
Обзор
Модуль Segments позволяет сегментировать клиентов и запускать кампании на расписании с действиями, формировать наборы данных (сегмент, датасет) на основе существующих таблиц. При подключении пользователю системы доступны для выбора весь перечень таблиц и ограниченный список схем в БД - источнике. Ограничение схем настраивает администратор системы.
Поддерживаемые БД:
- Postgres
- MSSQL
- Oracle
- MySQL
- Starrocks
- Greenplum
- Clickhouse
Требования системы Accelera к базе данных
1. Общие требования
1.1. База данных должна быть одной из поддерживаемых систем:
- Postgres
- MSSQL
- Oracle
- MySQL
- Starrocks
- Greenplum
- Clickhouse
1.2. Доступ к базе данных должен быть возможен через сеть с минимальными задержками.
1.3. Производительность базы данных должна быть достаточной для обработки сложных запросов и поддержания высокой нагрузки, включая параллельное выполнение запросов в рамках кампаний.
2. Требования к схеме базы данных
2.1. Для работы системы Accelera должна быть выделена отдельная схема (namespace) в БД.
2.2. Схема должна иметь полный набор прав (CREATE, SELECT, INSERT, UPDATE, DELETE) на таблицы, представления и другие объекты, создаваемые Accelera.
2.3. Accelera должна иметь возможность создавать временные таблицы в рамках своей схемы.
3. Требования к tablespace
3.1. Должен быть выделен разумный объем tablespace для работы системы (рекомендуется начать с минимального значения 10 ГБ, с возможностью динамического увеличения при необходимости).
3.2. Tablespace должен поддерживать высокую производительность операций записи и чтения.
3.3. Должна быть реализована система мониторинга доступного объема tablespace с уведомлениями в случае достижения порога заполнения (например, 80% от выделенного объема).
4. Требования к производительности
4.1. База данных должна поддерживать параллельное выполнение запросов.
4.2. Максимальное время выполнения сложного запроса должно составлять не более 1 минуты при номинальной нагрузке.
4.3. Поддержка индексов на колонках, часто используемых в условиях фильтрации, для оптимизации запросов Accelera.
5. Дополнительные требования
5.1. Accelera требует возможности подключения через стандартные драйверы БД (JDBC, ODBC, либо аналогичные, поддерживаемые для данной СУБД).
5.2. Необходим доступ к метаданным схемы (например, информация о структуре таблиц и представлений) для формирования запросов.
5.3. Поддержка транзакций с уровнями изоляции READ COMMITTED или выше.
Рекомендуемые настройки
- Оптимизация параметров СУБД для работы с большими временными таблицами.
- Выделение отдельного connection pool для подключения системы Accelera, чтобы избежать конфликтов с другими клиентами базы данных.
- Учет пиковых нагрузок при настройке параметров сервера БД.
Конфигурация
Распакуйте образы приложения из файла flows_segments_{your_version}.tar.gz следующей командой:
docker load < flows_segments_{your_version}.tar.gzСоздайте файл docker-compose.yaml со следующим содержимым:
version: '3'
services:
flows_segments:
image: accelera/flows_segments:latest
command: npm run start
container_name: flows_segments
restart: unless-stopped
network_mode: "host"
environment:
- LOG_LEVEL=info
- REDIS_CONNECTION=redis://127.0.0.1:6379
- BROKER_CONNECTION=amqp://guest:guest@127.0.0.1:5672
- DB_DRIVER=oracledb
- DB_HOST=localhost
- DB_PORT=1521
- DB_USER=ACCELERA
- DB_PASSWORD=123456
- DB_NAME=accelera
- DB_DATAPOOL_SCHEMA=SCHEMA1,SCHEMA2
- DB_WORKSPACE_SCHEMA=ACCELERA
- MIN_POOL=0
- MAX_POOL=180
- ACQUIRE_CONNECTION_TIMEOUT=600000
- IDLE_TIMEOUT=0
- SEGMENTS_SERVICE_NAME=segments-service
- SEGMENTS_SERVICE_DESCRIPTION=Основная БД для сегментации
- REDIS_KEY_PREFIX=someprefixname: (если не нужен префикс, то удалить параметр)Описание параметров
image
Имя образа, который был распакован на предыдущем шаге, можно узнать командой docker images
container_name
Имя контейнера при запуске, рекомендуется оставить без изменения
restart
Политика рестарта процесса при остановке или ошибке, по умолчанию 'unless-stopped'
network_mode
Подробнее читайте в Особенности подключения к Redis.
Environment
Любой из этих параметров (например, DB_PASSWORD) может быть указан в командной строке при запуске адаптера.
| Название | Описание |
|---|---|
| LOG_LEVEL | Уровень логирования, доступны trace, debug, info, warn, error, fatal. |
| REDIS_CONNECTION | Адрес подключения к БД Redis. Подробнее читайте в Особенности подключения к Redis. |
| BROKER_CONNECTION | Адрес подключения RabbitMQ. |
| DB_DRIVER | Драйвер подключения к БД. Возможные значения: pg pg-native sqlite3 better-sqlite3 mysql mysql2 mssql oracledb tedious clickhouse |
| DB_HOST | Хост базы данных |
| DB_PORT | Порт базы данных Примечание, для драйвера clickhouse порт по умолчанию 9004 |
| DB_USER | Имя пользователя для БД |
| DB_PASSWORD | Пароль пользователя для базы данных |
| DB_NAME | Имя БД (или сервиса) |
| DB_DATAPOOL_SCHEMA | Список схем, откуда Segments будет получать таблицы для дальнейшей работы. Схемы должны быть перечислены через запятую без пробелов. |
| DB_WORKSPACE_SCHEMA | Имя рабочей схемы Segments, в данной схеме будут создаваться временные таблицы (а также таблицы, сохраненные действием Save to table) |
| MIN_POOL | Минимальное значение пула соединений к БД. Если 0 - все idle-соединения буду удаляться. |
| MAX_POOL | Максимальное значение пула соединений к БД. Рекомендуется указывать по формуле (максимальное количество работающих кампаний)*3. |
| ACQUIRE_CONNECTION_TIMEOUT | Таймаут получение нового соединения из пула в миллисекундах. По умолчанию - 30000, рекомендуется указать побольше (5-10 минут), т.к. задачи сегментации могут работать длительное время. |
| IDLE_TIMEOUT | Время жизни idle-соединения в пуле. При MIN_POOL=0 никакого влияния не имеет. |
| SEGMENTS_SERVICE_NAME | Название текущего инстанса сегментов (по умолчанию segments-service) |
| SEGMENTS_SERVICE_DESCRIPTION | Описание текущего инстанса сегментов (по умолчанию segments-service) |
| REDIS_KEY_PREFIX | Префикс ключа для Redis (Может быть настроен ACL для пользователя и мы можем работать только с ключами с префиксом, например, someprefixname: )==Если добавить этот параметр, то нужно его прописать в env во всех контейнерах, чтоб данные искались и писались по нужному ключу с префиксом!== |
Загрузка файлов в сегменты
Модуль сегментации позволяет работать не только с таблицами-источниками, но и с файлами. Для этого в интерфейсе предусмотрен специальный блок File. Для корректной работы необходимо обеспечить общую файловую директорию между модулями backoffice и segments.
Пример настройки:
Допустим, что общая директория на вашем диске - /opt/accelera/uploads.
Настройте volume в backoffice и segments следующим образом:
version: '3'
services:
flows_backoffice:
...
volumes:
- /opt/accelera/uploads:/usr/share/uploads
flows_segments:
...
volumes:
- /opt/accelera/uploads:/usr/share/uploadsЗапуск
Для запуска файлового адаптера используйте следующую команду:
docker-compose -f {путь к вашему docker-compose файлу} upПолучить доступ к логам и проверить работоспособность адаптера можно командой
docker logs -f flows_segmentsОстановка
Для остановки адаптера используйте команду:
docker-compose -f {путь к вашему docker-compose файлу} downЗапуск нескольких копий приложения
Accelera Segments имеет возможность запускаться в нескольких копиях для лучшей производительности и отказоустойчивости. Конфигурация для всех копий должна быть одинакова. Система автоматически распределяет задачи между копиями Accelera Segments в зависимости от его нагрузки. На схеме такой способ подключения выглядит следующим образом:

Для запуска нескольких копий добавьте конфигурацию deploy в ваш compose-файл:
version: '3.3'
services:
flows_segments:
image: cr.yandex/crpc86n7lgg1287s01rq/flows_segments:2.2.0
container_name: flows_segments
restart: unless-stopped
deploy:
mode: replicated
replicas: 2
env_file:
- creds.envПараметр replicas регулирует количество копий приложения.
Подключение к разным БД
Модуль сегментов может быть подключен к 2м различным БД, для этого нужно использовать дополнительный инстанс Accelera Segments с указанием другого имени и описания сервиса.
При запуске одного экземпляра без указания параметров SEGMENTS_SERVICE_NAME и SEGMENTS_SERVICE_DESCRIPTION у вас будет запущен сервис сегментов с именем segments-service и таким же описанием. При создании сегментов в интерфейсе пользователи будут видеть только этот вариант соединения:

При запуске дополнительного инстанса Accelera Segments с другим названием сервиса в интерфейсе появится дополнительное соединение:

Схематично такое соединение выглядит следующим образом:

Пример настройки compose-файла для запуска двух сервисов:
version: '3.3'
services:
flows_segments_1:
image: cr.yandex/crpc86n7lgg1287s01rq/flows_segments:2.2.0
container_name: flows_segments_1
restart: unless-stopped
network_mode: "host"
env_file:
- creds_db_1.env
flows_segments_2:
image: cr.yandex/crpc86n7lgg1287s01rq/flows_segments:2.2.0
container_name: flows_segments_2
restart: unless-stopped
network_mode: "host"
env_file:
- creds_db_2.envФайл creds_db_1.env:
LOG_LEVEL=debug
BROKER_CONNECTION=amqp://guest:guest@127.0.0.1:5672
REDIS_CONNECTION=redis://127.0.0.1:6379
DB_DRIVER=oracledb
DB_HOST=127.0.0.1
DB_PORT=1521
DB_USER=ACCELERA
DB_PASSWORD=accelera
DB_NAME=XEPDB1
DB_DATAPOOL_SCHEMA=ACCELERA
DB_WORKSPACE_SCHEMA=ACCELERA
MIN_POOL=0
MAX_POOL=180
ACQUIRE_CONNECTION_TIMEOUT=600000
IDLE_TIMEOUT=0
SEGMENTS_SERVICE_NAME=segments-1
SEGMENTS_SERVICE_DESCRIPTION=Первый сервис segmentsФайл creds_db_2.env:
LOG_LEVEL=debug
BROKER_CONNECTION=amqp://guest:guest@127.0.0.1:5672
REDIS_CONNECTION=redis://127.0.0.1:6379
DB_DRIVER=oracledb
DB_HOST=127.0.0.1
DB_PORT=1521
DB_USER=ACCELERA_2
DB_PASSWORD=accelera_2
DB_NAME=XEPDB1
DB_DATAPOOL_SCHEMA=ACCELERA
DB_WORKSPACE_SCHEMA=ACCELERA
MIN_POOL=0
MAX_POOL=180
ACQUIRE_CONNECTION_TIMEOUT=600000
IDLE_TIMEOUT=0
SEGMENTS_SERVICE_NAME=segments-2
SEGMENTS_SERVICE_DESCRIPTION=Второй сервис segmentsЗапустите командой docker-compose оба ваших инстанса segments, убедитесь, что в интерфейсе видно оба подключения к разным БД.