Мы настраиваем кластер для обработки логических выводов (с обслуживанием Tensorflow) через gRPC. Мы намерены использовать балансировщик нагрузки уровня 7 (AWS ALB) для распределения нагрузки. Для нашей рабочей нагрузки логический вывод будет происходить много раз в минуту из каждой клиентской учетной записи. Насколько я понимаю, gRPC хранит состояние подключения для каждого из этих каналов. В результате, чтобы ALB выполнял свою работу, нам необходимо периодически разрывать и восстанавливать соединение на клиентском экземпляре.
Мой вопрос: как лучше всего использовать циклическое соединение в Java?
Ниже представлен предлагаемый мной код, который будет вызываться каждые пару минут на каждом клиентском канале. Я предполагаю, что пока первое соединение отключается, мы можем создать новое и немедленно отправить по нему запрос; или нам нужно подождать, пока сначала отключится предыдущий канал. В нашей ситуации канал (очень вероятно) будет пустым, поскольку предыдущий запрос был на 10 секунд раньше.
if (mChannel != null)
mChannel.shutdown();
mChannel = ManagedChannelBuilder.forAddress(mHost, mPort).usePlaintext().build();
mStub = PredictionServiceGrpc.newBlockingStub(mChannel);