Tinkoff / invest-openapi

Документация для Тинькофф Инвестиции OpenApi
https://tinkoff.github.io/invest-openapi/
456 stars 52 forks source link

Проблемы стабильности websocket соединений #590

Closed IvanIvanov1985 closed 3 years ago

IvanIvanov1985 commented 3 years ago

Привет.

Я пробую подключаться по stream-протоколу, и обнаружил что часто происходят дисконнекты со стороны сервера (на уровне 10-20 раз в сутки)

Делаю 6 подключений и для начала в тестовом режиме на каждое подписываюсь на минутные свечи по 2 тикерам (т.е. всего 12). В случае disconnect у меня клиент через секунду делает автоматический reconnect, но не всегда получается сделать его сразу, часто почти сразу же падает снова в disconnect, часть данных в итоге теряется.

В документации написано, что рекомендуется не более 30 тикеров на подключение для стабильной работы, но у меня disconnect-ы часто происходят даже при такой небольшой нагрузке в 2 тикера на подключение.

Дополнительные наблюдения:

  1. Как правило дисконнекты идут пачками, сгруппировыны близко по времени (несколько раз в пределах 5-60 минут)
  2. Наблюдал их не только в момент активных торгов, но одиночные даже на выходных, когда свечей вообще нет
  3. Дисконнекты происходят всегда по всем 6 соединениям почти сразу (разрос не более нескольких секунд)
  4. Для исключения проблем с websocket-библиотекой на стороне клиента, пробовал подключаться разными способами - через websocketpp на C++ и через websocket.WebSocketApp на python - результат одинаковый

Я хотел бы понять, это какая-то временная проблема с нагрузкой прямо сейчас или даже на такой небольшой нагрузке, регулярные дисконнекты - это ожидаемое поведение? Некоторые из тикеров у меня высоколиквидные голубые фишки, такие как SBER, LKOH, AAPL, FB. В момент активных торгов трафик по тикеру может достигать десятков сообщений в секунду по одному такому тикеру. Это может быть связано с этим?

Был бы очень благодарен, если получится по логам на стороне сервера понять почему происходят дисконнекты (например в приватной переписке могу скинуть свой логин и/или ip и время когда фиксировал проблему). Чтобы исключить гипотезу о нестабильности сети (хотя судя по частоте дисконнектов и по тому, что запросы http стабильны, думаю вряд ли дело в сети)

И ещё два доп. вопроса:

  1. Мне не нужно полный секундный реалтайм, достаточно минутных свечей (через http нельзя, т.к. не влезаю в ограничение RPS). Планируется ли (или может быть уже есть) в stream-протоколе возможность получать более редкие обновления свечей, раз в минуту например, чтобы снизить нагрузку как сервера, так и клиента?

  2. Планируется ли возможность в REST протоколе получать несколько FIGI из /market/candles в один запрос?

AlexanderVolkovTCS commented 3 years ago

Добрый вечер,

Был бы очень благодарен, если получится по логам на стороне сервера понять почему происходят дисконнекты

Да, дисконнекты периодически бывают по разным причинам, в т.ч. нашим внутренним

Это может быть связано с этим?

Сервер принудительно инициирует дисконнет, если клиент не успевает забирать данные.

Мне не нужно полный секундный реалтайм, достаточно минутных свечей

В существующих стримах не планируется, в будущих gRPC стримах будет.

Планируется ли возможность в REST протоколе получать несколько FIGI из /market/candles в один запрос?

Пока нет