цикл подключения gRPC

Мы настраиваем кластер для обработки логических выводов (с обслуживанием 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);

person Hephaestus    schedule 19.05.2021    source источник


Ответы (1)


Лучше всего использовать Lookaside Load Balancing.

Однако вы можете сделать несколько настроек, чтобы разорвать клиентские соединения.

var builder = ManagedChannelBuilder.forAddress(mHost, mPort)
.keepAliveTime(15, TimeUnit.SECONDS)
.keepAliveTimeout(5, TimeUnit.SECONDS);

Вышеупомянутая конфигурация гарантирует завершение закрепленных соединений gRPC, а AWS ALB может выполнять свою работу по равномерной балансировке нагрузки.

Есть и другие варианты, которые вы можете попробовать в зависимости от вашего варианта использования, например, повторные попытки и т. Д. См. ManagedChannelBuilder

person Varun Thakur    schedule 22.05.2021
comment
Спасибо за отличный ответ. Это именно то, что я искал! - person Hephaestus; 25.05.2021