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

Курси криптовалют розходяться між біржами саме в пікові моменти — і рішення ухвалюються на застарілих даних. Ми розробляємо системи моніторингу під ключ: збираємо котирування з потрібних джерел, налаштовуємо потік у реальному часі та передаємо з регламентами доступу. Замовник отримує єдину картину ринку та скорочує час на звірку даних.
Часті запитання

Система моніторингу криптовалют: де розходяться курси

Одна й та сама пара на двох майданчиках в один момент показує різні цифри. На ліквідних інструментах розходження котирувань вимірюється частками відсотка, на тонких — розходяться в рази, і формально обидва майданчики праві: у кожного своя книга заявок і своя остання угода.

Поки оператор звіряє значення вручну через вебінтерфейси, ринок іде, а рішення ухвалюється за цифрою, якої вже не існує.

Причина — в будові джерел ринкових даних. Спотовий стакан дає миттєву, але вузьку картину одного майданчика; індексний агрегатор усереднює кілька бірж і відсікає викиди, тому його значення завжди відстає; позабіржові та розрахункові котирування надходять дискретними зрізами.

Затримка оновлення курсу складається з інтервалу публікації, часу доставки й моменту, коли значення зафіксували у себе.

Далі з’являється ціна помилки: спрацьований ризик-контроль на одному джерелі мовчить на іншому, звітність не сходиться між підрозділами, а арбітражна різниця, добре видима на історичному графіку, в моменті недосяжна.

Актуальність курсу — це не «плюс-мінус секунда», а відповідь на питання, до якого моменту часу прив’язана конкретна цифра.

Курси криптовалют у реальному часі — задача не про «показати число», а про те, щоб кожне значення несло позначку джерела, часу та методики розрахунку.

Розбираємо, як це закривається: нормалізація потоків, вибір опорної ціни та правила, за якими розходження стає видимим сигналом, а не сюрпризом у звіті.

Що дає потік котирувань у реальному часі

Ручна звірка курсів за кількома майданчиками тримається рівно до першого спалаху волатильності: ціни розходяться, частина екранів показує застаріле значення — і рішення ухвалюється за ним.

Єдине джерело даних прибирає саму можливість такого розходження: потік котирувань надходить в одну нормалізовану стрічку, де в інструмента одна ціна й одна позначка часу.

Що знімається разом із ручною звіркою

Далі ефект видно за поведінкою системи під навантаженням, а не за обіцянками:

  • Єдине джерело даних — замість окремого з’єднання з кожним майданчиком одна стрічка; розходження між вітринами не виникає за побудовою.
  • Пропуски в даних — обрив з’єднання закривається перепідключенням із добором випалого відрізка, графік не рветься на очах користувача.
  • Усунений клас відмов — розсинхронізація вітрини й розрахункового модуля: обидва читають один потік, а не свої копії.
  • Швидкість реакції на ринок — від угоди на майданчику до оновлення на екрані минають секунди замість хвилин ручного оновлення.
  • Пікова волатильність — сплеск активності не обвалює потік: черга розбирається за пріоритетами інструментів.
  • Спостережуваність — журнал затримок і оповіщення на розрив потоку окремо для кожного інструмента.

Для звірки історичних рядів підключаємо зовнішній агрегатор, наприклад CoinGecko, але операційним джерелом залишається прямий потік із майданчиків: агрегатор віддає дані із затримкою і не годиться там, де потрібна реакція на рух у моменті.

Варіанти збору даних: опитування, потік, гібрид

Три способи отримати ринкові дані розрізняються не «швидкістю», а профілем відмови та вартістю підтримки. Збір даних за розкладом простий у налагодженні: один запит — один знімок стану, легко відтворити й звірити з історією.

Потоковий канал віддає зміни одразу й дає меншу затримку, але вимагає постійно тримати з’єднання, обробляти обриви й відновлювати пропущений інтервал.

Варіант Коли підходить Обмеження
Опитування за розкладом Аналітика, портфель, оповіщення, де затримка в секунди не критична Пропуск руху всередині інтервалу, ліміти джерела, зростання навантаження при частому опитуванні
Потоковий канал Стакан, тіки, арбітраж, швидкі оповіщення за ціною Обриви й дублі подій, складніше тестувати, потрібне довантаження історії
Гібридна схема Продакшн з вимогою безперервності даних Два маршрути, звірка джерел і єдина модель подій

Гібридна схема збору

На практиці обирають гібридний варіант: потоковий канал тримає актуальну ціну, а збір даних за розкладом працює як резервний маршрут і дозаповнює пропуски після обриву.

Обидва джерела приводяться до однієї моделі події з позначкою часу й ознакою походження — розрахунковий модуль не знає, звідки прийшла ціна. Якщо потік мовчить довше за поріг, перемикач переходить на опитування, а при відновленні звіряє останні значення й гасить розходження.

Етапи робіт: від аудиту джерел до передачі

Роботу над системою моніторингу криптовалют ведемо етапами, і кожен етап закривається перевірюваним артефактом: переліком джерел, схемою, працюючим контуром збору або протоколом випробувань. Прогрес видно за фактом, а вимоги можна виправити до того, як вони перетворяться на переробку.

  1. Аудит джерел даних. Звіряємо торгові майданчики й агрегатори за повнотою віддачі та стабільністю, перевіряємо розходження в позначках часу. Фіксуємо придатні джерела й запасні на випадок відмови основних.
  2. Схема потоків. Маршрут даних від приймання до вітрини: де нормалізація, де агрегація, де зберігається історія і за якими правилами відсікаються викиди.
  3. Налаштування збору. Приводимо інструменти, валютні пари й позначки часу до єдиного вигляду, налаштовуємо дедуплікацію угод і відновлення пропусків після обривів зв’язку.
  4. Перевірка на збоях. Вимикаємо джерело, вносимо затримку, подаємо сплеск активності — дивимося, чи перемикається контур на резерв і чи не втрачає історію.
  5. Навантажувальна перевірка. Проганяємо контур на обсягах, вищих за очікувані, і заміряємо, як зростає затримка оновлення в піку та чи відновлюється вона після спаду.
  6. Спостережуваність. Метрики й оповіщення для кожного джерела, окремий контроль розходжень між майданчиками, щоб викривлення ціни не пішло в розрахунок непоміченим.
  7. Приймання та передача. Демонстрація на реальних даних, документація щодо конфігурації, регламент дій при збої, навчання вашої команди.

Після передачі залишаємося на зв’язку в узгодженому періоді супроводу — цей час іде на тонке налаштування, а не на нові вимоги.

Схеми, політики доступу та регламенти на виході

Після завершення проєкту в замовника залишається не лише працюючий сервіс, а й комплект артефактів, за якими систему можна розвивати власними силами або передати іншій команді без розбору коду. Ми фіксуємо їх наприкінці робіт і синхронізуємо з фактичним станом стендів, а не з чернетками.

  • Схема інтеграції — потоки котирувань від джерел до підписників, точки перемикання на резервний канал, формати повідомлень і заявлена частота оновлення.
  • Політики доступу та ролі — матриця прав: хто додає джерела, хто бачить службові метрики, хто зупиняє розрахункові задачі. За замовчуванням діє принцип найменших привілеїв.
  • Регламент реакції на збої — рівні інцидентів, пороги оповіщення, порядок дій чергового, час перемикання на резервне джерело та умови повернення.
  • Документація на рішення — опис компонентів, межі відповідальності між сервісами, відомі обмеження та ухвалені компроміси з обґрунтуванням.
  • Інструкція з відновлення — покроковий сценарій підйому з резервної копії з фактично заміряним часом, а не розрахунковим.
  • Набір перевірок — автоматичні тести на розрив потоку котирувань, розходження цін між джерелами та відставання оновлень.
  • Журнал змін і передача — розбір архітектури з вашою командою, відповіді на питання щодо коду та список задач, відкладених усвідомлено.

Комплект перезбирається при кожній суттєвій зміні потоку даних: застаріла схема небезпечніша за її відсутність, бо за нею ухвалюють рішення.

Кейс: моніторинг курсів без розходжень на піках

Сервіс збирав котирування з 14 джерел і складав їх в одну таблицю. На спокійному ринку розходжень не було видно, але при різкому русі ціни за одним інструментом розходилися до 1,2% — користувач бачив курс, якого на ринку не існувало. У моменти сплесків частина опитувань не встигала відпрацювати, і дані просто випадали з потоку.

Ми замінили періодичні опитування на постійно відкриті потокові канали й додали шар нормалізації: приведення джерел до єдиної шкали часу, дедуплікація повторних тіків, відсів викидів за медіаною сусідніх вікон.

Кожне значення зберігає позначку джерела й час події, тому розходження тепер видно у звіті, а не в інтерфейсі клієнта.

Метрики до і після

Показник До Після
Джерел у потоці 14 38
Розходження на піках до 1,2% 0,05%
Затримка від події до графіка 4–7 с до 1 с
Втрата тіків при сплеску 0,3% 0,01%
Відновлення після збою джерела близько 20 хв близько 40 с

Окремо закрили відмовостійкість. Раніше падіння джерела зупиняло графік до ручного втручання: черговий помічав завмерлий потік за скаргою.

Тепер перемикання на резервний канал займає десятки секунд, а споживачі підписки не розриваються — сервіс продовжує віддавати дані тим самим клієнтам.

Підсумок кейсу моніторингу курсів — не лише цифри стабільності потоку. Шар перевірок порівнює ціни між джерелами, позначає арбітражні аномалії та піднімає оповіщення при стійкому розходженні.

Клієнт бачить одну ціну із зазначенням, скільки джерел її підтвердили, і це зняло основну частину звернень у підтримку.

Чим потік відрізняється від періодичного опитування

Потік надсилає подію на кожну зміну ціни, періодичне опитування — знімок із фіксованим кроком. При кроці в 30 секунд перепад усередині інтервалу не видно, і метрики — волатильність, сплески обсягу, спрацьовування порогів — рахуються за викривленим рядом. Для вітрини курсів це непомітно, для алертів і перерахунку позицій — критично.

Але потік не скасовує опитування. Постійне з’єднання рветься при деградації мережі та на боці джерела, а пропущену подію легко прийняти за «ціна не змінювалася».

Опитування ідемпотентне: повторний запит повертає той самий стан, і відновлення після збою не вимагає наздоганяти історію.

Частота оновлення — не самоціль: джерела розрізняються за гранулярністю. Агрегатори на кшталт CoinGecko віддають усереднені значення із затримкою, біржові канали — кожну угоду.

Режим підбираємо під джерело й задачу: де немає широкомовного каналу, будуємо опитування з адаптивним кроком під поточну волатильність.

Окрема стаття витрат — підтримка. Потік вимагає буферизації, відсіювання дублів і контролю порядку подій, опитування — планувальника з повторами та паузами.

Гібрид закриває обидва слабкі місця: потік тримає актуальність, а знімок раз на кілька хвилин звіряє ряд з еталоном і підтягує пропущене після розриву.

Часті технічні питання щодо інтеграції

Питання щодо інтеграції зазвичай виринають на етапі, коли збір котирувань уже розгорнуто й працює: потрібно зрозуміти, як вбудуватися в наявний контур, не ламаючи його. Шар розрахунку надбудовується поверх поточного збору — переписувати працюючі частини не потрібно.

Нижче — чотири сумніви, які ми розбираємо до старту: відмова майданчика, різна затримка джерел, достовірність курсу та права на результат.

Що буде, якщо майданчик перестане віддавати дані?

Кожне джерело ізольовано: обрив з’єднання не зупиняє інші канали. Підключення відновлюється з наростаючою паузою, а стан курсу тримається на останньому підтвердженому значенні з позначкою про його давність.

Якщо майданчик мовчить довше за заданий поріг, він виключається з розрахунку — підсумкове значення продовжує рахуватися за живими джерелами.

Як рахувати курс, якщо майданчики віддають дані з різною затримкою?

Значення прив’язується до позначки часу самого майданчика, а не до моменту приймання, тому розкид затримок не зсуває картину. Розрахунок іде за ковзним вікном: канали, що випали з нього, до підсумку не потрапляють. У відповіді видно, за яким набором джерел пораховано курс.

Звідки впевненість, що курс достовірний?

Кожне значення — зведення кількох незалежних майданчиків з відсіканням викидів і допуском на розходження між ними. Якщо джерела розходяться сильніше за поріг, значення позначається як спірне, а не віддається як факт. Пороги налаштовуються під ваш профіль активів.

Кому належать код, схеми та документація?

Права передаємо замовнику: вихідники, схеми потоків і даних, конфігурації, документація та регламенти розгортання. Система працює у вашому контурі й не залежить від нашого середовища — супровід можна вести силами своєї команди.

Що потрібно для старту і як ми рахуємо оцінку

Оцінка робіт спирається на вихідні дані щодо задачі, а не на усереднені припущення: від кількості джерел і вимог до свіжості котирувань залежить і склад системи моніторингу криптовалют, і трудовитрати. Тому починаємо з короткого переліку того, що надсилаєте зі свого боку.

  • Перелік майданчиків: звідки беремо котирування — відкриті інтерфейси, агрегатори, власні вузли.
  • Доступи до джерел: ключі, ліміти запитів, вимоги до ідентифікації, обмеження за частотою.
  • Інструменти та пріоритети: які пари потрібні, за якими рахуємо зведену ціну, які довідкові.
  • Вимоги до свіжості: яку затримку вважаєте робочою і що робити при розходженні джерел.
  • Точки виведення: панель, застосунок, зовнішня підписка — хто дивиться дані й які дії виконує.
  • Навантаження та історія: скільки одночасних підключень очікуєте, за який період зберігаємо котирування.
  • Поведінка при збоях: що показувати, якщо майданчик недоступний, чи потрібен перехід на резервне джерело.

З цим набором ми розбираємо потоки даних між джерелами, сховищем і клієнтськими екранами, позначаємо вузькі місця й повертаємося з планом та оцінкою строків: що робимо на першому етапі, що відкладаємо, які перевірки закладаємо.

Якщо частина даних поки закрита, фіксуємо припущення прямо в оцінці. Опишіть задачу у вільній формі — решту уточнимо в розмові, а потім повернемося зі складом робіт і строками.

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

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1543
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1374
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    816
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142