В открытом движке ордеров MatchEngine разработчики устранили четыре критические ошибки, способные привести к сбоям в условиях реальной нагрузки. Эти баги не были выявлены на этапе код-ревью и могли серьезно повлиять на работу системы.
Проблемы с уникальностью идентификаторов
Первая ошибка касалась дублирования идентификаторов ордеров. Система не проводила проверку на уникальность, что позволяло двум ордерам с одинаковым ID существовать одновременно в книге ордеров. Например, вызов методов SubmitOrder с одинаковым идентификатором приводил к недоступности одного из ордеров при его отмене. Это создавало риск некорректной работы систем, использующих ID для отслеживания.
Для решения проблемы был добавлен индекс ордеров, который отслеживает уникальность каждого идентификатора. Теперь система проверяет наличие ID перед тем, как добавить новый ордер.
Улучшение производительности
Кроме этого, движок был обновлён для обеспечения быстрого доступа к ордерам. С использованием отображения map для хранения ордеров, функция удаления теперь работает за O(1) вместо прежнего O(n) при линейном поиске. Это значительно ускоряет работу движка, особенно под высоким нагрузками.
Тестирование новых изменений показало, что система теперь корректно обрабатывает дублирующиеся ID и моментально реагирует на их попытки отправки. Одним из тестов было успешное добавление и повторное использование идентификатора после его заполнения или отмены.
Практическое значение для разработчиков
Для разработчиков на российском рынке важно понять, что недочеты в таких критических системах могут привести к значительным потерям для бизнеса. Потребность в надежных и проверенных инструментах управления ордерами возрастает, особенно в условиях сложной торговли. Это заметно увеличивает важность качественного тестирования в этапах разработки программного обеспечения.
В ближайшие месяцы разработчики MatchEngine планируют продолжить работу над улучшением функциональности и стабильности своего движка, а также взаимодействием с сообществом для выявления новых возможных уязвимостей.