尽管错误率很高,但 Google Cloud Pubsub 订阅到云功能的消息推送率仍然很高

问题描述 投票:0回答:1

为什么我的 Google Cloud PubSub 订阅以如此高的速率将消息推送到云函数,尽管错误率很高?

这是订阅配置:

% gcloud pubsub subscriptions describe [REDACTED_SUBSCRIPTION_NAME]
ackDeadlineSeconds: 300
deadLetterPolicy:
  deadLetterTopic: projects/[REDACTED]/topics/[REDACTED]
  maxDeliveryAttempts: 100
expirationPolicy: {}
filter: attributes.env = "production"
messageRetentionDuration: 604800s
name: projects/[REDACTED]/subscriptions/[REDACTED_SUBSCRIPTION_NAME]
pushConfig:
  pushEndpoint: https://[REDACTED].cloudfunctions.net/[REDACTED_FUNCTION_NAME]
  ...
retryPolicy:
  maximumBackoff: 600s
  minimumBackoff: 30s
state: ACTIVE
topic: projects/[REDACTED]/topics/[REDACTED_TOPIC_NAME]

以及云功能配置:

% gcloud functions describe [FUNCTION_NAME]
automaticUpdatePolicy: {}
availableMemoryMb: 1024
buildId: 623c4c9a-a8c5-45eb-b02d-b0db6305f2ea
buildName: projects/[PROJECT_ID]/locations/us-central1/builds/[BUILD_ID]
dockerRegistry: CONTAINER_REGISTRY
entryPoint: run
environmentVariables:
  ...
httpsTrigger:
  securityLevel: SECURE_OPTIONAL
  url: https://us-central1-[PROJECT].cloudfunctions.net/[FUNCTION_NAME]
ingressSettings: ALLOW_ALL
labels:
  deployment-tool: cli-gcloud
maxInstances: 5
name: projects/[PROJECT]/locations/us-central1/functions/[FUNCTION_NAME]
runtime: nodejs18
serviceAccountEmail: [PROJECT]@appspot.gserviceaccount.com
status: ACTIVE
timeout: 300s
versionId: '59'
vpcConnector: projects/[PROJECT]/locations/us-central1/connectors/mcfx-identity
vpcConnectorEgressSettings: PRIVATE_RANGES_ONLY

在特定的分析期间,我观察到:

  • 来自云功能的 270 万个 429 错误(表示请求过多)。
  • 云功能成功处理了 195k 个请求。
  • 订阅继续每秒发送超过 100 条消息,尽管超过 90% 的传送尝试都失败了。
  • 云功能的吞吐量最大约为每秒 11 条消息。

这是一个摘要仪表板

本文档 https://cloud.google.com/pubsub/docs/push#push_backoff 表示 pubsub 在这种情况下应该退避。

本文档https://cloud.google.com/pubsub/docs/push#delivery_rate说“推送窗口在任何成功交付时都会增加,在任何失败时都会减少”,但推送窗口似乎无法减少在这种情况下。

关于为什么尽管失败率很高但推送率仍然很高,以及如何缓解这个问题,有什么见解吗?

google-cloud-platform google-cloud-functions google-cloud-pubsub
1个回答
1
投票

了解 @guillaume blaquiere 关于配置错误的评论,我也相信您的 Cloud Function 和 Pub/Sub 配置之间就是这种情况。

高推送率可能与您的 Pub/Sub 的 重试设置 相关联,尤其是在您的云功能中未正确处理消息的情况下。检查您如何处理消息失败,考虑增加云功能的最大实例值和发布/订阅的

minimumBackoff
,因为它可以增加消息突然爆发期间的重试尝试,从而有助于提高推送率(如果它们也设置了)低。

注意:此功能独立于Push backoff。您可以结合使用这两个功能来更好地控制消息流。在这种情况下,总延迟是推送退避值和重试策略值的最大组合值。如果您注意到消息传递问题,请仔细检查您的重试策略与推送退避的交互方式。

© www.soinside.com 2019 - 2024. All rights reserved.