Pepelen
← Системный анализ: API, интеграции и данные

Урок

Синхронно или асинхронно: выбрать способ интеграции

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

1 / 7

Ждать ответ или не ждать

Ждать ответ или не ждать

Синхронный вызов (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. 1
    Нужен ли ответ, чтобы продолжить?

    Да — синхронный запрос. Нет — можно событие, webhook или выгрузку.

  2. 2
    Что будет, если получатель недоступен?

    Если его сбой не должен останавливать нас — брокер: сообщения подождут.

  3. 3
    Сколько получателей?

    Много — событие через брокер: отправитель о них не знает.

  4. 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}), а клиент проверяет статус позже или ждёт уведомления. Пакетная выгрузка — файл по расписанию для сверок и отчётов, где минуты не важны.