Webhook Delivery Service  ·  View 02 of 20  ·  Context and scope

High-Level Architecture

Seven stages from a committed domain event to an accounted-for delivery.

Editable source SVG draw.io All views
Emit Product Service outbox publisher Accept Intake API ack ≤ 15 ms p99 Event Store DynamoDB + S3, 30 d Fan out Subscription Matcher type + entitlement Delivery Planner idempotency key Isolate Per-Endpoint Queues SQS FIFO, 1 group/endpoint Dead-Letter Store redrive, 30 d Deliver Delivery Workers Fargate Signer HMAC under KMS Egress NAT published /28 Receive Customer Endpoint HTTPS, allowlisted Account Attempt Log 90 d, per endpoint Console & API replay, health exhausted replay Webhook Delivery Service — High-Level Architecture Application we own Interface / broker Data store Queue / topic Security / platform External / third party failure / alternate event / async Nothing after the intake acknowledgement is on the product's write path. v 1.0 · owner Integration Platform Architecture · date 2026-09

The shape

  • Accept and acknowledge on durability, before anything is known about who is subscribed. Intake latency is therefore independent of subscription count (ADR-01).
  • Fan out afterwards, on the platform's own time, turning one event into N independent units of work.
  • Isolate each unit in its endpoint's own queue — the decision the rest of the set exists to honour (ADR-02).
  • Deliver through a dedicated egress path with a published address range, so a customer can allowlist it (ADR-11).

Why the two loop-backs

  • Exhausted deliveries go to a dead-letter store rather than disappearing, and the owner is told at the first one, not the hundredth (ADR-09).
  • Replay re-enqueues onto the same per-endpoint queue with the same idempotency key, so the consumer's deduplication still protects them (ADR-10).

Risks

  • The fan-out stage is the one place where a single event can become 250 units of work; a tenant fan-out budget bounds it, and the budget is a guess until there is telemetry.
  • Payload storage at 30 days' retention, median 4 KB and 25,000 events/s is the dominant storage line. If p99 payload size is materially above 64 KB, the retention window is the first thing that has to give.