Выбрать способ интеграции — синхронный запрос, событие через брокер, webhook, опрос или пакетную выгрузку — по тому, нужен ли ответ сразу, что будет при недоступности получателя и сколько у данных получателей.
Ждать ответ или не ждать
Ждать ответ или не ждать
Синхронный вызов (REST, gRPC): вызывающий отправляет запрос и ждёт ответ. Плюсы — результат сразу и простая схема. Минус — связанность по времени: если получатель лежит или тормозит, тормозим и мы. Доступности цепочки перемножаются: 5 синхронных сервисов по 99,9 % дают 0,999⁵ ≈ 0,995, то есть около 99,5 %.
Асинхронный обмен (сообщение через брокер): отправили и пошли дальше. Что это даёт:
• развязку по времени и доступности — получатель лежит, а сообщения ждут его в очереди;
• сглаживание пиков — очередь принимает всплеск, получатель разбирает его в своём темпе;
• одно сообщение для многих получателей.
Цена: результат не сразу (согласованность «в итоге»), отладка сложнее, возможны дубли и нарушение порядка — о них уроки 4.2 и 4.3. Асинхронно — не значит быстрее: путь до результата часто длиннее, выигрыш — в устойчивости.
Webhook — внешняя система сама вызывает наш адрес, когда что-то произошло. Опрос (polling) — мы спрашиваем каждые N секунд: проще, но тратит запросы и даёт задержку. Webhook может прийти дважды или потеряться, поэтому идемпотентная обработка и редкая сверка опросом нужны всё равно.
Долгая операция по HTTP: сервер отвечает 202 Accepted и адресом статуса в заголовке Location (например, /v1/refunds/{refundId}), а клиент проверяет статус позже или ждёт уведомления. Пакетная выгрузка — файл по расписанию для сверок и отчётов, где минуты не важны.
Способы интеграции
gRPC, GraphQL и SOAP — тоже синхронные способы со своими форматами; в курсе их не разбираем.
| Способ | Когда | Пример «Ромашки» |
|---|---|---|
| Синхронный запрос | ответ нужен сразу | создание заказа → номер |
| Событие через брокер | много получателей, можно позже | OrderPaid → уведомления, аналитика, курьеры |
| Webhook | внешняя система сообщает о событии | провайдер → результат оплаты |
| Опрос | у системы нет уведомлений | статус выгрузки у старой учётной системы магазина |
| Пакетная выгрузка | сверки и отчёты | реестр продаж магазину раз в сутки |
Четыре вопроса для выбора
- 1Нужен ли ответ, чтобы продолжить?
Да — синхронный запрос. Нет — можно событие, webhook или выгрузку.
- 2Что будет, если получатель недоступен?
Если его сбой не должен останавливать нас — брокер: сообщения подождут.
- 3Сколько получателей?
Много — событие через брокер: отправитель о них не знает.
- 4Какая задержка допустима?
Секунды — событие или webhook; сутки — пакетная выгрузка.
Конспект урока
Ждать ответ или не ждать
Синхронный вызов (REST, gRPC): вызывающий отправляет запрос и ждёт ответ. Плюсы — результат сразу и простая схема. Минус — связанность по времени: если получатель лежит или тормозит, тормозим и мы. Доступности цепочки перемножаются: 5 синхронных сервисов по 99,9 % дают 0,999⁵ ≈ 0,995, то есть около 99,5 %.
Асинхронный обмен (сообщение через брокер): отправили и пошли дальше. Что это даёт:
• развязку по времени и доступности — получатель лежит, а сообщения ждут его в очереди;
• сглаживание пиков — очередь принимает всплеск, получатель разбирает его в своём темпе;
• одно сообщение для многих получателей.
Цена: результат не сразу (согласованность «в итоге»), отладка сложнее, возможны дубли и нарушение порядка — о них уроки 4.2 и 4.3. Асинхронно — не значит быстрее: путь до результата часто длиннее, выигрыш — в устойчивости.
Webhook — внешняя система сама вызывает наш адрес, когда что-то произошло. Опрос (polling) — мы спрашиваем каждые N секунд: проще, но тратит запросы и даёт задержку. Webhook может прийти дважды или потеряться, поэтому идемпотентная обработка и редкая сверка опросом нужны всё равно.
Долгая операция по HTTP: сервер отвечает 202 Accepted и адресом статуса в заголовке Location (например, /v1/refunds/{refundId}), а клиент проверяет статус позже или ждёт уведомления. Пакетная выгрузка — файл по расписанию для сверок и отчётов, где минуты не важны.