как поддерживаются розетки или каналы связи в распределенной системе - PullRequest
0 голосов
/ 15 января 2020

Я новичок в распределенных системах, и пришел к этой проблеме, когда-то нужно было развернуть службу gRP C в kubernetes (GKE). Насколько я знаю, когда клиент инициирует rp c, он создает длительное соединение http2 и на нем мультиплексируются дальнейшие вызовы. Мне нравится отправлять / pu sh уведомления или подобные сообщения клиенту через это соединение. Если я разверну к нескольким модулям, то соединения распределяются между ними, и я не уверен, каков наилучший способ найти экземпляр, где канал зарегистрирован для клиента. Возможным решением может быть, как только пользователь инициирует соединение, сохранить ссылку на clientId и pod ip (или некоторую идентификацию) в централизованной службе, а другие pods ищут модуль и пересылают ему сообщение. Является ли что-то подобное целесообразным или для этого существует решение? Я не знаком с этим пространством, и любое предложение высоко ценится.

Редактировать: (ответ на @ mebius99)

Рассматривая вариант развертывания, я наткнулся на GKE, и другие варианты развертывания облака были ограничено из-за моего использования gRPC / http2. Спасибо за упоминание об обнаружении службы, и, возможно, вариант или услуга me sh. С помощью gRP C клиент поддерживает долгоживущее соединение с одним модулем. Итак, я хочу, чтобы каждый модуль мог запрашивать, основываясь на уникальном clientId (клиенты могут выполнять начальный вызов rp c регистра), к какому модулю он подключен, поэтому он может использовать это соединение, а также способ отправки сообщение между ними. Итак, что-то вроде того, когда я получаю регистрационный звонок от клиента, я обновляю центральный реестр о клиенте и IP-адресе pod, затем просматриваю его из любого пакета pod и forward, чтобы он далее пересылался клиенту через существующее потоковое соединение. Вы направляете меня в правильном направлении, пожалуйста, дайте мне знать, что выше возможно в контейнерной среде.

спасибо.

Ответы [ 3 ]

2 голосов
/ 15 января 2020

Еще одна идея, вы можете использовать Envoy proxy.
Если вы используете GKE, эти сообщения полезны.

1 голос
/ 15 января 2020

Я бы предложил начать с концепции Kubernetes Service и Обнаружение службы . Балансировка нагрузки External HTTP (S) должна соответствовать вашим потребностям.

В случае, если вам нужно что-то более сложное, Посланник-посредник + Балансировка сетевой нагрузки может быть решением, как упомянуто здесь.

1 голос
/ 15 января 2020

Звучит так, будто вы хотите внедрить какую-то систему Pub-Sub.

Вы должны выполнить некоторый подсчет масштаба, например, сколько клиентов, сколько сообщений в секунду.

Затем вы можете выбрать, реализовать себя или выбрать готовая система, такая как https://doc.akka.io/docs/alpakka/current/google-cloud-pub-sub-grpc.html

...