go grp c балансировка нагрузки с помощью шардинга - PullRequest
0 голосов
/ 19 июня 2020

Можно ли реализовать шардинг клиента gRP C на уровне балансировщика?

Допустим, я хочу сегментировать свои запросы на службу foosvc, которую я заранее называю для разрешения на 3 сервера (foosvc1 , foosvc2, foosvc3), и я хочу, чтобы client1 всегда подключался к серверу foosvc1, client2 к foosvc2 и т.д. c. Я попытался создать настраиваемый балансировщик, но не вижу возможности получить доступ к метаданным запроса внутри балансировщика.

Могу ли я создать настраиваемый балансировщик (на основе пакета балансировщик ) для сделать это или мне нужно иметь несколько клиентов grp c и решить эту проблему в моем логе вызовов c? Или, может быть, это какой-то антипаттерн и есть решение получше?

Ответы [ 2 ]

0 голосов
/ 22 июня 2020

Для всех, кто смотрит на это. Уловка состоит в том, чтобы передать «ключ сегментирования» средству выбора в контексте, которое затем может использовать его для вычисления ha sh и решения, какое подсоединение использовать. См. https://github.com/liyue201/grpc-lb/blob/master/balancer/consistent_hash.go для примера реализации.

0 голосов
/ 19 июня 2020

gRP C Балансировка нагрузки может представлять интерес?

Я не знаком с этим пакетом gRP C, но он может (!?) Быть ориентирован на обратное проксирование, которое На самом деле это не то, что вам нужно.

Я думаю, вам может быть полезно реализовать маршрутизацию на стороне клиента (или в стороне).

Хотя они запускают одну и ту же функциональную службу, ваши бэкенды неоднородны, потому что клиент X должен всегда маршрутизировать на сервер f (X).

Я думаю - в идеале - вы можете sh, чтобы использовать что-то вроде etcd, Redis, Consul (или собственный преобразователь) для размещения вашего списка внутренних серверов. Эта услуга, конечно же, может быть самой услугой gRP C.

ПРИМЕЧАНИЕ вы можете LB-запросы через этот преобразователь к провайдеру с более высокой доступностью.

И либо клиенты, либо этот прокси-сервер для выполнения функции сегментирования.

Как вы, несомненно, знаете, большая проблема с сегментированием - это обеспечение справедливой балансировки нагрузки (клиенты привязаны к серверам) и ребалансировка | перепродажа. Но вы не задали этот вопрос: -)

...