Написать в Telegram@Odilient

ВЕБ-ПЛАТФОРМА

Агрегатор криптовалютного рынка в реальном времени

Консолидированный поток цен на криптовалюты для финтех-стартапа под NDA: согласование данных из нескольких медленных API с лимитами запросов в единый фид с обновлением каждые ~15 секунд.

NDA
Клиент
Финтех и криптовалюты
Отрасль
5 месяцев
Срок
2023
Год
С чего всё началось

Задача

Дашбордам стартапа требовалось обновление цен на криптовалюту примерно каждые 15 секунд. Доступные публичные API рыночных данных отдавали значения лишь каждые 30–40 секунд, нестабильно, со строгими лимитами на запросы и высокой стоимостью данных. Дорогие корпоративные фиды не рассматривались. Кроме того, провайдеры отвечали с разной скоростью, из-за чего простое отображение последних данных из одного источника приводило к медленному и скачкообразному обновлению.

Что мы сделали

Решение

Мы разработали слой агрегации, опрашивающий нескольких поставщиков со смещёнными интервалами для соблюдения лимитов запросов. Он дедуплицирует и согласовывает входящие ценовые тики в единый источник истины, а также использует взвешенный выбор источников с автоматическим переключением при сбоях. Консолидированный фид кэшируется в Redis и передаётся на дашборды по WebSockets, страницы с критичным SEO рендерятся на сервере через Inertia.js, а вся система контейнеризирована с помощью Docker.

Технологии
LaravelPostgreSQLRedisWebSocketsInertia.jsDocker
За кулисами

Как всё создавалось

Один надёжный поток цен из множества ненадёжных источников

Данные криптовалютного рынка разрознены. У каждого провайдера своя задержка, свои лимиты запросов и свои цены, и ни один из доступных по бюджету не давал этому финтех-стартапу (под NDA) того, что ему было нужно: дашбордов, которые обновляются примерно каждые 15 секунд. Публичные API, до которых можно было дотянуться, обновлялись раз в 30–40 секунд, да и то нестабильно.

Мы работали в full-stack-команде из трёх человек, которая за пять месяцев довела агрегатор данных криптовалютного рынка от MVP до продакшена.

Ключевые возможности

  • Смещённый опрос нескольких провайдеров: каждый провайдер опрашивается по собственному графику со сдвигом, поэтому запросы распределяются во времени, а не упираются в лимиты все разом.
  • Дедупликация и согласование тиков: повторяющиеся и противоречащие друг другу ценовые тики сводятся в единый источник истины.
  • Взвешенный выбор провайдеров: у провайдеров есть веса, поэтому, решая, каким данным доверять, агрегатор отдаёт предпочтение более надёжным источникам.
  • Автоматическое переключение на резервные фиды: когда один источник деградирует, данные продолжают поступать от остальных.
  • Сводные обновления примерно каждые 15 секунд: кэшированный в Redis фид обновляется с циклом около 15 секунд.
  • Доставка по WebSocket: дашборды получают новые цены сразу после публикации, не опрашивая сервер.
  • Расписание с учётом затрат: графики опроса настроены так, чтобы платных вызовов API было как можно меньше.

Архитектура и технологический стек

Слой агрегации на Laravel и PostgreSQL

Агрегатор — приложение на Laravel с базой PostgreSQL. Задачи опроса по расписанию собирают цены у каждого провайдера и передают тики на согласование. Провайдеры отвечают с разной скоростью, поэтому логика согласования рассчитана на запоздавшие данные, а не предполагает, что все источники отчитываются в один и тот же момент.

Кэш Redis и фид по WebSocket

Согласованные цены записываются в Redis, который и служит сводным фидом. Дашборды читают из этого кэша и никогда не обращаются к провайдерам напрямую, поэтому рост трафика на дашбордах не означает роста платных вызовов API. Новые цены доходят до фронтенда по WebSocket, и дашборды остаются живыми.

Страницы на Inertia.js и Docker

Страницы для пользователей построены на Inertia.js, а там, где важна видимость в поиске, используется серверный рендеринг. Вся система контейнеризирована в Docker, поэтому деплои воспроизводимы.

Надёжность и контроль затрат

Самые сложные задачи здесь были эксплуатационными:

  • Разброс задержек: согласование сглаживает разницу между быстрыми и медленными провайдерами, поэтому один медленный источник не тормозит весь фид.
  • Лимиты запросов и стоимость данных: смещённый опрос и кэширование держат объём запросов в пределах лимитов каждого провайдера и снижают расходы на внешние API.
  • Сбои провайдеров: благодаря взвешенному выбору и резервным фидам потеря одного провайдера лишь уменьшает число источников за фидом, а не роняет продукт.

Смежные работы

«ИИ-платформа аналитики криптовалют» добавляет к рыночным данным анализ тональности и выявление скама. Finkonkurs — портал с ценами на криптовалюты, рынками и новостями. Такие продукты с большими объёмами данных мы создаём в рамках услуги по разработке веб-приложений.

Создадим вместе

Хотите что-то вроде Агрегатор криптовалютного рынка в реальном времени?

Расскажите, что должен делать ваш продукт. Мы определим объём работ, распишем сроки и пришлём фиксированную цену — бесплатно и без обязательств продолжать.

Бесплатная консультация Без обязательств Быстрый ответ