Розробка 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 тижнів залежно від складності. Ми гарантуємо зниження витрат на інфраструктуру до 40% за рахунок оптимізації зберігання та кешування. Оцінимо ваш проєкт безкоштовно.

Типові помилки та як їх уникнути
Помилка Рішення
Відсутність реконнекту з exponential backoff для WebSocket Реалізувати автоматичний reconnect з наростаючою затримкою
Зберігання всіх тиків без агрегації Використовувати TimescaleDB з політиками стиснення та видалення
Використання одного джерела Підключати мінімум два незалежних джерела з failover
Перевірка свіжості даних лише з боку клієнта Налаштувати stale data алерти на стороні сервера
Ігнорування rate limits агрегаторів Кешувати відповіді та обмежувати частоту запитів

Отримайте консультацію інженера з 5+ років досвіду. Зв'яжіться з нами для оцінки вашого проєкту.