Как транслировать потоки gRPC между модулями - PullRequest
0 голосов
/ 26 октября 2019

У нас есть поток gRPC для обмена данными между двумя микро-сервисами, API и Worker (оба созданы в Golang). Намерение состоит в том, чтобы прослушивать состояние заданий, обрабатываемых модулями службы Worker. Таким образом, связь является однонаправленной (работник отправляет обновления в Api). На рисунке ниже это видно. enter image description here

Наша проблема в том, как мне узнать, когда модуль Worker масштабируется, чтобы подписаться на новый модуль Worker (по потоку)?

На рисунке ниже показана проблема.

enter image description here

Ответы [ 2 ]

0 голосов
/ 26 октября 2019

В качестве идеи: почему бы не использовать центральное хранилище конфигурации (например, etcd, redis, ..) для синхронизации рабочих с gRPC-API, этот тип логики должен управляться самим приложением, в деталях:

  1. при запуске нового рабочего модуля оно регистрируется в службе конфигурации
  2. , когда приложению gRPC-API требуется установить новое соединение, оно просматривает службу конфигурации иприложение выбирает один: вам решать, какую стратегию вы хотите использовать там: циклический перебор, случайный выбор, привязанность и т. д. и т. д.
  3. , когда рабочий модуль отключаетсязапись этого места назначения удалена из службы конфигурации. Чтобы избежать появления призрачных записей, вероятно, лучше использовать специальный инструмент мониторинга или gRPC-API берет на себя ответственность проверять действительность пункта назначения перед установлением нового соединения

Это должно сделать то, чтоВы ищете.

0 голосов
/ 26 октября 2019

Может быть, это невозможно для вашего варианта использования, но вы думали о том, чтобы иметь услугу перед работником, поэтому вместо подписки на обоих работников вы подписываетесь на одного из двух?

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

...