首页 > 解决方案 > 通过 GKE 将 Pub/Sub 用于 Google Cloud Storage

问题描述

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

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

标签: node.jsgoogle-cloud-storagegoogle-kubernetes-engine

解决方案


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

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

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

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

优点和缺点

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

这里提到了数据模型。你的 pubsub 消息是这样的

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

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

那么,为什么是属性呢?因为您可以使用 PubSub 上的过滤器功能来创建仅包含消息子集的订阅。


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


推荐阅读