Changes between Initial Version and Version 1 of Collector


Ignore:
Timestamp:
May 25, 2019, 8:19:00 PM (5 years ago)
Author:
andy
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Collector

    v1 v1  
     1= Collector
     2
     3
     4Полная система состоит из 3 компонентов, соединённых по сети:
     5
     6коллектор <-> бэкенд <-> клиент (браузер)
     7
     8== В идеале
     9
     10В идеале коллектор это демон, который
     11- сам опрашивает биржи через их кривой API (JSON REST или Websocket)
     12- обрабатывает все ошибки API
     13- приводит данные от разных бирж к единому виду
     14- активно (см. ниже) отдает эти унифицированные данные в бэкенд по выпрямленному стандартному протоколу Financial Information Exchange (FIX) 4.x
     15
     16== Сейчас в продакшене (pre-2019 код)
     17
     18- между бэкендом и сервером наш кривой протокол
     19- коллектор постоянно падает и бывает что тянет за собой бэкенд
     20- код коммуникаций кривой и хрупкий
     21- коллектор частично пассивный (бэкенд запрашивает данные) частично активный (коллектор пушит данные в бэкенд)
     22
     23== Предлагаемое краткосрочное решение
     24
     25- между бэкендом и коллектором очередь сообщений, например Gearman (проще чем FIX, легко найти библиотеки клиентов под любой язык). Но можно MQTT или что иное.
     26- формат сообщений не унифицированный, такой, в каком отдает API биржи
     27- активность-пассивность тоже максимально простая:
     28  - если API REST polling - то работаем через request-response гирмана, бэкенд делает SUBMIT_JOB, а коллектор регистрируется как воркер
     29  - если API websocket streaming (или другой стриминг) - то используем background jobs (sic!) гирмана. Коллектор делает SUBMIT_JOB_BG, а бэкенд регистрируется воркером.
     30
     31Примеры API:
     32
     33- простой REST https://www.bitstamp.net/api/v2/order_book/BTCUSD/
     34- websocket API и FIX от них же: https://www.bitstamp.net/api/
     35- купуй украйинське: https://docs.google.com/document/d/1ocYA0yMy_RXd561sfG3qEPZ80kyll36HUxvCRe5GbhE/edit
     36
     37Простейший вариант пассивного коллектора:
     38
     39- коллектор регистрируется воркером для джоба с названием bitstampUSD
     40- когда приходит джоб, выполняется HTTP GET https://www.bitstamp.net/api/v2/order_book/BTCUSD/ и гирман-воркер возвращает его тело
     41
     42
     43Обработка ошибок (адвансед):
     44
     45- таймаут
     46- non-200 HTTP error code
     47- неправильный content-type
     48- битый json
     49- json не в том формате
     50
     51Сигнализация ответом на джоб в формате `{err: "код_ошибки"}`