Криптобиржи могут обновляться сотни раз в секунду, особенно во время важных новостей. Например, если выходит информация о снижении процентной ставки или крахе крупного фонда, тысячи трейдеров и алгоритмов начинают мгновенно реагировать, отправляя ордера на покупку или продажу.
Так как WebSocket работает асинхронно, в 1 миллисекунду может прийти сразу несколько сообщений. Например, если приходит 5 сообщений за 1 мс, они должны быть немедленно обработаны, иначе задержка возрастёт, а бот начнёт действовать с опозданием.
Если запустить 300 монет в одном потоке, то Event Loop (цикл событий) перегружается:
1). Все события (получение данных, обработка, выставление ордеров) выполняются последовательно.
2). Если в обработке данных есть задержка, это накапливается в очереди.
3). Из-за этого время между приходом данных и реакцией (выставлением ордера) увеличивается.
В результате бот принимает решения по устаревшим данным, что критично для высокочастотной торговли. Это похоже на пробку на дороге: если слишком много машин (монет) движется по одной полосе (потоку), всё встаёт.
Чтобы избежать задержек, каждый инстанс приложения у нас в Docker обрабатывает только одну монету:
1). Каждый бот работает в отдельном контейнере → нет перегрузки потока.
2). Обработка данных и выставление ордеров происходят без задержек.
3). Можно замерять время между приходом обновления и выставлением ордера.
4). Можно анализировать сетевые задержки между биржей и сервером (важно для арбитража и HFT).