Автоматизация на вебхуках

Один хук — много сервисов: как не утопить интеграции в хаосе fan-out

Один хук — много сервисов: как не утопить интеграции в хаосе fan-out

Fan-out выглядит просто: пришёл один webhook, дальше разослали событие в CRM, биллинг, аналитику и нотификации. На практике это место, где умирают SLA: один получатель тормозит, другой отдаёт 500, третий принимает мусор и молча ломает пайплайн.

Базовая схема такая: ingress-хендлер только валидирует подпись, режет дубликаты по event_id и кладёт полезную нагрузку в очередь. Дальше отдельный dispatcher читает событие и публикует в набор downstream-очередей или вызывает сервисы асинхронно. Не делайте fan-out синхронным в HTTP-обработчике — это прямой путь к таймаутам и каскадным ретраям.

Для каждого получателя нужен свой контракт. Один и тот же payload редко подходит всем: где-то нужен нормализованный JSON, где-то — только часть метаданных. Прокидываем стейт через метаданные, добавляем correlation_id и версию схемы. Если сервис не принимает событие, он должен вернуть отказ, а не «успешно проглотить и забыть».

{
"event_id": "evt_123",
"type": "order.paid",
"correlation_id": "c-8891",
"targets": ["crm", "billing", "slack"]
}

Идемпотентность — это не роскошь, а база. Храните delivery ledger: кто получил, кто в ретрае, кто dead-lettered. Ретрай-политика решает всё: короткие повторные попытки для 5xx, отдельный путь для 4xx, лимит попыток и алерт на деградацию. Иначе вы не распределяете нагрузку, а размножаете инцидент.

Если нужен fan-out, начинайте не с кода, а с таблицы отказов. Где хранится состояние, как гасим дубликаты, кто отвечает за DLQ, и что будет, если один получатель лежит сутки. Смотрим в тело запроса и проектируем так, будто внешний API уже упал.
Этот пост опубликован в Telegram-канале Автоматизация на вебхуках. Подписаться можно по ссылке: @webhook_automation_hub_arb.
tech

Свежие посты в категории «Tech Infrastructure»

Все каналы категории →

start

Готовы запустить рекламу через сеть public.tg?

Новый оффер, продукт, GEO, кейс, событие или партнёрский запуск — соберём маршрут под задачу и отдадим медиаплан.

Telegram для медиаплана: @AFFtop_connect. Быстрый тест: $20 за канал, $1000 за пакет по сети.