облачный клиент Google pubsublite для бессерверной службы

#google-cloud-platform #google-cloud-pubsub #google-cloud-pubsublite

# #google-облачная платформа #google-cloud-pubsub #google-cloud-pubsublite

Вопрос:

Прежде всего, я хотел пометить этот пост в google-cloud-pubsub-lite, но он еще не создан, приношу свои извинения

Я пытаюсь познакомиться с pubsub lite. Я думаю, что это можно использовать как «дешевый» способ получить хранилище событий в проекте GCP.

Обычно мы создаем стандартные сервисы GAE, поэтому платим за то, что использовали, и в то же время это обеспечивает отличную масштабируемость.

Читая примеры о том, как в настоящее время подписаться на pubsub lite, я заметил, что нет возможности указать конечную точку для получения новых сообщений. Клиент подключается к подписке и остается в ожидании новых сообщений, которые будут передаваться через соединение.

Я задаюсь несколькими вопросами:

  • Можем ли мы получать сообщения из раздела pubsub lite в облачной функции или в конечной точке стандартной службы GAE?
  • Как мы можем масштабироваться до нескольких клиентов для тематической подписки

Спасибо

Ответ №1:

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

В бессерверном режиме вам следует использовать Push-подписку, более подходящую для масштабируемости и интеграции. В режиме pull subscription вам необходимо выполнить микропереключения

  • Создание облачного планировщика
    • * * * * * как частота
    • Вызовите нужный бессерверный инструмент (облачный запуск, облачная функция, движок приложений).
  • В бессерверном продукте при получении запроса создайте подключение к подписке PubSub lite и начните получать сообщения.
    • Если вытягивание занимает более 1 минуты, от Cloud Scheduler будет получен новый запрос
      • Облачная функция автоматически создаст новый экземпляр и начнет вытягивание
      • Cloud Run может обрабатывать до 80 запросов одновременно. Я рекомендую вам установить параметр параллелизма равным 1, чтобы иметь точно такое же поведение, как и облачная функция
      • Вы не можете играть с параллелизмом в движке приложений
      • Установите время ожидания на максимальное значение
    • Если нового сообщения нет (например, в течение 500 мс), завершите работу корректно.
    • Если время ожидания обслуживания близко (например, за 15 секунд до этого), остановите вытягивание и завершите работу корректно.

Таким образом, у вас может быть несколько клиентов для одной и той же подписки (масштаб 1 за минуты и за планировщик, если предыдущий запуск все еще активен)

Этот обходной путь сохраняет бессерверный режим. Если сообщений нет, извлечение прекращается через 500 мс или при отсутствии новых сообщений. Вы расширяетесь вместе со своим трафиком.


Однако я не понимаю вашей концепции дешевого хранилища событий.

  • PubSub lite — это не модель с оплатой по мере использования, а плоская модель. Вы резервируете емкость и платите за нее 24/7, даже если она не используется
  • PubSub lite является зональным и опасным для HA
  • Вы можете сохранить событие до тех пор, пока раздел не будет заполнен. Но не будет ли дешевле хранить событие в другом месте? Большой запрос? Firestore? Облачный SQL?

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

1. Спасибо за такой подробный ответ. Что касается цен, в документации говорится, что pubsub lite на порядок дешевле, чем PubSub. Я не понимаю, что вы подразумеваете под словом «опасно для ХА»

2. Посмотрите на эту таблицу . Не стесняйтесь, если у вас есть вопросы по этому поводу!

3. Еще раз спасибо, я думаю, что останусь с regula PubSub. Есть какие-либо рекомендации по выбору магазина для мероприятий? Я предполагаю, что для поиска событий, если я, наконец, решу использовать этот шаблон, Firestore o Cloud SQL будет лучшим вариантом.

4. Все зависит от того, как вы будете использовать событие и количество событий, которые вы ожидаете. Firestore великолепен и бессерверен, но имеет ограниченные возможности для запросов (разрешены только простые запросы). Облачный SQL (и BigQuery) позволяет создавать сложные запросы, такие как why john, несколько условий «where»,…