将 Pub/Sub 指标用作扩缩信号的最佳实践

如果您使用 Pub/Sub 指标作为信号来自动扩缩流水线,请参考以下建议。

使用多个信号自动扩缩流水线

请勿仅使用 Pub/Sub 指标来自动扩缩流水线。这可能会导致您的自动扩缩决策出现单点故障。而应使用信号组合来触发自动扩缩。客户端的 CPU 利用率水平就是一个额外信号。此信号可以指示客户端任务是否正在处理工作,以及纵向扩容能否让客户端任务处理更多工作。下面列举了一些其他 Cloud 产品中可用于流水线的信号:

  • Compute Engine 支持根据 CPU 利用率和 Monitoring 指标等信号自动扩缩。 Compute Engine 还支持多个指标和多个信号,以提高可靠性。

    如需详细了解如何使用 Monitoring 指标进行扩缩,请参阅根据 Monitoring 指标进行扩缩。如需详细了解如何根据 CPU 利用率进行扩缩,请参阅根据 CPU 利用率进行扩缩

  • Google Kubernetes Engine Pod 横向自动扩缩 (HPA) 支持根据资源使用情况(例如 CPU 和内存用量、自定义 Kubernetes 指标)以及外部指标(例如 Pub/Sub 的 Monitoring 指标)进行自动扩缩。它还支持多个信号。

    如需了解详情,请参阅 Pod 横向自动扩缩

出现指标缺口时如何应对

不要假设缺少指标意味着没有要处理的消息。例如,为了响应缺少的指标,您将处理任务缩减为零,则已经在积压中的消息或在此期间发布的消息可能不会使用。这会增加端到端延迟时间。为了最大限度地缩短延迟时间,请将最小任务计数设置为大于零,以便您始终准备好处理已发布的消息,即使最近的 Pub/Sub 指标指示空队列也是如此。

Compute Engine 自动扩缩器和 Google Kubernetes Engine HPA 均可在指标不可用时维持当前副本数。在没有任何指标可用时,这样可以提供安全保障。

您还可以实现 Pub/Sub 流控制机制,以防止任务因缺少指标而意外缩减。

使用指标的区域版本

Pub/Sub 为通常用于自动扩缩的每个指标提供两个版本。请务必使用带有 by_region 后缀的版本:

如果您希望自动扩缩能够灵活应对单区域服务中断,请不要使用这些指标的全球版本。这些指标的全球版本需要计算已知有消息的所有区域的积压量,这意味着单个区域中的不可用量会导致数据缺口。相比之下,指标的 by_region 版本是按区域计算和报告积压量。如果无法针对单个区域计算积压,则该指标仍会报告其他区域的值。