как загрузить балансировку запросов java-клиента gRPC через NLB

Я тестирую java-клиент gRPC на своем сервере через балансировку нагрузки AWS NLB, но все трафик попадает в один и тот же узел. Я пытаюсь понять, как это будет работать с NLB.

Поскольку gRPC использует постоянное TCP-соединение, я предполагаю, что его клиент установит несколько tcp-подключений через NLB к своему серверу и случайным образом будет обслуживать запросы к этим соединениям?

Я использую код из примера grpc.java

ManagedChannel channel = ManagedChannelBuilder.forAddress(endPoint, port).usePlaintext().build();
GreeterGrpc.GreeterBlockingStub blockingStub = GreeterGrpc.newBlockingStub(channel);
response = blockingStub.sayHello(request);

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

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

Итак, проблема в том, как сделать запросы с балансировкой нагрузки между каждым серверным узлом. Я запустил пример через NLB, но все запросы попали в один и тот же узел безуспешно.


person keape    schedule 15.04.2019    source источник
comment
Только что нашел блог lb от grpc. grpc.io/blog/loadbalancing. Итак, похоже, что клиентская сторона lb нуждается в дополнительной реализации. Видел много статей, в которых утверждается, что grpc будет работать с NLB, но до сих пор не знаю, как это будет работать.   -  person keape    schedule 15.04.2019


Ответы (1)


NLB не может правильно загрузить балансировку grpc. Это неэффективный взлом.

grpc предоставляет надежное решение для балансировки нагрузки на стороне клиента для доверенного клиента. https://github.com/grpc/grpc/blob/master/doc/load-balancing.md

person keape    schedule 16.04.2019