Как заставить мой клиент gRPC открыть несколько соединений с сервером? - PullRequest
0 голосов
/ 30 ноября 2018

Я реализовал сервер и клиент с инструментарием Google gRPC.Во время тестирования я заметил, что между клиентом и сервером никогда не было более одного TCP-соединения, независимо от того, сколько Channel экземпляров я создаю.

Я планирую использовать то, что Google называет " балансировка нагрузки прокси"через HAProxy.Поэтому мне нужно несколько подключений от моих клиентов (скажем, сервис A) к моим серверам (скажем, сервис B).Если создано не более одного соединения, то HAProxy выбирает один сервис для этого соединения, и ни один из других серверов никогда не увидит никакой нагрузки.

Я пытался использовать ChannelOptions.MaxConcurrentStreams как на стороне клиента, так и на сервере.сторона (и обе стороны одновременно), но без везения.Как уже упоминалось, я создал несколько Channel экземпляров, но безрезультатно.Единственный эффективный метод, который я нашел, - это создание нескольких процессов, которые не являются идеальными по очевидным причинам.

Что я могу сделать, чтобы полностью включить сценарий «балансировки нагрузки прокси» от Google?

1 Ответ

0 голосов
/ 10 января 2019

В настоящее время нет прямого способа форсировать создание нового соединения с помощью нашего существующего API.Как я упоминал в комментариях, это может быть сделано с нашей реализацией C-Core (которая обернута gRPC C #) только путем предоставления различных ChannelArgs, которые представляют параметры соединения и, если они присутствуют, гарантируют, что будут созданы отдельные соединениядля каждого отдельного набора ChannelArgs.Однако использование различных аргументов канала исключительно для получения новых копий одного и того же соединения не является предполагаемым вариантом использования API, поэтому не существует действительно бессмысленных аргументов канала, которые ничего не изменяют, кроме обеспечения установления нового соединения.

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

...