И ещё так: как биржу криптовалют делать не нужно.
Писал я тут недавно торгового робота под биржу криптовалют Kraken. Работа у меня такая, делать софт для торговли на биржах, на заказ.
Очень скоро выяснилось, что Kraken даёт данные через Апи с гигантскими задержками. От одной до трёх секунд. И если запрашивать данные чаще – то тебя по IP отрубают от биржи.
И пришло ко мне удивительное озарение: «Человек, который писал ядро той биржи, вообще не представляет, как это ядро должно быть устроено»
И начал я смотреть другие биржи криптовалют. И обнаружил что в половине случаев они также сделаны сомнительным способом через жопу, человеками далёкими от трейдинга и понимания того как дОлжно выстраивать архитектуру ядра, чтобы потом не обрубать алготрейдеров от торгов за то что они хотят видеть стакан чаще чем раз в пять секунд (ШТО?!).
В этом посте поговорим о нескольких путях организации АРХИТЕКТУРЫ биржи. Которые приведут в итоге Вас к совершенно разному результату:
1) Архитектуру света, правды и распределённых вычеслений – которую можно будет безболезненно расширять и разносить нагрузку. Это тяжёлый и праведный путь. Который, однако, вероятно не будет для Вас более денежным чем второй.
2) Архитектуру зла, не компетенции, рукоблудства и воровства – то что выбрали большинство создателей криптобирж. Создав которую вы никогда не сможете переварить нормальное кол-во трейдеров. Но не стоит отчаиваться. Такую биржу можно создать за месяц – полтора и начать привлекать инвесторов. Выйти на ICO, сорвать кучу бабла. А когда выясниться через пару лет, что у Вас ядро не рабочее – просто выйти из проекта.
План статьи:
1) Как архитектурно устроена настоящая биржа.
2) Как архитектурно устроена средняя биржа криптоВалют
3) Заключение
И сразу с картинки начнём.
Рис. 1. Упрощённая схема ядра биржи и его окружения
Все они примерно похожи.
Ядро
Есть некая программа, написанное на С / С++, которую называют ядром биржи. У ядра есть четыре основных функции:
1) На входе проверять заявки на обеспеченность
2) Пытаться как-то свести заявки на аукционе
3) При этом генерировать ордер лог записей с аукциона
4) На выход подавать как сам ордер лог, так и другие данные, взятые непосредственно из него. Это поток обезличенных сделок. Поток снимков стаканов. И т.д.
Все четыре эти функции могут быть распараллелены как виртуально (просто многопоточное исполнение) так и физически (на разных серверах в рамках одной локальной сети).
Api
Вокруг ядра есть окружение в виде различных шлюзов для получения информации и выставления заявок. В случае ASTS и Spectra это CGate, ASTS Bridge, Twime, Fix, Fast и т.д.
Зона колокации
Рядом с ядром биржи, физически. Стоят другие сервера, в которых размещены премиальные пользователи. Это промежуточные сервера брокеров и роботы, которым нужен быстрый доступ к ядру.
Все остальные
Все остальные вынуждены торговать либо через вёб интерфейсы или через терминалы БРОКЕРОВ. Которые дают Вам потрейдить через свои промежуточные сервера в зоне колокации. Через интернет. Соединение их медленное и печальное. Но от этого не менее стабильное и приемлемое.
Всё!
Если Ядро и Api писалось нормальными ребятами, то всё должно быть прекрасно расширяемо и работать охренительно быстро почти при любых нагрузках.
Адаптировать для криптоБиржи данную картинку впринципе очень даже можно.
Такое ядро делать от полу года до года, в зависимости от упоротости команды. В составе трёх – пяти человек. За это время реально запилить хорошее многопоточное ядро и прикрутить один протокол. Fix Fast, как универсальный очень даже пойдёт. Далее, через Fix Fast промежуточный сервер подключаем личные кабинеты пользователей на своём сайте (который лицо биржи). И торгуем без всяких ограничений. Для HFT и прочей супер-скоростной робототехники выделяем свои личные шлюзы и место в колокации за доп плату. Настоящая биржа! Ура!
Думаете кто-то на Крипто-Биржах сделал так? Хренас два!
Давайте тоже сразу с картинки начнём.
Рис. 2. Упрощённая схема ядра Крипто биржи и его окружения
Визуально, на первый взгляд изменений не много. Полностью исчезает зона колокации и возможность оперативно получать с биржи данные кому бы то ни было.
Все теперь должны получать дату через единый HTTP интерфейс.
Дисклаймер: Я не говорю о том, что везде так. Но по тому что я увидел, у меня сложилось впечатление что в подавляющем большинстве случаев.
Ядро
Не смотря на то что весь функционал сохранился, программная составляющая полностью изменена.
1) Вместо C/C++ у нас здесь PHP, и бесплатная база данных, вроде MySQL.
2) Все операции внутри ядра выполняются одним потоком. Буквально. От «Проверка обеспеченности заявки» + «Аукцион» + «Генерация ордер лога» + «Обновление всех потоков данных» - всё делает один поток.
3) Как выглядит «работа» «ядра»:
a. Пришёл ордер через HTTP Api.
b. Для начала мы ожидаем чтобы все работы в «ядре» остановились.
c. Запрашиваем для данного пользователя таблицу из БД с лимитами. Если лимиты проходят идём дальше.
d. Запрашиваем таблицу из MySQL с ордерами на продажу (допустим у нас на покупку новый ордер)
e. Если текущие ордера на продажу таблице могут удовлетворить наш ордер на покупку, то начинаем каскадные изменения в базе.
f. Генерируем новые записи о том, что ордера исполнились в таблице ордеров
g. Генерим новые обезличенные сделки
h. Генерим изменение в стакане
i. И т.д. Бежим прямо этим одним потоком по таблицам MySQL и вносим в них новые записи.
4) При этом запрос данных происходит напрямую из базы данных.
Такое «ЯДРО» «БИРЖИ» способны написать 80% второкурсников любого технического Вуза нашей планеты. Мне больно это писать, но смотря на список криптобирж, видимо так они все и поступили...
API
HTTP протокол.https://professorweb.ru/my/csharp/web/level7/7_1.php
Что тут ещё сказать. Не хочу углубляться в его суть. Нормальный протокол для мало и средне нагруженных проектов просто супер. Но ОДНАКО. Если Вы подумали что главная проблема бирж криптовалют в том что там ядро детьми написано – это не так.
При использовании HTTP протокола используются один адрес сервера для запросов. А это значит, что у каждого такого АПИ есть предел по кол-ву запросов, после которого сервер перестаёт отвечать, как при ДДОС атаках. Иными словами упадёт.
И на первых этапах, когда школьники только всё замутили за пару месяцев и взяли свой первый миллиард у инвесторов лохов. Эта проблема не видна. Всё вроде бы прилично на первый взгляд.
Проблемы у данного Апи возникают только если к бирже приходит какой-то мало-мальский успех.
И не дай бог, на эту биржу придут алготрейдеры, и начнут запрашивать стаканы чаще одного раза в пару секунд – всё. Биржа лежит.
И внимание. Чтобы это происходило как можно реже, биржи начинают вводить ограничения на кол-во запросов к Апи.
Например у моего любимого кракена, это от 1 до 4 секунд между запросами. Если чаще – банят по IP адресу. https://support.kraken.com/hc/en-us/articles/206548367-What-is-the-API-call-rate-limit-
И объясняют это тем, что боятся ДДОС АТАК!!! Я тащюсь, а! Красавцы! С другой стороны не напишешь же что рукожопые и ленивые. От такой правды многим пользователям может и поплохеть.
Программисту
Я знаю, что эта тема весьма актуальна уже очень длительное время.
И вероятно данная статья будет мозолить глаза всем тем стартаперам, которые захотят делать свою крипто биржу. И захотят её делать в «плохом» варианте…
Ребят, да я не против. Делайте. Только не надо потом давать весёлые интервью о том что сделали биржу за три недели и гордитесь этим(https://coinspot.io/trading/exchange/kak-za-3-nedeli-sozdat-svoyu-birzhu-kriptovalyut-s-nulya-istoriya-birzhi-bitflip/). Делайте это как-то сука тихо чтоли. Через оффшоры. Пользуйтесь именами вымышленными. Ведь всем, включая Вас понятно, что то что Вы сделали никогда не станет биржей.
Вы извергли кучу говнокода в чужую предметную область. От чего местные прихренели и смотрят друг на друга, не зная что сказать.
С другой стороны. Понять Вас тоже можно. На самом деле это хорошая тема для Вашего обогащения. Если бы у меня не было совести я бы замутил тоже свою биржу за пару недель.
Мля. Да у меня даже есть несколько инвесторов, которые бы это спонсировали. Вот только как им потом смотреть в глаза? Как Вы это делаете?
Смелые люди. Молодцы. А аффтар просто завидует
Инвестору
Итак. Вы серьёзный дядька которому предложили инвестировать в биржу крипто валют?
Вам кажется что ещё немного и Вы сможете прикоснуться к передовым технологиям будущего?
Смело инвестируйте!
Но сначала задайте своим программистам несколько простых вопросов.
1) На каком языке будет выполнено ядро биржи? Если ответ будет не С++, и даже не C# и не Java. Если они начнут рассказывать про PHP и базу данных. - Бегите!
2) Будет ли Апи программирования для алготрейдеров. Если ответят что будет HTTP, то это тоже плохо. На этой бирже никогда не будет серьёзных оборотов. Она будет не стабильна и медленна.
Но, а вообще. Понятное дело решать Вам. Тема как ни крути хайповая и денег можно заработать и так и так. Кракен вот жив зараза. Падает несколько раз в день. Обрубает Апи. Пользователи в шоке. Но Кракен зарабатывает)
Постоянному читателю
Друзья. Я не со зла. Чес слово. Просто наболело.
Хотел написать Кракену что они рукоблуды, мазофаки, тыквоголовые не правы. А потом подумал что они и так это знают. Просто уже не в силах остановится. И это было известно ещё на этапе проектирования биржи. Вот решил написать потомкам восьмидесятых.
Не пишите говно – биржи. Большой брат всё видит.
Удачных алгоритмов!
upd:
Да. да... Есть ещё средний вариант архитектуры, когда тяжёлые данные отпарвляются при помощи WebSocket. Это весьма популярное решение для многих "бирж" криптовалют. Это вроде бы уже более-менее приемлемо, с точки зрения алготрейдинга. Хотя бы стаканы можно получать не раз в пять секунд а в момент их изменения. Но я честно не знаю как к такой архитектуре относится. Определённо это ещё не биржа, но торговать уже можно) Как-то так.
2 комментария