GKE: удаление Pub / Sub и Pod с 3 репликами

#google-cloud-platform #google-kubernetes-engine #google-cloud-pubsub

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

Вопрос:

В GKE, если у меня есть раздел Pub / Sub, который настроен на использование pull метода, и API, который выступает в качестве подписчика на этот раздел, если у этого API есть репликация 3 (spec.replicas: 3), каково стандартное поведение для API (клиента)?

т.е. когда сообщение попадает в тему, учитывая, что API — это asynchronously pulling сообщения из темы (https://cloud.google.com/pubsub/docs/pull#asynchronous-pull ) и имеет репликацию 3, все ли 3 модуля извлекают сообщение одновременно (и в итоге получают дубликаты)? Есть ли какая-то балансировка нагрузки за кулисами? каково поведение «из коробки»?

Ответ №1:

У вас есть отличный видеоряд на YouTube: youtube-канал Google Cloud. Вы можете глубоко понять поведение каждого типа подписки, политики повторных попыток и так далее.

Чтобы сразу ответить на ваш вопрос: да, есть балансировщик нагрузки, и сообщения отправляются в соответствии с количеством подписчиков. Но на самом деле это не циклический перебор. Существует скрытая оптимизация, которая отправляет порции сообщений каждому подписчику (в зависимости от их размера и количества). Я имею в виду, что если вы отправите 3 тестовых сообщения одновременно, 3 отправятся одному и тому же подписчику.

Сообщения дублируются только при подписке (push или pull).

Ответ №2:

Сообщения распределяются по нагрузке между клиентами-подписчиками, которые подключаются к одной и той же подписке. Данное сообщение будет доступно только одному подписчику одновременно, пока ack deadline не истечет срок действия, после чего оно может быть повторно отправлено другому клиенту-подписчику. Служба также учитывает настройки управления потоком для каждого клиента-подписчика в отдельности и не будет отправлять сообщения клиенту, который управляется потоком, вместо этого перенаправляя их другим клиентам. Более подробная информация о поведении подписчика доступна в документации подписчика.

Таким образом, если 3 реплики подключаются к одной и той же подписке, сообщения темы будут распределены по ним с балансировкой нагрузки, т.Е. Они будут получать разные подмножества сообщений. Вы должны предоставить достаточное количество реплик, чтобы в совокупности они могли обрабатываться быстрее, чем сообщения публикуются в теме.

Если вы хотите, чтобы 3 реплики получали все сообщения по отдельности, используйте отдельную подписку для каждой реплики.