Использование Pub / Sub для облачного хранилища Google с помощью GKE

#node.js #google-cloud-storage #google-kubernetes-engine

#node.js #google-облачное хранилище #google-kubernetes-engine

Вопрос:

У меня есть приложение GKE, которое в настоящее время управляется уведомлениями из корзины облачного хранилища Google. Я хочу преобразовать это node.js вместо этого приложение будет запускаться уведомлениями PubSub. Я просматривал страницы документации Google большую часть дня и не получил четкого ответа. Я вижу некоторый код на python, который может это сделать, но это не очень помогает.

Код в том виде, в котором он написан в данный момент, работает — изображение, попадающее в мою корзину GCS, запускает уведомление для моих модулей GKE, и моя функция запускается. Пытаюсь понять, что мне нужно сделать внутри моей функции, чтобы подписаться на паблик / подтему, чтобы запустить обработку. Приветствуются любые предложения.

Комментарии:

1. Можете ли вы описать, какова ваша текущая реализация? Я не понимаю, как облачное хранилище может вызывать модуль GKE без PubSub push-подписки.

2. В настоящее время мы используем уведомления об объектах, как описано здесь: cloud.google.com/storage/docs/object-change-notification

Ответ №1:

Во-первых, спасибо, я не знал о возможности уведомления GCS!!

Принцип близок, но вы используете PubSub в качестве посредника. Вместо того, чтобы напрямую уведомлять ваше приложение с помощью команды watchbucket, вы указываете тему PubSub.

Оттуда уведомления поступают в раздел PubSub, теперь вам нужно создать подписку. возможны 2 типа:

  • Push: вы указываете URL-адрес HTTP, который вызывается с запросом POST, а тело содержит сообщение с уведомлением.
  • Pull: вашему приложению необходимо создать соединение с подпиской на PubSub и читать сообщения.

За и против

  • Для Push требуется аутентификация из подписки PubSub push для вашего приложения. И если вы используете внутренний IP, вы не сможете использовать это решение (конечная точка URL должна быть общедоступной). Основным преимуществом является масштабируемость и простота модели.
  • Для извлечения требуется аутентификация подписчика (здесь вашего приложения), и, таким образом, даже если ваше приложение развернуто в частном порядке, вы можете использовать подписку на получение. Pull рекомендуется для высокой пропускной способности, но требует более высоких навыков в обработке, параллелизме / многопоточном программировании. Масштабирование выполняется не по частоте запросов (как в модели Push), а по количеству прочитанных сообщений. И вам нужно вручную подтвердить сообщения.

Здесь упоминается модель данных. Ваше сообщение в pubsub выглядит так

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

Атрибуты описаны в документации, а полезная нагрузка (в кодировке base64, будьте осторожны) имеет этот формат. Очень похоже на то, что вы получаете сегодня.

Итак, почему атрибуты? Потому что вы можете использовать функцию фильтрации в PubSub для создания подписки только с подмножеством сообщений.


Вы также можете переключать передачи и использовать Cloud Event (на основе событий Knative), если вы используете Cloud Run для Anthos в своем кластере GKE. Здесь основным преимуществом является переносимость решения, поскольку сообщения соответствуют формату облачных событий и не специфичны для GCP.

Комментарии:

1. Спасибо, Гийом, я разберусь в этом и посмотрю, что я могу сделать. Что касается уведомлений, пожалуйста, но Google рекомендует использовать Pub / Sub, и мы обнаружили, что при умеренно большой нагрузке уведомления могут потеряться. Это основная причина, по которой мы хотим перейти на pub / sub.