J'ai lu la page sur l'équilibrage de la charge à l'adresse suivante: https://github.com/grpc/grpc/blob/master/doc/load-balancing.md au début de, mais je ne comprends toujours pas quelle est la bonne approche pour équilibrer la charge. entre les instances GRPC dorsales. Nous déployons plusieurs instances de «microservice» de gRPC et souhaitons que nos autres clients gRPC puissent être routés entre eux. Nous les déployons sous forme de modules dans kubernetes (en fait, Google Container Engine).
Quelqu'un peut-il expliquer l'approche "recommandée" pour équilibrer la charge des demandes de clients gRPC entre les serveurs gRPC? Il semble que les clients doivent connaître les points de terminaison. N’est-il pas possible de tirer parti de LoadBalancer intégré dans Container Engine pour l’aider?
Je ne peux pas parler de kubernetes, mais en ce qui concerne l'équilibrage de charge de gRPC, il existe essentiellement deux approches:
grpc::ChannelArguments::SetLoadBalancingPolicyName
avec "round_robin" comme argument (à l'avenir, il serait également possible de sélectionner via " service configuration ", mais la conception permettant d'encoder cette configuration dans les enregistrements DNS n’a pas encore été finalisée).Faites moi savoir si vous avez des questions.
Comme mentionné par Samarendra
Vous pouvez vérifier Envoy , construit à l'origine par Lyft.
Il offre un support de première classe pour HTTP/2 et gRPC pour les connexions entrantes et sortantes.
Nous utilisons des émotions pour nos services de gRPC à Gojek, qui nous sert bien sous une charge assez élevée.
Pour l’équilibrage de charge entre les serveurs grpc, l’équilibrage de charge par défaut de Kubernate ne vous aidera pas car il s’agit d’un équilibreur de charge L4.
Pourquoi L7?
grpc utilise http2 où les connexions sont persistantes et les requêtes seront envoyées via la même connexion. L'équilibreur de charge L4 équilibrera la charge à l'aide de connexions TCP, mais vous avez besoin d'un équilibre de charge au niveau de la demande. Nous aurions donc besoin d'un équilibreur de charge L7. surtout quand la communication est entre les serveurs de grpc.
il existe plusieurs options, vous pouvez utiliser Linkered/Envoy
pour cela, elles fonctionnent bien avec kubernates et fournissent également un bon service.
pour exposer vos services à des travaux extérieurs, vous pouvez utiliser nghttpx et nghttpx Ingress controller.
vous pouvez également utiliser l'équilibrage de la charge côté client, mais cela ne me semble pas rentable.
Vous voudrez peut-être consulter nghttpx et le contrôleur de nghttpx Ingress projects. Ces projets permettent d’équilibrer la charge de L7 pour les flux HTTP/2.
Consultez également le site https://cloud.google.com/endpoints/docs/architecture-overview pour obtenir des informations sur la gestion des points de terminaison intégrée à Google Cloud Platform.
Si dans AWS/ECS a https://aws.Amazon.com/blogs/aws/new-network-load-balancer-effortless-scaling-to-millions-of-requests-per-second/ fonctionnera pour contourner les connexions entre vos groupes cibles.
Vous devez faire quelque chose pour écouter le bilan de santé que NLB ne peut faire que dans HTTP1. Aussi, vous arrivez à mettre fin à votre propre SSL.