Синхронный вызов — клиент ждёт ответа. Нужен, когда результат требуется для продолжения: проверить остаток перед оформлением, получить цену, авторизовать платёж. Цена — временная связанность: если вызываемый сервис недоступен или медленный, страдает вызывающий; в цепочках доступности перемножаются.
Событие через брокер — издатель сообщает «произошло X» и продолжает. Потребители обрабатывают в своём темпе. Подходит для реакций, которые не нужны для ответа: отправить письмо, начислить бонусы, обновить поиск, аналитику. Плюсы: издатель не знает потребителей, новых можно добавлять без его изменения, отказ потребителя не мешает издателю, брокер сглаживает пики. Цена:
- согласованность в конечном счёте;
- доставка обычно «хотя бы один раз» — обработка обязана быть идемпотентной;
- сложнее отлаживать и прослеживать (нужна трассировка через брокер);
- публикация события должна быть согласована с изменением данных — outbox.
Третий вариант — команда через очередь (асинхронный запрос с ответом позже): длительные задачи, например генерация отчёта.
REST или gRPC для синхронного: REST — для внешних клиентов и браузера, понятный и кэшируемый; gRPC — между сервисами: бинарный протокол, строгая схема, потоковая передача, HTTP/2, но хуже для браузера и отладки руками.