Как транслировать события с платформой GCP? - PullRequest
1 голос
/ 17 марта 2019

Я пытаюсь создать простое решение, в котором сервисы-поставщики отправляют события в очередь сообщений, а затем потоковые сервисы делают их доступными через потоковый API gRPC.

Cloud Pub / Sub, кажется, хорошо подходит для работы, однако масштабирование службы потоковой передачи означает, что каждая копия этой службы должна будет создать свою собственную подписку и удалить ее, прежде чем ее уменьшать, что кажется излишне сложным, а не тем, для чего предназначалась платформа. для.

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

Я должен также упомянуть, что причина наличия потокового API состоит в том, чтобы разрешить потоковую передачу на внешний интерфейс (который может не иметь доступа к базовой инфраструктуре)

Есть ли лучший способ сделать что-то подобное с платформой GCP без развертывания и управления моей собственной инфраструктурой?

1 Ответ

2 голосов
/ 19 марта 2019

Если вы, по сути, хотите эфемерные подписки, есть несколько вещей, которые вы можете установить для объекта Подписка при создании подписки:

  1. Установить expiration_policy на меньшую продолжительность.Если подписчик не получает сообщения в течение этого периода времени, подписка будет удалена.Компромисс заключается в том, что если ваш подписчик не работает из-за временной проблемы, которая длится дольше, чем этот период, то подписка будет удалена.По умолчанию срок действия составляет 31 день.Вы можете установить это всего за 1 день.Для подписчиков по запросу подписчики просто должны прекратить отправлять запросы в Cloud Pub / Sub, чтобы таймер их истечения запустился.Для принудительной подписки таймер запускается в зависимости от того, когда сообщения не были успешно доставлены в конечную точку.Поэтому, если сообщения не публикуются или если конечная точка возвращает ошибку для всех отправленных сообщений, таймер действует.

  2. Уменьшите значение message_retention_duration.Это период времени, в течение которого сообщения хранятся в том случае, если подписчик не получает сообщения и не проверяет их.По умолчанию это 7 дней.Вы можете установить его всего за 10 минут.Компромисс заключается в том, что если ваш подписчик отключается или отстает в обработке сообщений более чем на эту длительность, сообщения старше этого будут удалены, и подписчик их не увидит.

Подписчики, которые чистозавершение работы может, вероятно, просто вызвать DeleteSubscription для себя, чтобы подписка немедленно отключилась, но для тех, которые неожиданно закрылись, установка этих двух свойств минимизирует время, в течение которого подписка продолжает существовать, и количество сообщений (которые никогда не будут доставлены).) это будет сохранено.

Имейте в виду, что Cloud Pub / Sub квоты ограничивают от одной до 10000 подписок на тему и проект.Поэтому, если много подписок создано и либо активно, либо не очищено (вручную или автоматически после того, как expiration_policy прошло ttl), новые подписки могут быть не в состоянии быть созданы.

...