我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

前言

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 服务,生产环境的实际调用场景会更复杂,包含了 php 、go、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负载均衡的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

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

下载Word文档

猜你喜欢

grpc-java k8s下的负载均衡如何处理

本文小编为大家详细介绍“grpc-java k8s下的负载均衡如何处理”,内容详细,步骤清晰,细节处理妥当,希望这篇“grpc-java k8s下的负载均衡如何处理”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。前
2023-06-29

负载均衡集群的session处理方法

本篇内容主要讲解“负载均衡集群的session处理方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“负载均衡集群的session处理方法”吧!通常面临的问题从用户端来解释,就是当一个用户第一次访
2023-06-27

IIS下的负载均衡与IIS+Nginx实现负载均衡、反向代理

在IIS下实现负载均衡可以使用Microsoft提供的Application Request Routing(ARR)模块。ARR可以将传入的请求分发到多个IIS服务器上,从而实现负载均衡。要实现IIS+Nginx的负载均衡和反向代理,可以
2023-09-01

负载均衡的实现方法

这篇文章主要讲解了“负载均衡的实现方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“负载均衡的实现方法”吧! 客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,
2023-06-20

dnspod 负载均衡的设置方法

这篇文章主要介绍“dnspod 负载均衡的设置方法”,在日常操作中,相信很多人在dnspod 负载均衡的设置方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”dnspod 负载均衡的设置方法”的疑惑有所帮助!
2023-06-12

Centos实现负载均衡的方法

这篇文章主要讲解了“Centos实现负载均衡的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Centos实现负载均衡的方法”吧!为了提高系统的高可用性,我们可以将两个或多个网卡进行绑定,
2023-06-10

java负载均衡的方式有哪些

Java负载均衡的方式有以下几种:1. 软件负载均衡:使用Java编写的负载均衡软件,如Nginx、Apache、HAProxy等。2. 硬件负载均衡:使用硬件设备进行负载均衡,如F5、Cisco、Citrix等。3. DNS负载均衡:通过
2023-06-10

slb负载均衡管理的方法是什么

SLB(Server Load Balancing)负载均衡管理的方法主要包括以下几种:1. 服务监测和健康检查:负载均衡器会定期检查后端服务器的健康状态,通过发送心跳包或者HTTP请求来判断服务器是否正常运行。对于不可用的服务器,负载均衡
2023-09-01

linux下nginx负载均衡搭建的方法步骤

首先先了解下负载均衡,假设一个场景,如果有1000个客户同时访问你服务器时,而你只有一台服务器的Nginx,且只有一个mysql服务器,那么这些请求 可能会高出你的的服务器承受能力,就会down掉; 解决方法: 1.垂直升级:就是增加服务器
2022-06-04

Privoxy在Ubuntu中处理WebSocket的负载均衡

Privoxy是一个非缓存Web代理服务器,主要用于个人隐私保护和安全浏览。它通常用于过滤和修改HTTP和HTTPS流量,但也可以处理其他类型的协议,包括WebSocket。然而,需要注意的是,Privoxy并不是一个专门的负载均衡器,而是
Privoxy在Ubuntu中处理WebSocket的负载均衡
2024-10-18

负载均衡的原理及使用方法是什么

负载均衡是一种用于分配网络请求负载的技术,它通过将网络请求分配给多个后端服务器来提高系统的性能、可靠性和可扩展性。负载均衡的原理是基于以下几个方面:1. 请求调度:负载均衡器接收到来自客户端的请求后,会根据一定的算法(如轮询、最小连接数、最
2023-09-01

Nginx反向代理和负载均衡部署方法

本篇内容介绍了“Nginx反向代理和负载均衡部署方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!nginx反向代理与负载均衡upstrea
2023-06-04

负载均衡slb搭建管理的方法是什么

负载均衡(SLB)搭建管理一般包括以下方法:选择合适的负载均衡器:根据实际需求选择合适的负载均衡器,比如硬件负载均衡器、软件负载均衡器或者云服务提供商提供的负载均衡器等。配置负载均衡算法:根据实际应用场景和需求,选择合适的负载均衡算法,比如
负载均衡slb搭建管理的方法是什么
2024-04-09

apache负载均衡部署的方法是什么

Apache负载均衡部署指南本指南提供逐步说明,介绍如何使用ApacheHTTPServer创建负载均衡解决方案。它涵盖了安装、配置、调度算法、高级功能、部署策略、监控和安全注意事项。实施这些策略可以提高网站和应用程序的高可用性、性能和可扩展性。
apache负载均衡部署的方法是什么
2024-04-09

python搭建负载均衡的方法是什么

Python搭建负载均衡使用Python,您可以轻松搭建负载均衡器,从而提升应用程序的可用性、可伸缩性和性能。本文介绍了使用Nginx、HAProxy、Gunicorn、CloudFlareLoadBalancer和AWSElasticLoadBalancer搭建负载均衡的5种方法。
python搭建负载均衡的方法是什么
2024-04-09

nginx负载均衡搭建的方法是什么

搭建nginx负载均衡的方法如下:1. 安装nginx:使用apt-get或yum等包管理工具安装nginx。2. 配置nginx:在nginx.conf配置文件中设置负载均衡策略、后端服务器列表、健康检查等。3. 启动nginx:启动ng
2023-06-06

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录