Задать вопрос
  • Как работает синхронный вызов в микросервисах?

    johnymkp
    @johnymkp Автор вопроса
    В общем, собрав всю информацию из ответов здесь + от полученных на стеке, я пришел к такому выводу:

    Речь идет о блокировании микросервиса с "логической" точки зрения. В книге фраза из вопроса, как оказалось, находится в контексте модели взаимодействия "запрос-ответ". Эта модель подразумевает, что когда сервис А делает запрос к сервису В, то А требуется ответ, чтобы продолжить выполнять бизнес-задачу.

    Например, бизнес-задача выглядит так: "Зарезервировать нужный товар на складе, и только потом принять оплату". Тогда сервис А отправляет сервису В запрос "зарезервируй такой-то товар на складе" и пока не получит ответ "товар зарезервирован" - не сможет принять оплату. Т.е. здесь запрос на резервирование вызывает "логическую" блокировку сервиса, которая с "технической" блокировкой связана очень косвенно.

    Технически этот бизнес-сценарий можно выполнить двумя способами - блокирующим и неблокирующим:
    • Блокирующий подразумевает, что поток сервиса А отправляет запрос к В и ЖДЕТ ответа, т.е. не идет дальше, пока ответ не получен. При этом сервис А в целом продолжает работу - он сам может принимать новые запросы, потому что они обрабатываются разными потоками. Здесь важно отметить, что в зависимости от технической реализации, вовсе не обязательно, что поток блокируется после отправки запроса и до получения ответа. Асинхронная отправка может работать так, что отправляет запрос один поток, а ответ обрабатывает другой. Поэтому блокирующий подход не обязательно означает, что в случае долгих ответов пул потоков исчерпается и все встанет. Но тем не менее, если в технические подробности не углублятся, со стороны все выглядит так, будто поток заблокирован. Поэтому этот способ и называется блокирующим.
    • Неблокирующий подразумевает, что поток сервиса А отправляет запрос к В и НЕ ЖДЕТ ответа. Обработка ответа реализуется другим способом (но это уже другая история, к вопросу не относящаяся). Т.е. здесь концептуально другая схема работы - поток, делающий запрос, никак не занимается обработкой ответа, а значит ему нет нужды ждать ответ. Поэтому этот способ называется неблокирующим.


    Возможно, получилось с привкусом канцелярщины, но постарался описать так, как понятно самому.
    Ответ написан
    Комментировать