Разработка low-latency платформы для трейдинга криптовалют

Трейдеры прекрасно понимают рынок и могут генерировать стратегии, но они не программисты и не могут разрабатывать и сопровождать платформу.

Нужна быстрая и прозрачная платформа для торговли на криптобиржах.
К нам обратился небольшой трейдинговый фонд. Основные направления работы: короткие арбитражные стратегии – тут нужна максимальная скорость, чем быстрее работает система, тем больше заработаем. Среднесрочные стратегии – за счет анализа рынка и окружения получать профит предугадывая движения цен, тут скорость нужна чтобы терять как можно меньше если не угадали.

Итоги:

Сокращение суммарного времени обработки сообщения с ~500мс до 12мс

Задача:

  1. Проектирование архитектуры надежной системы сбора и хранения биржевых данных. Реализация прототипа по подготовленной архитектуре. Развитие и поддержка системы в течении жизни проекта.
  2. Проектирование архитектуры быстрой системы исторического тестирования стратегий. Реализация прототипа бэктеста. Оптимизация скорости тестирования стратегий.
  3. Проектирование быстрой и прозрачной платформы для взаимодействия с биржами в географических приближенных к биржам локациях. Проектирование инфраструктуры для оптимизации времени получения и отправки сообщений. Реализация прототипа платформы. Оптимизация стоимости и скорости взаимодействия с биржами по ходу развития проекта.

Период работы:

  1. Проектирование и разработка первого прототипа заняла 4 месяца, далее в течение всего проекта система хранения дорабатывалась и оптимизировалась.
  2. Бэктест или систему исторического тестирования оптимизировали в течение года. В последствии решили не тратить на неё время и сконцентрировать над оптимизацией торговой платформы реального времени.
  3. Первый прототип платформы был спроектирован и разработан за 6 месяцев. Получены первые показатели по скорости и платформа признана рабочей.
Далее в течение 3-х лет платформу дорабатывали и оптимизировали, ускоряя процесс сбора биржевых данных, время обработки стратегии и скорость доставки команд до биржи.

Команда:

На старте проектированием и разработкой прототипа занималось 4 человека. К моменту завершения работы суммарно в команде было 25 человек.

Первые прототипы платформы показывали среднее время доставки сообщения от коннектора до стратегии в 350 мс, на завершающем этапе этот же процесс укладывался в 2.5 мс на 99 м перцентиле. Подготовка и отправка сообщения в биржу также занимала в среднем 150 мс, а по итогам оптимизации этот процесс удалось уложить в 3 мс на 99 м перцентиле.

Технологии:

  • Java 17 и 21 как основной язык платформы;
  • Disruptor / Fork-Join Pool - в качестве пула потоков;
  • Java Microbenchmark Harness - для доказательства гипотез о том что X быстрее чем Y;
  • Java-async-profiler - для сбора информации о производительности участков в системе в условиях продакшена;
  • Non-blocking Concurrent Collections - для промежуточного хранения данных в платформе;
  • Off-heap memory API - для хранения биржевого стакана и быстрого доступа к нему;
  • Project Reactor - для изначального дизайна системы, впоследствии отказались из-за высоких накладных расходов на обслуживание реактивного стека и back-pressure которые нам не нужны;
  • Sockets - чтение и оптимизация потока биржевых данных;
  • Kafka - логирование состояния стратегии, сбор данных из биржи для истории;
  • Clickhouse - хранение исторических данных;
  • Стек - micrometer, prometheus и grafana - для визуального представления статистики о работе приложения;
  • Elasticsearch, logstash, kibana - для удобства работы с логами платформы и стратегий с разделением по правам доступа.
Задача была интересна тем, что, в отличии от классических приложений, где все оптимизируют throughput приложения, тут пришлось постоянно работать в ортогональном направлении и постоянно работать над latency доказывая бенчмарками и статистикой с боевых стратегий, что платформа стала быстрее.
Семён Бондарев, Java-разработчик Software Cats
Java
Low latency
Performance optimization
Обсудить проект_
Если у вас есть ИТ-проблема, оставьте ваши контакты, и мы поможем составить план ее решения. Обещаем не слать спам.
Нажимая, я говорю «Да»
политике конфиденциальности
hello@softwarecats.dev
Новосибирск, ул. Демакова
23/5, оф.308
Контакты_