将 Pub/Sub 用于 Google Cloud Storage 和 GKE

问题描述

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

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

解决方法

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

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

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

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

优缺点

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

数据模型是 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。