Платформа на много клиентов
Объяснение для тех, кто строит терминал или сервис для многих клиентов на программе 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 репозитория, что именно: это влияет на порядок работ.
Листать можно клавишами Влево и Вправо.