как балансировать запросы Java-клиента gRPC через NLB - PullRequest
0 голосов
/ 15 апреля 2019

Я тестирую Java-клиент gRPC на своем сервере через балансировку нагрузки NLB aws, но все трафик попадают на один и тот же узел. Я пытаюсь понять, как это будет работать над 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, но все запросы попали в один и тот же узел без удачи.

1 Ответ

0 голосов
/ 16 апреля 2019

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

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

...