Перейти к основному содержимому

Splitter

Назначение

Splitter — сервис, назначающий эксперименты пользователям и разбивающий их на группы. Получает конфигурации экспериментов от Configurator и записывает события распределения в ClickHouse.

Схемы данных

к сведению

Схемы и таблицы в PostgreSQL создаются автоматически при деплое Splitter. Дополнительная настройка не требуется.

Справочно — основные таблицы:

ТаблицаНазначение
markersКонфигурации экспериментов, получаемые от Configurator
segmentsСписки пользователей для таргетирования экспериментов
marks, user_overridesРучные назначения групп пользователям в конкретных экспериментах
global_exclusionИсключение пользователей из всех экспериментов

Деплой

Для установки необходимо заполнить файл с параметрами values-trisigma.yaml

примечание

values.yaml содержит значения по умолчанию — не изменяйте его напрямую, а переопределяйте нужные параметры в отдельных файлах.

Параметры приложения

Хранятся в values-trisigma.yaml. Создайте файл из примера: cp values-trisigma.yaml.example values-trisigma.yaml.

Образ сервиса

ПараметрОписание
image.repositoryОбраз сервиса в Container registry
image.tagТег образа сервиса в Container registry
warning
Не используйте registry.trisigma.io напрямую

Образы необходимо предварительно зеркалировать в ваш собственный Container Registry.

Миграции

ПараметрОписание
postgresqlMigrator.image.repositoryОбраз мигратора для PostgreSQL миграций

PostgreSQL

ПараметрОписание
postgresql.hostХостнейм для подключения к PostgreSQL БД сервиса
postgresql.portПорт для подключения к PostgreSQL БД сервиса
postgresql.databaseНазвание БД, к которой подключается сервис. По умолчанию master
postgresql.userУчетная запись для подключения к PostgreSQL

ClickHouse

ПараметрОписание
clickhouse.hostДля записи expose-событий (таблица ab_clickstream)
clickhouse.portПорт для подключения к ClickHouse БД сервиса (native-протокол)
clickhouse.databaseНазвание БД, к которой подключается сервис. По умолчанию default
clickhouse.userУчетная запись для подключения к ClickHouse
clickhouse.tls.enabledИспользовать TLS при подключении к ClickHouse. По умолчанию true

Фоновые задачи (Crons)

ПараметрОписание
crons.image.repositoryОбраз планировщика фоновых задач
КронРасписаниеОписание
overrides_watcherКаждые 5 минЧистит устаревшие и истёкшие ручные назначения групп пользователям
configs_watcherКаждые 10 минУдаляет устаревшие конфигурации экспериментов и сегментов пользователей

Секреты приложения

Секреты в приложение можно передать двумя способами: задать значения напрямую в secrets-values.yaml — или указать имя существующего Kubernetes Secret в поле existingSecret в чарте (например, созданного через Vault или External Secrets Operator).

Создайте файл из примера: cp secrets-values.yaml.example secrets-values.yaml.

СекретКлючОписание
PGPASSWORDpostgresql.passwordПароль для подключения к PostgreSQL
CLICKHOUSE_PASSWORDclickhouse.passwordПароль для подключения к ClickHouse
CONFIGURATION_TOKENinterServiceAuth.configurationTokenТокен для авторизации запросов от Configurator1
USER_TOKENpublicApi.userTokenТокен для авторизации запросов для публичных эндпоинтов2. Без заполнения эндпоинты доступны без авторизации
ROTATABLE_USER_TOKENpublicApi.rotatableUserTokenОпциональный. Второй слот для бесшовной ротации USER_TOKEN
Ротация USER_TOKEN
  1. Задайте новый токен как ROTATABLE_USER_TOKEN
  2. Обновите клиентов на новый токен
  3. Перенесите его в USER_TOKEN и очистите ROTATABLE_USER_TOKEN

Использование существующего Secret (existingSecret)

Если вы не хотите передавать значения через secrets-values.yaml — укажите название вашего собственного Secret:

kubectl create secret generic trisigma-splitter-secrets \
--from-literal=PGPASSWORD='...' \
--from-literal=CLICKHOUSE_PASSWORD='...' \
--from-literal=CONFIGURATION_TOKEN='...' \
--from-literal=USER_TOKEN='...' \
-n trisigma-splitter
postgresql:
existingSecret: trisigma-splitter-secrets
secretKeys:
passwordKey: PGPASSWORD
clickhouse:
existingSecret: trisigma-splitter-secrets
secretKeys:
passwordKey: CLICKHOUSE_PASSWORD
interServiceAuth:
existingSecret: trisigma-splitter-secrets
secretKeys:
configurationTokenKey: CONFIGURATION_TOKEN
publicApi:
existingSecret: trisigma-splitter-secrets
secretKeys:
userTokenKey: USER_TOKEN
rotatableUserTokenKey: ROTATABLE_USER_TOKEN

Если имя ключа в Secret отличается — например, pg_password вместо PGPASSWORD — укажите соответствие через secretKeys:

postgresql:
existingSecret: trisigma-splitter-secrets
secretKeys:
passwordKey: pg_password
примечание

Использовать одновременно secrets-values.yaml и existingSecret в одном блоке не получится, способы несовместимы друг с другом.

Helm-установка

cd helm/trisigma-splitter

helm upgrade --install trisigma-splitter . \
--namespace trisigma-splitter \
-f values.yaml \
-f values-trisigma.yaml \
-f secrets-values.yaml # уберите, если все секреты через existingSecret

Проверка деплоя

После установки убедитесь, что сервис работает:

curl http://<splitter-host>:8890/_info

Ожидаемый ответ:

{
"ip": "10.x.x.x",
"host": "trisigma-splitter-<pod-id>",
"os": "Linux ...",
"language": "go",
"languageVersion": "go1.25.x"
}

Footnotes

  1. Соответствует секрету SPLITTER_TOKEN в Configurator.

  2. getFeaturesByTag, exposeManyV2, libGetFeaturesV4, libGetConfigsV4, libGetOverridesV4, libExposeV4.