
Паттерни проєктування програмного забезпечення для торгових систем
Event sourcing, CQRS та архітектурні паттерни, які використовують біржі
Чому патерни важливі в торгових системах
Фінансове програмне забезпечення виходить з ладу дорогими способами: дублікати ордерів, неузгоджені баланси, мовчазні часткові відмови. Патерни проєктування — не трофеї, а реакції на повторювані типи відмов: event sourcing для аудованості, CQRS для масштабування читання окремо від запису, circuit breaker для зупинки каскадних збоїв та ідемпотентність, щоб повторні спроби не подвоювали угоди.
Pub/Sub і слабке зв'язування
Механізми зіставлення ордерів, перевірки ризику та постачальники ринкових даних не повинні викликати один одного напряму, утворюючи величезний клубок залежностей. Шина publish/subscribe дозволяє матчеру публікувати виконання ордерів, тоді як подальші сервіси підписуються, не знаючи деталей реалізації джерела — але вам усе одно доведеться обрати гарантії доставки (at-least-once проти exactly-once) і термін зберігання для повторного відтворення.
Circuit breaker і bulkhead
Circuit breaker («вимикач») зупиняє звернення до нездорової залежності після повторних відмов, даючи їй час на відновлення і захищаючи ваші пули потоків. Bulkhead ізолює пули ресурсів, щоб задача аналітики, що вийшла з-під контролю, не могла позбавити ресурсів подачу ордерів.
Скінченні автомати і ідемпотентність
Ордери й перекази мають чіткі життєві цикли. Закодуйте дозволені переходи у скінченному автоматі (finite state machine), щоб недопустимі стрибки стали неможливими. Поєднайте це з ключами ідемпотентності на клієнтських запитах, щоб повторні мережеві спроби не могли створити дублікати активних ордерів.
Механізми зіставлення ордерів: пріоритет ціни й часу
Централізовані майданчики зіставляють вхідні ордери з наявною ліквідністю за пріоритетом ціни й часу. Он-чейн матчери (як багато дизайнів L1 DEX) мають бути детермінованими: кожен валідатор повторно виконує ту саму послідовність і приходить до ідентичного стану — GaiaEx успадковує цю модель від правил Hyperliquid.
Прагматичне впровадження
Не намагайтеся вслід за модою впровадити кожен патерн з першого дня. Почніть із чітких меж, структурованих логів і тестів навколо руху коштів. Додайте журнал подій, коли з'являється біль звірення даних; додайте circuit breaker, коли зовнішні API починають збоювати. Патерни вирішують реальні проблеми, а не уявні.