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

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.

Таймзона

ПараметрОписание
timezoneТаймзона. IANA tz, например Europe/Moscow

Миграции

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

PostgreSQL

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

ClickHouse

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

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

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

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

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

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

PostgreSQL

СекретКлючОписание
PGPASSWORDpostgresql.passwordПароль для подключения к PostgreSQL

ClickHouse

СекретКлючОписание
CLICKHOUSE_PASSWORDclickhouse.passwordПароль для подключения к ClickHouse

Межсервисная авторизация

СекретКлючОписание
CONFIGURATION_TOKENinterServiceAuth.configurationTokenТокен для авторизации запросов от Configurator1

Публичный API

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

Лицензия

СекретКлючОписание
LICENSE_KEYlicense.licenseKeyЛицензионный ключ Trisigma Enterprise

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

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

kubectl create namespace trisigma-splitter

kubectl create secret generic trisigma-splitter-secrets \
--from-literal=PGPASSWORD='...' \
--from-literal=CLICKHOUSE_PASSWORD='...' \
--from-literal=CONFIGURATION_TOKEN='...' \
--from-literal=USER_TOKEN='...' \
--from-literal=LICENSE_KEY='...' \
-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
license:
existingSecret: trisigma-splitter-secrets
secretKeys:
licenseKeyKey: LICENSE_KEY

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

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

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

Helm Install

cd trisigma-splitter

helm upgrade --install trisigma-splitter . \
--namespace trisigma-splitter --create-namespace \
-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.