UStackUStack
Outpost icon

Outpost

Outpost 开源基础设施,可靠将应用事件投递到 Webhook 和队列等目的地;支持托管服务或 Go/Docker 自托管部署。

Outpost

Outpost 是什么?

Outpost 是开源基础设施,用于将事件可靠投递到用户偏好的目的地,例如出站 Webhook 和多种事件/队列系统。它旨在帮助应用可靠发送事件通知,相比自行构建和维护 Webhook 投递逻辑,能显著降低运维复杂性。

Outpost 可作为 Hookdeck 的托管服务使用,或从开源代码自托管。其核心功能是出站事件投递:您发布事件,Outpost 使用主题/订阅和投递保证,将其路由到配置的目的地。

主要特性

  • 至少一次投递保证:消息至少投递一次,旨在防止事件丢失。
  • 基于主题的订阅:发布/订阅模式,便于将事件类型映射到目的地。
  • 自动和手动重试:配置自动重试,或通过 API 或用户门户触发重试。
  • 多种投递目的地:支持 Webhook 投递以及 AWS SQS、RabbitMQ、Pub/Sub、EventBridge、Kafka 等事件目的地(详见页面列表)。
  • 多租户支持:在单个 Outpost 部署上运行多个租户。
  • 开发者门户和目的地控制:查看指标、管理、调试和观察事件目的地。
  • OpenTelemetry 支持:包含 OpenTelemetry 追踪、指标和日志。
  • 幂等性和投递头部:提供幂等性头部、时间戳和签名(包括签名轮换),并支持选择退出机制。
  • 灵活部署(托管或自托管):以 Go 二进制文件或 Docker 镜像形式提供自托管;托管和自托管使用相同的 Outpost。

如何使用 Outpost

  1. 选择部署模式:从托管服务开始(“Get started”),或使用提供的分发包(Go 二进制文件或 Docker 镜像)运行开源自托管版本。
  2. 定义目的地:配置一个或多个投递目标(例如 Webhook 端点,或队列/总线目的地)。
  3. 设置主题和订阅:创建事件主题(事件类型)与接收目的地的映射。
  4. 发布事件:使用 Outpost API 发送事件,或发布到 Outpost 可读取的队列。
  5. 运维和故障排除:使用用户门户观察投递指标、管理目的地,并在需要时触发重试。

使用场景

  • 应用事件可靠出站 Webhook 投递:将应用事件(例如 user.createdorder.created)路由到 Webhook 目的地,支持至少一次投递和重试。
  • 基于队列的发布解耦生产者和投递:将事件发布到队列,配置 Outpost 从中读取,然后投递到下游系统。
  • 向多个事件目的地扇出:使用主题/订阅配置,将相同或相关事件主题发送到不同目的地(例如 Webhook 加消息队列/总线)。
  • 多租户事件投递:从单个 Outpost 部署服务多个租户,按租户隔离投递配置。
  • 事件管道的调试和运维可见性:使用门户跟踪目的地状态和投递结果,失败时手动重试。

常见问题

  • 我可以自己运行 Outpost,还是必须使用托管服务? Outpost 同时提供托管服务和开源软件自托管选项。

  • Outpost 如何处理重试? 支持自动重试,并允许通过 API 或用户门户手动重试。

  • Outpost 提供什么投递保证? 页面说明消息至少投递一次。

  • Outpost 是否提供可观测性功能? 是的。包含 OpenTelemetry 支持(追踪、指标和日志),并提供开发者门户用于指标和目的地观察。

  • Outpost 如何为 Webhook 投递签名和保障安全? 页面提到时间戳和签名头部(支持签名轮换)、幂等性头部,以及选择退出机制。

替代方案

  • 自行构建 Webhook 分发器:构建自定义 Webhook 投递、重试和安全机制。这将运维和可靠性负担转移到您的应用团队。
  • 无出站投递层的通用事件/队列系统:使用存储/传输事件的平台(队列或总线),并实现自己的消费者逻辑来推送到 Webhook/目的地。
  • 其他托管 Webhook/事件投递服务:使用托管服务将事件路由到 Webhook 端点;根据重试处理、投递保证和多目的地投递进行比较。
  • 自托管事件路由组件:寻找专注于从生产者到目的地的开源或自托管事件路由组件,特别是那些具有订阅/主题语义和运维工具的。
Outpost | UStack