Система анализа изображений керна
Параллельное сканирование и сохранение данных
Разделил использование физического оборудования и длительную backend-обработку. После получения данных сканер доступен для следующего образца, пока предыдущий результат сохраняется независимо.
Задача
Сканер оставался занят все 4–5 минут, хотя сбор данных занимал около минуты. Следующий образец ждал завершения сохранения.
Моя ответственность
Проектирование контрактов и реализация backend-оркестрации, состояний процесса, промежуточной фиксации результата, повторной обработки и сценариев восстановления.
Результат
После фиксации результата сканер освобождается. Следующее сканирование и сохранение предыдущих данных выполняются независимо.
сканер был занят на один метр до изменения
занимает получение данных, после чего оборудование освобождается
сохранение продолжается независимо от следующего сканирования
Что изменилось для пользователя
Установка получает изображения и измерения керна от нескольких сенсоров. Раньше готовность оборудования зависела от завершения всей backend-обработки. Теперь пользователь видит отдельный прогресс сканирования и сохранения.
Разделение процессов
После получения данных backend фиксирует снимок результата и освобождает оборудование. Дальше расходятся две независимые ветки: сканирование следующего образца и сохранение предыдущего.
Распараллеливание не потребовало существенной переработки прежнего pipeline: ключевыми изменениями стали обработка событий и разделение статусов задач.
Надёжность и личный вклад
Реализовал backend-оркестрацию и участвовал в проектировании контрактов между основным backend, scanner-service и сервисом анализа. Механикой установки и частью scanner-service занимались другие разработчики.
- Снимок до освобождения. Фиксация промежуточного результата позволяет продолжить обработку без обращения к уже освобождённому устройству.
- Короткие транзакции. Состояния и результаты сохраняются отдельными операциями. Файловые, сетевые и длительные вычисления не удерживают транзакцию БД.
- Восстановление соединения. Backend сопоставляет сохранённое состояние с состоянием scanner-service и определяет безопасное продолжение.
- Автоматические проверки. Тесты покрывают транзакционные границы, повторную обработку и частичные ошибки.
Также участвовал в синхронизации данных разных сенсоров и реализовал отдельный прогресс фаз.
Результат и границы измерений
Время занятости оборудования на один метр сократилось примерно с 4–5 минут до одной минуты. Сохранение продолжительностью около 3–4 минут больше не блокирует следующий образец.
Это не означает четырёхкратного ускорения полной обработки данных. Подтверждённый эффект — более раннее освобождение сканера.
Стек: Java, Spring Boot, Spring Modulith application events, PostgreSQL, WebSocket, REST, файловое хранилище, JUnit, Mockito, integration tests.