Какие особенности использования API в современной биржевой торговле? С какими трудностями в разработке сталкивается крупный брокер? Александр Волков, который возглавляет направление API ответил на все эти вопросы в подкасте Kotelov digital finance.
Кому нужна API Тинькофф Инвестиций?
Если делить аудиторию на сегменты, то это:
Внешние сервисы, которые позволяют клиентам создавать роботов, вести аналитику и рассчитывать доходность
Алготрейдеры, которые хотят автоматизировать свою работу intraday. Если клиент торгует на днях, неделях, то ему проще заявку выставить через мобильное приложение или веб-терминал
Люди, которые используют неэффективности рынка в моменте. Например, образовался большой spread между покупкой и продажей — у робота есть эта ценная бумага. Он может одновременно покупать и продавать + выполнять функции маркетмейкера.
Алгоритмические трейдеры — это физические и юридические лица, использующие программы для покупки и продажи активов автоматически.
Что внутри второй версии API?
Первая версия API у Тинькофф Инвестиций была веткой от существующей версии мобильного приложения и веб-терминала. Вторая версия хоть и была основана на gRPC, но все равно продолжала поддерживать запросы по REST-API.
Rest
Изначально, его использовали в первой версии. Вторую версию можно также использовать через Rest.
gRPC-веб
Позволяет осуществлять стриминг рыночных котировок для браузерных веб-приложений
gRPC
По контрактам можно на любом языке программирования сгенерировать необходимый программный код и подключить поддержку API
Хорошо поддерживает версионность:
— все поля пронумерованы;
— старые поля будут поддерживаться при добавлении любого количества новых.
Поддержка дедлайнов запроса
?Ситуация
Запрос исполняется очень долго, например, какой-то инцидент на бирже. У клиента стоит тайм-аут в 5 секунд. Запрос уходит на сервер и исполняется 10 секунд, а у клиента все те же 5 секунд.
Получается, клиент уже дропает соединение, а мы продолжаем его исполнять. Важно учитывать, что внутри Тинькофф Инвестиций много сервисов, поэтому путь запроса нетривиальный. В итоге, один сервис может сделать запрос в другой сервис, в третий и так далее, а клиенту ответ уже не нужен.
В случае с gRPC мы задаем время, в течение которого запрос должен исполнится — дедлайн. Если дедлайн нарушен, то мы прерываем дальнейшую обработку, как и клиент.
Почему использовали gRPC, а не веб-сокеты?
Использование gRPC имеет несколько плюсов:
современность
производительность
бинарность
? Основная причина использования gRPC — объединить сервисы, которые обеспечивают трансляцию веб-сокетов и сервисы, которые обеспечивают персональную обработку единичных запросов. И упаковать все в один канал.
Что с базой данных? Прослойка или своя локальная база?
Направление API в Тинькофф Инвестициях ближе к прослойке.
Однако, есть задачи по рейтлимитированию — ограничению потока запросов, которое идет от каждого конкретного пользователя. Или логированию. Для них мы используем Postgres внутри нашей команды.
Все остальные запросы проксируются дальше во внутренние сервисы инвеста.
Проект в цифрах
Обычно у нас около 1 млн. ордеров в день. Если говорить про пиковые значения, то доходит до 20 000 запросов в секунду.
Платный или бесплатный сервис?
В основном API бесплатная, но мы придерживаемся тактики динамичного лимитирования, исходя из торговой активности клиента.
Мы столкнулись с проблемой, что клиенты сильно грузили бэкэнд. Если клиент исполняет много ордеров и приносит много комиссий, то и лимиты будут очень большие. А если клиент торугет мало или вообще не торгует, то у него будут стандартные лимиты по ордерам.
?Чем больше клиент торгует, тем больше ему позволяется делать запросов
Как построено кеширование?
У нас есть два типа кэша:
Redis
Кэш по торговым статусам — используется для сервисов, которым критически важна скорость уведомления пользователей о любых рыночных событиях.
Балансировщик: NGINX или самописный сервис?
Мы используем первичный балансировщик envoy. На них же прикручены рейтлимитеры.
В 2022 было много DDoS-атак. Причем, не конкретно по API — по нему доставляют проблемы только отдельно взбесившиеся роботы. Обычно DDoS подвергается вся структура банка и мы получаем за компанию.
Что такое взбесившийся робот? Теряют ли люди деньги из-за них?
Здесь важно понять сам процесс. Бывают такие ситуации:
?Заявка приходит на API — проходит проверку у брокера на достаточность средств — указанная сумма резервируется и блокируется на счете — после этого отправляется на биржу.
Если лимиты пересчитываются долго, то происходит такая ситуация:
?Ордер исполняется, а позиция до сих не обновилась. Робот думает, что позицию нужно докупить или продать, хотя по факту она уже исполнена. Таким образом, “ломается” стратегия клиента использующего робота: он может случайно закупить или продать лишних позиций, что особенно опасно при торговле с плечом. В конечном счете череда таких ошибок может привести к потере портфеля (Margin Call).
Стек
Мы используем много языков, но в основном Java. Раньше использовали GO, но решили отказаться от него. Не было какой-то принципиально технической причины или проблемы — получилось, что спецов, работающих на этом языке, проще найти на рынке.
Как боретесь с фродом?
С фродом боремся не столько мы, сколько биржа. Они сами настраивают антифродовские механики и сами потом блокируют клиентов. Мы, к сожалению, не можем влиять на этот процесс.
Как вы измеряете удовлетворенность юзеров?
Смотрим на количество сбоев.
Смотрим на время исполнения ордеров.
И проводим обычный кастдев: нравится или не нравится продукт? И так далее.
Как правило, всем довольны 20-25% пользователей.
Главная проблема API в Тинькофф Инвестициях
В подкасте мы говорили об этом, поэтому ответ можно посмотреть в подкасте.
Но опытным читателям предлагаем пофантазировать: с какими сложностями архитектуры столкнулся Александр и его команда? Пишите в комментариях