балансировка нагрузки на стороне клиента gRPC

У меня работает безголовый сервис с несколькими репликами. При попытке проверить балансировку нагрузки на стороне клиента с помощью циклического перебора я вижу, что все запросы попадают в одну и ту же реплику. Настройка клиента выглядит следующим образом:

 conn, err := grpc.Dial(
        address,
        grpc.WithInsecure(),
        grpc.WithDefaultServiceConfig(`{"loadBalancingPolicy":"round_robin"}`),)

Я проверил несколько обслуживаемых конечных точек. Я также подтвердил, что служба разрешает эти несколько IP-адресов, но каким-то образом она подключается только к первому модулю в этом списке. MAX_CONNECTION_AGE установлен на 30 секунд на стороне сервера, чтобы гарантировать, что клиент время от времени повторно подключается в случае увеличения масштаба. Я следил за многочисленными статьями о том, как это настроить, но это просто не работает. Что мне не хватает?


person Vardan Saakian    schedule 10.11.2020    source источник
comment
Вот статья о Балансировка нагрузки gRPC в k8s   -  person Grigoriy Mikhalkin    schedule 10.11.2020
comment
Спасибо, я тоже прочитал эту статью. Мы бы не хотели использовать прокси-серверы и на данный момент сохраняем балансировку нагрузки только на стороне клиента.   -  person Vardan Saakian    schedule 10.11.2020


Ответы (1)


Ключевым моментом было явное использование dns:/// в качестве префикса для таргетинга. Несмотря на то, что в документации это указано по умолчанию.

person Vardan Saakian    schedule 11.11.2020