GaiaEx AcademyGaiaEx Academy
Паттерни проєктування програмного забезпечення для торгових систем
РозробникПрограмування12 min read

Паттерни проєктування програмного забезпечення для торгових систем

Event sourcing, CQRS та архітектурні паттерни, які використовують біржі

Поділитися

Чому патерни важливі в торгових системах

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

CQRS + журнал подій (концептуально) Сторона запису команди валідація додавання подій Журнал подій незмінний впорядкований Сторона читання проєкції кеші / SQL API-запити Читачі можуть трохи відставати; джерелом істини завжди лишається журнал на боці запису.
Команди породжують факти; споживачі будують матеріалізовані представлення для швидких запитів.

Pub/Sub і слабке зв'язування

Механізми зіставлення ордерів, перевірки ризику та постачальники ринкових даних не повинні викликати один одного напряму, утворюючи величезний клубок залежностей. Шина publish/subscribe дозволяє матчеру публікувати виконання ордерів, тоді як подальші сервіси підписуються, не знаючи деталей реалізації джерела — але вам усе одно доведеться обрати гарантії доставки (at-least-once проти exactly-once) і термін зберігання для повторного відтворення.

Circuit breaker і bulkhead

Circuit breaker («вимикач») зупиняє звернення до нездорової залежності після повторних відмов, даючи їй час на відновлення і захищаючи ваші пули потоків. Bulkhead ізолює пули ресурсів, щоб задача аналітики, що вийшла з-під контролю, не могла позбавити ресурсів подачу ордерів.

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

Скінченні автомати і ідемпотентність

Ордери й перекази мають чіткі життєві цикли. Закодуйте дозволені переходи у скінченному автоматі (finite state machine), щоб недопустимі стрибки стали неможливими. Поєднайте це з ключами ідемпотентності на клієнтських запитах, щоб повторні мережеві спроби не могли створити дублікати активних ордерів.

Механізми зіставлення ордерів: пріоритет ціни й часу

Централізовані майданчики зіставляють вхідні ордери з наявною ліквідністю за пріоритетом ціни й часу. Он-чейн матчери (як багато дизайнів L1 DEX) мають бути детермінованими: кожен валідатор повторно виконує ту саму послідовність і приходить до ідентичного стану — GaiaEx успадковує цю модель від правил Hyperliquid.

Прагматичне впровадження

Не намагайтеся вслід за модою впровадити кожен патерн з першого дня. Почніть із чітких меж, структурованих логів і тестів навколо руху коштів. Додайте журнал подій, коли з'являється біль звірення даних; додайте circuit breaker, коли зовнішні API починають збоювати. Патерни вирішують реальні проблеми, а не уявні.