Я использую gRPC с Python как клиент/сервер внутри pubs kubernetes ... Я хотел бы иметь возможность запускать несколько модулей одного типа (серверы gRPC) и позволить клиенту подключаться к их (случайным образом).балансировка нагрузки на стороне клиента gRPC
Я отправил 10 контейнеров сервера и установил «сервис» для их таргетинга. Затем, в клиенте, я подключился к DNS-имени службы - это означает, что кубернеты должны выполнять балансировку нагрузки и направлять меня на случайный серверный модуль. На самом деле клиент вызывает функции gRPC (который работает хорошо), но когда я смотрю на журналы, я вижу, что все вызовы идут на один и тот же серверный модуль.
Предполагаю, что клиент выполняет какое-то кэширование DNS, которое приводит ко всем вызовам, отправляемым на тот же сервер. Это так? В любом случае отключить его и установить один и тот же клиент-заглушка, чтобы сделать «новый» вызов и получить новый ip по DNS с каждым вызовом?
Я знаю, что накладные расходы могут возникнуть, если он будет запрашивать DNS-сервер каждый раз, но распределение нагрузки для меня гораздо важнее.
EDIT
, вероятно, не проблема кэширования ... Может быть просто способ КПГР работает. HTTP/2 и постоянное многоразовое соединение. Любой способ «отключиться» после каждого вызова?
Благодарим вас за подробный ответ. На самом деле, я уже сделал то, что вы предлагали, и создавал новый канал для каждого запроса (неэффективно, я знаю). Из вашего ответа я понимаю, что только первый ip в dns будет получать запросы до тех пор, пока он не остановится (нет доступных подключений/убит/разбился), и только тогда клиенты получат второй ip и т. Д. ... это правильно? – Idan
Да. Как уже упоминалось, до тех пор, пока изменения не позволят выбрать раунд robin вместо выбора сначала как политика LB. –
Есть ли типичное решение для масштабирования нескольких серверов gRPC? или балансировку нагрузки на стороне клиента? –