Технологии асинхронного взаимодействия
2. Обработка фото предмета для распознавания местоположения (межсервисное)
Далее, после получения от клиента запроса на распознавание (с фотографией в теле запроса), одним из ключевых внутрисерверных взаимодействий является обработки фотографии предмета на новом месте с целью распознавания местоположения предмета.
Технологией для обработки таких сообщений выбрана RabbitMQ
-
Ввиду того, что нам важно, чтобы запрос обработки фотографии гарантированно был принят обработчиком и получен результат её обаботки (асинхронно) - RabbitMQ с его подтверждением доставки из коробки и механизмами повторной обработки походит для данной задачи
-
Интенсивность запросов от одного пользователя невелика (фотографии отправляются эпизодически). В данном случае избыточная пропускная способность и сложность Apache Kafka не оправданы - нам не нужен распределенный лог событий, достаточно надежной очереди задач
-
Использование WebSocket не дает преимуществ, так как ограничением скорости ответа на запрос выступает сам алгоритм обработки, а не сетевой протокол. gRPC стримы также избыточны, так как взаимодействие носит характер 1 запрос - 1 ответ, а не потоковую передачу данных.
-
Алгоритмы распознавания являются ресурсоемкими и медленными. Использование классических очередей RabbitMQ позволяет накапливать запросы и обрабатывать их по мере освобождения мощностей серверов, не перегружая систему.
Описание контракта асинхронного взаимодействия
Т.к. фото для распознавания уже загружено в системы, то запросы к алгоритмам ML происходят на уровне микросервисов системы (на, возможно, разных языках). В данном случчае удобно использовать Protobuf как универсальный протокол взаимодействия.