Сначала надёжно зарегистрируйте входящее задание, затем валидируйте и обрабатывайте его с явными статусами success/failed. Некорректный ввод должен давать запись об ошибке, а не исчезать вместе с транзакцией обработки.
Обеспечение устойчивой обработки и записи при получении некорректных данных
Сначала надёжно зарегистрируйте входящее задание, затем валидируйте и обрабатывайте его с явными статусами success/failed. Некорректный ввод должен давать запись об ошибке, а не исчезать вместе с транзакцией обработки.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Сервис иногда получает вместо ожидаемого текста данные, которые нельзя корректно обработать. В результате запись о завершении обработки в базе данных не создаётся. Необходимо предложить способ решения этой проблемы, который гарантирует надёжность процесса обработки и гарантирует, что результат будет зафиксирован в базе независимо от характера входных данных.
Ответ
Сначала надёжно зарегистрируйте входящее задание, затем валидируйте и обрабатывайте его с явными статусами success/failed. Некорректный ввод должен давать запись об ошибке, а не исчезать вместе с транзакцией обработки.
Используйте устойчивый идентификатор задания и durable inbox/очередь. После приёма сохраните pending, worker проверяет тип/кодировку/схему и фиксирует результат отдельной корректной транзакцией. Ошибки данных не нужно бесконечно повторять; технические сбои требуют ограниченных повторов и recovery.
Один finally не гарантирует запись: процесс может аварийно завершиться, а БД — быть недоступной. Для восстановления нужны повторяемая обработка и поиск зависших pending. Без доступного долговременного хранилища абсолютная гарантия невозможна. Не сохраняйте сырой чувствительный ввод в диагностические логи.