Skip to main content

Технологии асинхронного взаимодействия

2. Обработка фото предмета для распознавания местоположения (межсервисное)

Далее, после получения от клиента запроса на распознавание (с фотографией в теле запроса), одним из ключевых внутрисерверных взаимодействий является обработки фотографии предмета на новом месте с целью распознавания местоположения предмета.

Технологией для обработки таких сообщений выбрана RabbitMQ

  • Ввиду того, что нам важно, чтобы запрос обработки фотографии гарантированно был принят обработчиком и получен результат её обаботки (асинхронно) - RabbitMQ с его подтверждением доставки из коробки и механизмами повторной обработки походит для данной задачи

  • Интенсивность запросов от одного пользователя невелика (фотографии отправляются эпизодически). В данном случае избыточная пропускная способность и сложность Apache Kafka не оправданы - нам не нужен распределенный лог событий, достаточно надежной очереди задач

  • Использование WebSocket не дает преимуществ, так как ограничением скорости ответа на запрос выступает сам алгоритм обработки, а не сетевой протокол. gRPC стримы также избыточны, так как взаимодействие носит характер 1 запрос - 1 ответ, а не потоковую передачу данных.

  • Алгоритмы распознавания являются ресурсоемкими и медленными. Использование классических очередей RabbitMQ позволяет накапливать запросы и обрабатывать их по мере освобождения мощностей серверов, не перегружая систему.

Описание контракта асинхронного взаимодействия

Т.к. фото для распознавания уже загружено в системы, то запросы к алгоритмам ML происходят на уровне микросервисов системы (на, возможно, разных языках). В данном случчае удобно использовать Protobuf как универсальный протокол взаимодействия.

asyncPhotoDetect.proto