Code Review: что не так с кодом обработчика updateRoute? (gRPC-вызов внутри транзакции, Kafka внутри транзакции, дублирование валидации, отсутствие обработки ошибок)

В коде обработчика updateRoute есть несколько серьёзных проблем:

Короткий ответ

Что ответить на собеседовании

В коде обработчика updateRoute есть несколько серьёзных проблем:

Подробный разбор

Ответ с пояснениями

В коде обработчика updateRoute есть несколько серьёзных проблем:

  1. gRPC-вызов внутри транзакции — это опасно, так как gRPC вызов может быть долгим и неатомарным. Транзакция должна быть короткой и содержать только операции с базой данных. Вызовы внешних сервисов лучше делать после коммита транзакции.
  2. Kafka внутри транзакции — если отправка сообщений в Kafka происходит внутри транзакции, то при откате транзакции сообщение уже может быть отправлено, что приведёт к рассинхронизации данных. Нужно использовать паттерны типа outbox или транзакционную интеграцию.
  3. Дублирование валидации — если валидация данных повторяется в нескольких местах, это усложняет поддержку и может привести к ошибкам. Валидацию стоит централизовать.
  4. Отсутствие обработки ошибок — ошибки при вызовах gRPC, Kafka или базе данных должны корректно обрабатываться, чтобы избежать падений и обеспечить корректное поведение системы.

Рекомендуется:

  • Вынести внешние вызовы (gRPC, Kafka) за пределы транзакции.
  • Использовать паттерны для гарантированной доставки сообщений.
  • Централизовать валидацию.
  • Добавить обработку ошибок с логированием и откатом при необходимости.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку