Розробка T&S стрічки для криптобірж під ключ

Пікові навантаження на біржі розривають стрічку угод, і трейдери втрачають картину ринку. Ми розробляємо стрічку Time & Sales під ключ: від схеми потоку до перевірки на піках. Ви отримуєте повний потік угод без пропусків, втрат і помітних затримок.
Часті запитання

Time & Sales стрічка: де вона ламається під навантаженням

Стрічка Time & Sales — це потік усіх виконаних угод: ціна, обсяг, сторона ініціатора.

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

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

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

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

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

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

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

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

Ефект впровадження: відгук, повнота, стійкість до піків

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

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

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

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

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

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

Формати стрічки: потік угод, агрегація, снапшоти

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

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

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

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

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

Тому формат стрічки ми узгоджуємо із замовником до початку роботи — від нього залежить і схема зберігання, і те, як клієнт переживає розрив з'єднання без втрати угод.

Порядок робіт: аудит потоку, схема, збирання, перевірка

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

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

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

  3. Збирання сервісу. Реалізуємо підписку, буферизацію, дедуплікацію та перепідключення з догоном пропущеного вікна: обрив зв'язку не залишає діри в стрічці. Публікацію налаштовуємо так, щоб затримка від угоди до запису залишалася передбачуваною.

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

  5. Випробування на збоях. Емулюємо сплески активності, розрив з'єднання, рестарт вузла й дивимося, чи відновлюється стрічка без втрат. За підсумками налаштовуємо сигнали, за якими черговий бачить деградацію раніше за користувача.

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

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

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

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

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

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

Кейс: піковий потік угод і час відновлення

Біржа з різкими сплесками активності: лістинги, каскадні ліквідації, новинні імпульси.

Середній потік угод у стрічці Time & Sales іде рівно, але на піку кратність до нього зростала в десятки разів — і саме в ці хвилини стрічка відставала найсильніше, коли дані потрібні посекундно.

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

Що змінили

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

Результат

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

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

Потік угод, або стрічка Time & Sales, — це журнал виконань: ціна, обсяг, час і сторона ініціатора в кожному рядку. За міткою агресора видно, чи знімав покупець лімітну заявку на продаж, чи продавець бив у бід, — знімок книги заявок такого не показує.

Агрегований стакан — про наміри, а не про факти: лімітні заявки згруповані за рівнями ціни із сумарним обсягом на кожному.

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

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

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

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

Технічні питання, які ставлять до старту робіт

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

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

Що станеться зі стрічкою при обриві зв'язку?

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

Як ви гарантуєте правильний порядок угод?

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

Наскільки складно вбудувати це в нашу платформу?

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

Що з підтримкою після виведення в продакшн?

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

Обговоримо задачу й повернемося з оцінкою та планом

Щоб повернутися з оцінкою та планом, не потрібен документ на сорок сторінок — достатньо вхідних даних по задачі.

Нам важливо зрозуміти, за якими біржами й торговими парами потрібна стрічка Time & Sales, звідки беремо потік угод і як стрічка пов'язана з ордербуком і графіком: єдиним потоком чи окремими підписками.

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

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

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

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

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

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

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