Оценка 200 тысяч опционов за 10 миллисекунд
Финансовые системы требуют пересчитывать портфели в режиме реального времени. Когда у вас 200 тысяч опционов и миллисекунды на ответ — стандартные подходы на .NET не работают. Типичная объектная модель убивает производительность тремя способами. Каждый опцион становится отдельным объектом в куче — это миллионы байтов, паузы на сборку мусора и промахи кэша процессора. Виртуальные методы и разрозненное расположение данных в памяти делают невозможной эффективную работу. Поэлементные вычисления в цикле — главная ошибка. Процессор не может векторизовать код, потому что не видит картину целиком. SIMD-инструкции простаивают, хотя могли бы обрабатывать данные параллельно. Аллокации в горячем пути создают давление на сборщик мусора. Каждый вызов с выделением массива для промежуточных результатов накапливается и вызывает непредсказуемые паузы в 24/7 сервисе. Решение — отказаться от объектов в пользу структур данных, ориентированных на память. Вместо массива объектов использовать несколько параллельных массивов примитивов: один для страйков, другой для волатильности, третий для дат экспирации. Процессор получает возможность эффективно использовать кэш и векторные инструкции. Пул памяти вместо аллокаций — выделяем буферы один раз при запуске, переиспользуем. Никакого давления на сборщик мусора в критическом пути расчётов. 🎯 Результат: переоценка 200 тысяч опционов укладывается в 10 миллисекунд. Без пауз на сборку мусора, с предсказуемой латентностью. Сталкивались с задачами, где стандартная объектная модель становилась узким местом? Как решали — оптимизацией или переходом на другой подход к хранению данных?
· 29.05
Нынешнее решение это ClickHouse, если говорить о портфеле, считаемом на витринах
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён