#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.