#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 реплики получали все сообщения по отдельности, используйте отдельную подписку для каждой реплики.