Горячие клавиши

← и →: предыдущая и следующая глава

S или /: поиск по книге

?: показать эту подсказку

Esc: закрыть подсказку или поиск

Платформа на много клиентов

Объяснение для тех, кто строит терминал или сервис для многих клиентов на программе brokapi: как разделить клиентов, сколько это стоит и чего пока нет. Как поднять службу и гейтвеи, написано в Быстром старте, что в конфиге - в Конфиге brokapi.toml.

Один клиент - один гейтвей

Гейтвей - отдельный процесс на один счет брокера. Его заявки, сверка, счетчик лимитов и ключ доступа принадлежат только ему. Поэтому граница между клиентами платформы - гейтвей: у каждого клиента свой гейтвей со своим токеном.

state_dir = "/var/lib/brokapi"

[[gateway]]
name = "client-1042"
broker = "tbank"
account = "2000000001"
token_file = "/etc/brokapi/clients/1042.token"

[[gateway]]
name = "client-1043"
broker = "finam"
account = "A12345"
token_file = "/etc/brokapi/clients/1043.token"

Почему так, а не боты разных клиентов на одном гейтвее:

  • Ключ доступа один на гейтвей (access.key в его каталоге). Кто читает ключ, тот может все, что умеет гейтвей: торговать, снимать заявки, читать портфель. Ролей вроде «только чтение для этого бота» у ключа нет. Ограничение на весь гейтвей есть: read_only и потолки заявок в [gateway.settings] (Потолки заявок).
  • Имя бота гейтвей не проверяет. x-brokapi-bot придумывает сам бот, оно нужно журналу и фильтру own_orders_only, но не защищает. Два бота с одним ключом видят заявки друг друга (без own_orders_only) и могут их снять.
  • Лимит брокера считается на токен. Гейтвей на клиента - и счетчик лимитов на клиента, один клиент не съест квоту другого.

Ключи гейтвеев лежат в каталоге состояния с правами 700, файлы 600. Ключ одного клиента не открывает гейтвей другого. Подробности - Подключить бота.

Добавить клиента, сменить токен, убрать

Служба меняет состав гейтвеев без остановки, остальные клиенты работают дальше:

ЧтоКак
Новый клиентдописать [[gateway]] в конфиг, brokapi add <имя>
Новый токен клиентазаменить файл токена, brokapi restart <имя>: гейтвей читает токен при старте
Поменялись настройки нескольких клиентовbrokapi reload: запустит новые, остановит убранные, перезапустит измененные, остальные не тронет
Клиент ушелbrokapi stop --cancel-orders <имя>, если его заявки надо снять, затем убрать [[gateway]] из конфига и brokapi remove <имя>

Каждая команда отвечает про одного клиента, brokapi ps --check - про всех сразу (Запуск и обслуживание).

Сколько это стоит

Каждый гейтвей - процесс. На имитации Т-Банка гейтвей в простое занимает около 12 МБ памяти (brokapi top, колонка памяти), с подписками и кольцом событий больше: размер кольца задает [gateway.ring]. Порядок величины для планирования: сотня клиентов - около гигабайта и сотня процессов на машине, тысяча - около десяти гигабайт. Мерьте на своей нагрузке через brokapi top: наших замеров на сотнях гейтвеев нет.

Несколько счетов под одним токеном

У Т-Банка один токен может видеть несколько счетов. Гейтвей ведет один счет, значит, счетов два - гейтвеев два, и оба на одном токене. Брокер считает лимит на токен, а гейтвеи считают каждый свой, поэтому brokapi check предупреждает: uses the same token as .... Разделите ведра так, чтобы сумма не превышала лимит брокера. Названия ведер - в таблице rate limit of the broker команды brokapi status <гейтвей>. Пример: общий лимит Т-Банка 50 запросов в секунду пополам:

[[gateway]]
name = "tbank-main"
broker = "tbank"
account = "2000000001"
token_file = "/etc/brokapi/tbank.token"

[gateway.limits.global]
rate = 25
per = "1s"
burst = 25

[[gateway]]
name = "tbank-iis"
broker = "tbank"
account = "2000000002"
token_file = "/etc/brokapi/tbank.token"

[gateway.limits.global]
rate = 25
per = "1s"
burst = 25

Так же делят и другие ведра, если оба счета активно их тратят. Предупреждение check останется: оно напоминает, что делить пришлось вручную.

Чего пока нет

  • Доступа по сети. Гейтвей слушает unix-сокет на той же машине. Боты платформы, которые живут на других серверах, к нему не подключатся. Ставить свой прокси с TLS перед сокетом можно, но этот путь мы не проверяли.
  • Ролей у ключа. Только чтение или торговля - настройка всего гейтвея (read_only), а не ключа.
  • Одной службы на много машин. Служба управляет гейтвеями своей машины. Много машин - много служб, каждая со своим конфигом.

Если вам это нужно для платформы, напишите в issues репозитория, что именно: это влияет на порядок работ.

Листать можно клавишами Влево и Вправо.

brokapi by RunInfra