Разработка realtime-системы мониторинга курсов криптовалют

«Просто дёргаем CoinGecko API раз в минуту» — этот подход работает ровно до первого rate limit. Мы сталкивались с проектами, где требовались данные быстрее, чем раз в 60 секунд, и с минимальной задержкой. Система мониторинга курсов — это pipeline из пяти слоёв: источник данных → нормализация → хране

Направления блокчейн-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1450
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1309
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1003
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1269
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    719
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1010

«Просто дёргаем CoinGecko API раз в минуту» — этот подход работает ровно до первого rate limit. Мы сталкивались с проектами, где требовались данные быстрее, чем раз в 60 секунд, и с минимальной задержкой. Система мониторинга курсов — это pipeline из пяти слоёв: источник данных → нормализация → хранение → доставка клиентам → алерты. Каждый слой требует своей архитектуры: WebSocket для low latency, PostgreSQL для хранения, Redis для кеширования и message queue для асинхронной обработки. За 5+ лет работы мы реализовали более 20 таких систем для трейдинговых платформ и DeFi-проектов. Гарантируем uptime 99.9% и снижение затрат на инфраструктуру до 40%. Типичный кейс: клиенту требовались realtime цены с трёх CEX и двух DEX одновременно — система обрабатывает 200 000 тиков в секунду с задержкой менее 100 мс.

Как выбрать источники данных? — разработка realtime системы

CEX через WebSocket (lowest latency)

Для realtime курсов — напрямую к биржевым WebSocket стримам. Никакой агрегации, минимальная задержка:

const ws = new WebSocket('wss://stream.binance.com:9443/stream?streams=btcusdt@ticker/ethusdt@ticker') ws.on('message', (data) => { const { stream, data: tick } = JSON.parse(data) const price = parseFloat(tick.c) const volume24h = parseFloat(tick.v) normalizeAndStore({ source: 'binance', symbol: tick.s, price, volume24h }) }) 

Аналогичные стримы есть у Coinbase, OKX, Bybit. Для ликвидных пар используем три источника минимум и медианную цену для защиты от outliers.

DEX on-chain цены

Для DeFi приложений цены часто нужны именно on-chain. Два подхода:

Uniswap V3 TWAP — устойчив к flash loan атакам, требует цену за последние N блоков. Chainlink Price Feeds — стандарт для production смарт-контрактов, использует децентрализованную сеть оракулов (Chainlink Data Feeds documentation):

AggregatorV3Interface priceFeed = AggregatorV3Interface(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419); (, int256 price, , uint256 updatedAt,) = priceFeed.latestRoundData(); require(block.timestamp - updatedAt < 3600, "Price feed stale"); 

Агрегаторы (CoinGecko/CoinMarketCap)

Для исторических данных и менее ликвидных токенов. Rate limits: CoinGecko free — 30 запросов/мин. Кешируем агрессивно.

Источник Задержка Надёжность Применение
CEX WebSocket (Binance) <100 мс Высокая Realtime трейдинг
DEX TWAP (Uniswap V3) ~12 с (блок) Средняя DeFi приложения
Chainlink Price Feeds ~1 мин Очень высокая Production смарт-контракты
CoinGecko API 1–60 с Средняя Исторические данные

Почему TimescaleDB?

Курсы — типичный time-series use case. PostgreSQL с расширением TimescaleDB — хороший выбор, если уже используется PG:

CREATE TABLE price_ticks ( time TIMESTAMPTZ NOT NULL, symbol VARCHAR(20) NOT NULL, source VARCHAR(20) NOT NULL, price NUMERIC(20, 8) NOT NULL, volume_24h NUMERIC(30, 2) ); SELECT create_hypertable('price_ticks', 'time'); -- Автоматическая агрегация в OHLCV свечи SELECT time_bucket('1 minute', time) AS bucket, symbol, first(price, time) AS open, max(price) AS high, min(price) AS low, last(price, time) AS close, sum(volume_24h) AS volume FROM price_ticks WHERE time > NOW() - INTERVAL '1 hour' GROUP BY bucket, symbol ORDER BY bucket DESC; 

TimescaleDB автоматически партиционирует данные по времени. Retention policy — автоудаление тиков старше 30 дней, хранить только агрегаты для истории. Используем компрессию для экономии дискового пространства до 60%.

Как работают алерты?

Price change alert

Цена изменилась на X% за Y минут:

class PriceAlertService { constructor(redis) { this.redis = redis } async checkAlert(symbol, currentPrice) { const pastPrice = await this.redis.get(`price:${symbol}:1m_ago`) if (pastPrice) { const changePercent = Math.abs((currentPrice - pastPrice) / pastPrice * 100) if (changePercent >= ALERT_THRESHOLD_PERCENT) { await this.triggerAlert({ symbol, currentPrice, changePercent }) } } await this.redis.setex(`price:${symbol}:1m_ago`, 60, currentPrice.toString()) } } 

Stale data alert

Если источник перестал обновляться — проверяем время последнего тика и отправляем уведомление в Telegram/Slack/email. Настраиваемые webhook позволяют интегрировать любую систему.

Метрика Порог Действие
Задержка обновления >5 секунд WebSocket reconnect
Отсутствие данных от источника >30 секунд Failover на резервный
Процент изменения цены за 1 минуту >1% Price change alert

TWAP для защиты от манипуляций

TWAP (Time-Weighted Average Price) — усреднённая цена за определённый период. В Uniswap V3 он рассчитывается за последний блок и устойчив к краткосрочным манипуляциям, таким как flash loan атаки. Для DeFi приложений это стандарт безопасности.

Процесс работы

  1. Аналитика — определяем требования: источники, latency, объём данных, типы алертов.
  2. Проектирование — архитектура pipeline, выбор СУБД, схема данных, протокол доставки.
  3. Реализация — подключение источников, написание коллектора, нормализация, настройка алертов и API.
  4. Тестирование — нагрузочное тестирование (до 100 000 тиков/с), проверка failover, юнит-тесты.
  5. Деплой — развёртывание на инфраструктуре клиента, мониторинг системы.

Что входит в работу

  • Архитектурная документация с описанием pipeline и схемы данных.
  • Доступ к репозиторию с исходным кодом коллектора, алертов и API.
  • Интеграция с вашей инфраструктурой (CI/CD, мониторинг, логи).
  • Обучающая сессия для команды (до 2 часов).
  • Поддержка в течение 30 дней после деплоя.

Сроки и стоимость

Сроки варьируются от 2 до 8 недель в зависимости от сложности. Средний бюджет такого проекта — от $5,000 до $20,000. Мы гарантируем снижение затрат на инфраструктуру до 40% за счёт оптимизации хранения и кеширования. Оценим ваш проект бесплатно.

Типичные ошибки и как их избежать
Ошибка Решение
Отсутствие реконнекта с exponential backoff для WebSocket Реализовать автоматический reconnect с нарастающей задержкой
Хранение всех тиков без агрегации Использовать TimescaleDB с политиками сжатия и удаления
Использование одного источника Подключать минимум два независимых источника с failover
Проверка свежести данных только со стороны клиента Настроить stale data алерты на стороне сервера
Игнорирование rate limits агрегаторов Кешировать ответы и ограничивать частоту запросов

Получите консультацию инженера с 5+ лет опыта. Свяжитесь с нами для оценки вашего проекта.