2016-08-01 10 views
1

Мы используем Grpc (библиотека C#) с protobuf для выполнения внутреннего RPC в локальной сети. Я использую HAProxy для выполнения балансировки Roundrobin, чтобы распределить нагрузку на один из двух серверов. Поскольку я создаю канал Singleton и использую то же самое для выполнения всех вызовов RPC, балансировка нагрузки не происходит. Когда я предоставляю IP-адрес прокси-сервера в качестве списка серверов при создании GRPC Channel, IP-адрес не разрешает фактический физический IP-адрес, а показывает только IP-адрес прокси в поле «Объект канала» ResolvedTarget. Мой вопрос в том, как я могу получить Singleton объектов для каждого из серверов и по-прежнему использовать HAproxy для балансировки нагрузки? Или невозможно использовать HAProxy и в то же время использовать канал как объект Singleton?как найти фактический IP-адрес, когда HAProxy используется с Grpc для балансировки нагрузки?

ответ

0

Вы не видите никакой балансировки нагрузки, поскольку, когда это возможно, gRPC использует одно постоянное TCP-соединение для отправки запросов на сервер. Таким образом, когда вы открываете соединение с HAProxy, он «балансирует нагрузку», что одно соединение с одним из серверов. Затем это соединение остается открытым до тех пор, пока выполняется ваше приложение, поэтому функциональность балансировки нагрузки никогда не включается снова.

Вы видите подключенный IP-адрес в качестве IP-адреса прокси-сервера, потому что вы действительно подключены к прокси-серверу. HAProxy перенаправляет ваши пакеты на сервер.

Это означает, что с одиночными каналами или без него HAProxy не будет отправлять несколько запросов gRPC с одного клиента на разные серверы. Тем не менее, HAProxy по-прежнему полезен с gRPC, потому что он все равно будет загружать балансовые соединения от разных клиентов к различным бэкендам.

+0

_However, HAProxy по-прежнему полезен с gRPC, поскольку он все равно будет загружать соединения баланса с разных клиентов на разные backends._. У меня было такое же предположение, но этого не произошло, когда я создал канал singleton. Все запросы от всех клиентов отправились только на один сервер. Я знаю, потому что я записывал запросы канала в graylog. – GawdePrasad