Making decisions before ...

09.01.26

Form of award

договорная

Product status

Finished product

Task type

Задачи ИКТ

Сфера применения

Extraction and processing of hydrocarbons raw materials

Область задачи

Geological and physical research methods

Type of product

Software/ IS

Problem description

Текущая система расчета экономических и инженерных кейсов для нефтегазовых проектов построена на сложном графе взаимозависимых асинхронных задач (DAG). Система использует механизм дедупликации расчетов через хеширование данных, что приводит к следующим проблемам: 1. Потеря расчетов при несохраненных изменениях: Пользователь изменяет параметры кейса, запускает расчет, но не сохраняет кейс. При повторном открытии расчет не находится, так как хеш данных кейса не совпадает с хешем расчета. 2. Накопление "мусорных" расчетов: В базе данных накапливаются расчеты, которые не привязаны ни к одному сохраненному кейсу, создавая проблемы с производительностью и занимая дисковое пространство. 3. Сложность поддержки графа зависимостей: Система создает до 40-80 взаимосвязанных подзадач для одного экономического расчета (Production, Sales, CAPEX, OPEX, Taxes, Engineer и т.д.). Управление ссылками между задачами, отслеживание shared sub-jobs и безопасное удаление становится крайне сложным. 4. Дублирование кода для фиксированных и вероятностных расчетов: Для предотвращения создания записей в БД при интерактивной работе с ползунками фиксированные расчеты реализованы отдельно, в обход системы jobs. Это привело к созданию двух параллельных веток кода для выполнения расчетов, что усложняет поддержку, увеличивает риск ошибок при синхронизации изменений и требует дублирования логики расчета. 5. Нестабильность хеширования: Различия в порядке ключей JSON, точности float-чисел и обработке null-значений приводят к созданию дубликатов расчетов с одинаковыми данными.

Expected effect

Внедрение оптимизированной архитектуры системы расчетов позволит: 1. Устранить потерю расчетов: Гарантировать, что каждый расчет всегда может быть найден при открытии кейса, независимо от того, был ли кейс сохранен до или после расчета. 2. Сократить нагрузку на базу данных: Уменьшить количество записей в БД на 60-80% за счет: ◦ Кэширования промежуточных результатов в Redis ◦ In-memory расчетов для интерактивного режима (без записи в БД) ◦ Автоматической очистки устаревших расчетов 3. Упростить архитектуру: Переход от сложного графа зависимостей к монолитному расчету с кэшированием промежуточных результатов, что снизит сложность кода на 70% и упростит отладку. 4. Улучшить пользовательский опыт: ◦ Мгновенная реакция на изменение параметров в интерактивном режиме (slider) ◦ Прозрачный прогресс выполнения длительных Monte Carlo симуляций ◦ Единообразное поведение для всех типов расчетов 5. Повысить производительность: ◦ Переиспользование результатов расчетов через Redis cache ◦ Параллельное выполнение независимых блоков расчета ◦ Оптимизация передачи данных между этапами расчета 6. Обеспечить масштабируемость: Система сможет обрабатывать больше одновременных расчетов без увеличения нагрузки на базу данных, используя горизонтальное масштабирование через Laravel Horizon и Redis.

Full name of responsible person

Артем Никитенко

Purpose and description of task (project)

Разработать и внедрить оптимизированную архитектуру системы асинхронных расчетов для платформы OPTIM, обеспечивающую стабильность, прозрачность и производительность при работе с экономическими, инженерными и геологическими моделями нефтегазовых проектов.

Note