【问题标题】:Using Pub/Sub for Google Cloud Storage with GKE通过 GKE 将 Pub/Sub 用于 Google Cloud Storage
【发布时间】:2021-07-20 07:16:03
【问题描述】:

我有一个 GKE 应用程序,目前由 Google Cloud Storage 存储桶中的通知驱动。我想将此 node.js 应用程序转换为由 PubSub 通知触发。我大部分时间都在浏览 Google 文档页面,但没有明确的答案。我看到一些 python 代码可以做到这一点,但它没有多大帮助。

当前编写的代码正在运行 - 我的 GCS 存储桶中的图像着陆会触发我的 GKE pod 的通知,并且我的函数运行。试图了解我在函数中需要做什么来订阅 Pub/Sub 主题以触发处理。欢迎提出任何建议。

【问题讨论】:

标签: node.js google-cloud-storage google-kubernetes-engine


【解决方案1】:

首先谢谢,我不知道 GCS 的通知能力!!

原理很接近,但您使用 PubSub 作为中介。您无需使用 watchbucket 命令直接通知您的应用程序,而是通知 PubSub topic

从那里,通知到达 PubSub 主题,现在您必须创建订阅。有两种可能:

  • 推送:您指定一个使用 POST 请求调用的 HTTP URL,并且正文包含通知消息。
  • Pull:您的应用程序需要创建与 PubSub 订阅的连接并读取消息。

利弊

  • 推送需要从 PubSub 推送订阅到您的应用程序的身份验证。如果您使用内部 IP,则不能使用此解决方案(URL 端点必须是可公开访问的)。主要优点是模型的可扩展性和简单性。
  • Pull 需要对订阅者(这里是您的应用程序)进行身份验证,因此,即使您的应用程序是私有部署的,您也可以使用 Pull 订阅。 Pull 建议用于高吞吐量,但在处理、并发/多线程编程方面需要更高的技能。您不会根据请求率(与 Push 模型一样)进行扩展,而是根据您阅读的消息数量进行扩展。您需要手动确认消息。

数据模型是mentioned here。您的发布订阅消息是like that

{
  "data": string,
  "attributes": {
    string: string,
    ...
  },
  "messageId": string,
  "publishTime": string,
  "orderingKey": string
}

文档中描述了属性,并且有效负载(base64 编码,小心)具有this format。与您今天得到的非常相似。

那么,为什么是属性?因为您可以在 PubSub 上使用 filter feature 来创建仅包含消息子集的订阅。


如果您在 GKE 集群中使用 Cloud Run for Anthos,您也可以换档并使用 Cloud Event(基于 Knative 事件)。在这里,主要优点是解决方案的可移植性,因为消息符合 Cloud Event 格式,而不是特定于 GCP。

【讨论】:

  • 谢谢 Guilllaume,我会深入研究这个,看看我能做些什么。至于通知,不客气,但 Google 建议我们使用 Pub/Sub,我们发现在中等负载下,通知可能会丢失。这就是我们想要迁移到 pub/sub 的主要原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-22
  • 2022-01-13
  • 2019-10-12
  • 2020-01-17
  • 2021-12-12
  • 1970-01-01
  • 2021-02-21
相关资源
最近更新 更多