iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >grpc-java k8s下的负载均衡处理方法
  • 525
分享到

grpc-java k8s下的负载均衡处理方法

2024-04-02 19:04:59 525人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录前言现状负载均衡的方案一、客户端 dns 模式 二、客户端注册中心模式三、代理端走 ingress四、代理端 service mesh结语前言 grpc 因为是长连接的

前言

grpc 因为是长连接的,所以负载均衡处理起来没有 rest 接口那么容易。常见的 grpc 负载均衡方法分为两类,一类是客户端侧实现负载逻辑,一类是代理侧实现负载逻辑,对客户端侧是透明的。在容器化的网络环境里, grpc-java 客户端侧的负载均衡有两种常见的实现路径。

1、基于 dns 实现,

2、基于外部的服务注册中心实现(ZooKeeper/Etcd/Consul/Eureka)。

本文旨在,在容器化的网络环境下,通过测验寻找一种改造成本最小的实现负载均衡的途径

现状

k8s 的网络环境下,一个 grpc 的服务,同一个 namespace 下,可以直接通过 service 访问,不同的 namespace 可以通过 service.namespace 访问。但是,经验证,这种直连的方式没法做到负载均衡,也就意味着 server 端无论开启了多少个 pod 实例,客户端也只能连接一个pod 。所以,在客户端和服务端数量不对等时,打到 server 侧的流量会非常的不均衡,如果数量对等,情况稍微好些。本次测验只测试了 java 链接 java 的 grpc 服务,生产环境的实际调用场景会更复杂,包含了 PHPGo、java 三种 grpc 服务的相互调用

负载均衡的方案

一、客户端 dns 模式

dns 的模式是 grpc-java 实现复杂均衡改造成本最小的。应该也是最通用的,各个语言的 grpc  应该都有支持。主要改动两个地方,

1、修改 Service 的 spec.clusterIP 为 ”None“,如:

apiVersion: v1
kind: Service
metadata:
  namespace: tap-prod
  name: queuing-rpc
  labels:
    app: queuing-rpc
spec:
  clusterIP: None
  ports:
    - port: 8030
      targetPort: 8030
      name: grpc
  selector:
    app: queuing-rpc

改动后,可以通过 service 的名称解析到 pod 的 ip 列表

2、配置的 grpc 链接协议头加上 dns 协议,如:

grpc.client.store.address = dns:///store-rpc:8020

 二、客户端注册中心模式

客户端注册中心模式相比较 dns 模式,实现方式上相对复杂点,但是灵活度更高了,有了注册中心后,服务治理相关的也就都可以做了。但是在多语言的场景下,这种方式的普及难度会更高,无论选择哪个注册中心实现,都必须要求其他语言也要对应实现。这里只简要阐述 grpc-java 的实现途径

。grpc-java 客户端提供了 NameResolver 、NameResolverProvider 、NameResolverReGIStry 等实现服务注册发现的扩展类。结合注册中心 ZooKeeper/Etcd/Consul/Eureka ,很容易实现一个基于注册中心的带服务治理的 grpc 。

三、代理端走 ingress

Nginx-ingress-controller 从 0.30.0 版本开始支持 grpc 的流量代理,经测验,在 nginx-ingress 代理模式下,grpc 的流量是负责均衡的。这种改动方式也比较简单,服务方只需要新增一个 ingress 代理 grpc 流量即可,客户端链接是无感的,不需要做任何改动。因为走了一层代理,性能上会比dns 模式差点

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  namespace: tap-prod
  name: store-rpc
  annotations:
    kubernetes.io/ingress.class: nginx-intranet-grpc
    nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
spec:
  rules:
    - host: store-rpc.xx.com
      Http:
        paths:
          - backend:
              serviceName: store-rpc
              servicePort: 8020

四、代理端 service mesh

需要引入 Istio 等服务网格架构。这种模式,对于多语言微服务环境是非常友好的,可以屏蔽各种语言基础服务治理的实现细节,应该是最终目标方案。

结语

短期而言,需要解决 grpc 负载均衡问题,最快速、最无感的方案是基于 ingress 的代理负载模式。改动小、性能好的方案应该是客户端基于 dns 的模式。最复杂、最灵活、可控度最高的应该是基于客户端注册中心的实现方式。综合起来看,service mesh 的方式才是最终的目标,不仅解决服务负载问题,流量观测、服务治理也统统解决了

参考:

  • https://grpc.io/blog/grpc-load-balancing/
  • https://kubernetes.GitHub.io/ingress-nginx/examples/grpc/

以上就是grpc-java k8s下的负载均衡处理方法的详细内容,更多关于grpc-java k8s负载均衡的资料请关注编程网其它相关文章!

--结束END--

本文标题: grpc-java k8s下的负载均衡处理方法

本文链接: https://www.lsjlt.com/news/139893.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • grpc-java k8s下的负载均衡处理方法
    目录前言现状负载均衡的方案一、客户端 dns 模式 二、客户端注册中心模式三、代理端走 ingress四、代理端 service mesh结语前言 grpc 因为是长连接的...
    99+
    2022-11-13
  • grpc-java k8s下的负载均衡如何处理
    本文小编为大家详细介绍“grpc-java k8s下的负载均衡如何处理”,内容详细,步骤清晰,细节处理妥当,希望这篇“grpc-java k8s下的负载均衡如何处理”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一...
    99+
    2023-06-29
  • 负载均衡集群的session处理方法
    本篇内容主要讲解“负载均衡集群的session处理方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“负载均衡集群的session处理方法”吧!通常面临的问题从用户端来解释,就是当一个用户第一次访...
    99+
    2023-06-27
  • IIS下的负载均衡与IIS+Nginx实现负载均衡、反向代理
    在IIS下实现负载均衡可以使用Microsoft提供的Application Request Routing(ARR)模块。ARR可...
    99+
    2023-09-01
    IIS
  • 负载均衡的实现方法
    这篇文章主要讲解了“负载均衡的实现方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“负载均衡的实现方法”吧!    客户端发送多个请求到服务器,服务器...
    99+
    2023-06-20
  • linux下nginx负载均衡搭建的方法步骤
    首先先了解下负载均衡,假设一个场景,如果有1000个客户同时访问你服务器时,而你只有一台服务器的Nginx,且只有一个mysql服务器,那么这些请求 可能会高出你的的服务器承受能力,就会down掉; 解决方法: 1.垂直...
    99+
    2022-06-04
    linux nginx负载均衡 nginx 负载均衡
  • Centos实现负载均衡的方法
    这篇文章主要讲解了“Centos实现负载均衡的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Centos实现负载均衡的方法”吧!为了提高系统的高可用性,我们可以将两个或多个网卡进行绑定,...
    99+
    2023-06-10
  • dnspod 负载均衡的设置方法
    这篇文章主要介绍“dnspod 负载均衡的设置方法”,在日常操作中,相信很多人在dnspod 负载均衡的设置方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”dnspod 负载均衡的设置方法”的疑惑有所帮助!...
    99+
    2023-06-12
  • slb负载均衡管理的方法是什么
    SLB(Server Load Balancing)负载均衡管理的方法主要包括以下几种:1. 服务监测和健康检查:负载均衡器会定期检...
    99+
    2023-09-01
    负载均衡
  • java负载均衡的方式有哪些
    Java负载均衡的方式有以下几种:1. 软件负载均衡:使用Java编写的负载均衡软件,如Nginx、Apache、HAProxy等。...
    99+
    2023-06-10
    java负载均衡 java
  • Java 负载均衡的 5 种算法实现原理
    目录一、负载均衡算法简介1、轮询法2、随机法3、源地址哈希法4、加权轮询法5、加权随机法二、代码实现负载均衡五种算法1.轮询法2.加权轮询法3.随机法4.加权随机5.源地址哈希法 前...
    99+
    2022-11-12
  • Nginx配置Tcp负载均衡的方法
    本文使用Nginx作为代理服务器,用来做负载均衡。只是一个简单的应用示例,并不涉及原理。 (这里主机有限,42.192.22.128主机8000端口用来做代理服务器监听端口,818...
    99+
    2022-11-13
  • MySQL实现负载均衡功能的方法
    小编给大家分享一下MySQL实现负载均衡功能的方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!前言MySQL是一个高速度、高性能、多线程、开放源代码,建立在客户/服务器(Client/S...
    99+
    2022-10-18
  • 负载均衡的原理及使用方法是什么
    负载均衡是一种用于分配网络请求负载的技术,它通过将网络请求分配给多个后端服务器来提高系统的性能、可靠性和可扩展性。负载均衡的原理是基...
    99+
    2023-09-01
    负载均衡
  • Nginx反向代理和负载均衡部署方法
    本篇内容介绍了“Nginx反向代理和负载均衡部署方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!nginx反向代理与负载均衡upstrea...
    99+
    2023-06-04
  • Linux下Nginx负载均衡多个tomcat配置的方法步骤
    linux下安装nginx和安装多个tomcat的方法这里不过多介绍,不清楚的可参考: Linux安装nginx: https://www.jb51.net/article/159519.htm Linux安装多个to...
    99+
    2022-06-04
    Nginx负载均衡多个tomcat配置 Nginx 多个tomcat配置
  • k8s中的service如何找到绑定的Pod及实现Pod负载均衡的方法
    目录k8s 中的 service 如何找到绑定的 Pod 以及如何实现 Pod 负载均衡前言endpointkube-proxyuserspace 模式iptablesipvsker...
    99+
    2022-11-13
    k8s 中的 service 实现 Pod 负载均衡 k8s 负载均衡
  • nginx负载均衡搭建的方法是什么
    搭建nginx负载均衡的方法如下:1. 安装nginx:使用apt-get或yum等包管理工具安装nginx。2. 配置nginx:...
    99+
    2023-06-06
    负载均衡搭建 负载均衡
  • python搭建负载均衡的方法是什么
    Python搭建负载均衡的方法有多种,以下是一种常见的方法:1. 使用Python的Web框架(如Flask、Django)编写负载...
    99+
    2023-09-08
    python
  • springboot负载均衡配置的方法是什么
    在Spring Boot中配置负载均衡有以下几种方法: 使用Ribbon实现负载均衡:Ribbon是Netflix开发的一个负载...
    99+
    2023-10-23
    springboot
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作