当前位置: 首页 > news >正文

使用ALB实现gRPC协议的负载均衡

gRPC是一种高性能、开源的远程过程调用框架,当您使用gRPC进行后端服务通信时,您可使用应用型负载均衡ALB(Application Load Balancer)实现gRPC协议的负载均衡,统一流量入口。gRPC基于HTTP/2协议进行通信,目前ALB仅支持前端加密(通过HTTPS监听)和后端明文(服务器组后端协议为gRPC)的形态。

背景信息

gRPC是一种高性能、开源的远程过程调用框架,它使用Protocol Buffers作为接口定义语言(IDL)和基于HTTP/2协议进行通信。

gRPC用于构建分布式系统中的服务通信。它解决了不同服务之间的跨语言通信问题,并提供了强大的IDL和自动生成的代码,使得开发人员可以方便地定义和调用远程服务。同时,gRPC具有高性能、低延迟和高效的数据传输,通过采用二进制编码和HTTP/2的多路复用特性,提供了快速、可靠的远程调用体验。

gRPC适用于微服务架构、跨语言通信、大规模分布式系统等场景。特别是在需要高性能和低延迟的场景下,gRPC能够提供卓越的效能。它还支持多种调用方式,如简单调用、流式请求和响应、双向流等,可以灵活地满足不同业务需求。

关于gRPC的更多信息,可参考gRPC官方文档。

场景示例

某公司在华东1(杭州)地域的专有网络VPC(Virtual Private Cloud)内部署了gRPC服务,在VPC中创建了ALB实例和支持gRPC协议的后端服务器组,ALB配置了HTTPS监听并打开HTTP2.0开关,同时后端服务器组配置了gRPC协议的健康检查。

客户端需要通过ALB实例来访问VPC中部署的gRPC服务。

前提条件

  • 已创建ALB实例。具体操作,请参见创建应用型负载均衡。

  • 已准备后端服务器,并在服务器中部署了gRPC服务。关于gRPC服务部署方法,可参考gRPC官方文档。

  • 已经注册域名并完成备案。具体操作,请参见注册阿里云域名、ICP备案流程。

  • 已购买证书或者上传第三方证书到SSL证书服务并绑定域名。关于创建证书,请参见SSL证书快速上手。

步骤一:创建服务器组并添加后端服务器

  1. 登录应用型负载均衡ALB控制台。

  2. 在顶部菜单栏处,选择所属的地域。

  3. 在左侧导航栏,选择应用型负载均衡 ALB > 服务器组

  4. 服务器组页面,单击创建服务器组

  5. 创建服务器组对话框中,完成以下配置。完成后单击创建

    此处仅列出和本文强相关的配置项,其他未列出的配置项可使用默认值或自行配置。

    配置

    说明

    服务器组类型

    选择一种服务器组类型。本文选择服务器类型

    VPC

    从VPC下拉列表中选择ALB所属的VPC,只有该VPC下的服务器可以加入到该服务器组。

    选择后端协议

    本文选择gRPC

    开启健康检查

    本文选择开启健康检查。

    健康检查配置

    单击编辑,修改健康检查配置信息:

    • 健康检查协议:本文选择gRPC

    • 健康检查方法:本文选择POST

    • 健康状态返回码:选择健康检查正常的状态码,需要与后端gRPC服务配置一致。本文示例为12

  6. 服务器组页面找到目标服务器组,单击其实例ID。

  7. 单击后端服务器页签,然后单击添加后端服务器

  8. 添加后端服务器面板,选择已创建的ECS实例,然后单击下一步

  9. 配置端口和权重配置向导,设置ECS的端口和权重,然后单击确定

    说明

    此处ECS配置的端口必须要与实际部署的gRPC服务设置的端口保持一致。同时注意安全组规则需要放行相关端口。

步骤二:配置HTTPS监听

  1. 登录应用型负载均衡ALB控制台。

  2. 在顶部菜单栏,选择实例所属的地域。

  3. 在左侧导航栏,选择实例

  4. 实例页面,找到目标实例,然后在操作列单击创建监听

  5. 配置监听页面配置以下信息,其他参数可保持默认值或根据实际情况修改。完成后单击下一步

    配置

    说明

    选择监听协议

    选择HTTPS

    监听端口

    本文配置端口443。

    说明

    • 服务器组设置后端协议为gRPC时,监听协议类型只支持HTTPS。

    • gRPC基于HTTP/2协议进行通信,服务器组设置后端协议为gRPC时,HTTPS监听必须开启HTTP2.0。ALB默认启用该功能,需要确保启用HTTP2.0功能为已开启,请勿关闭。

  6. 配置SSL证书页面配置以下信息,其他参数可保持默认值或根据实际情况修改。完成后单击下一步

    配置

    说明

    选择服务器证书

    选择准备的SSL证书。

  7. 选择服务器组页面配置以下信息,其他参数可保持默认值或根据实际情况修改。完成后单击下一步

    配置

    说明

    选择服务器组

    选择此前已创建好的gRPC服务器组。

  8. 配置审核页面,检查配置参数是否有误,无误的话单击提交,等待监听创建完成。

步骤三:配置域名解析

实际业务场景中,建议您使用自有域名,通过CNAME解析的方式将自有域名指向ALB实例域名。

  1. 在左侧导航栏,选择应用型负载均衡 ALB > 实例

  2. 实例页面,复制已创建的ALB实例的DNS名称。

  3. 执行以下步骤添加CNAME解析记录。

    说明

    对于非阿里云注册域名,需先将域名添加到云解析控制台,才可以进行域名解析设置。具体操作,请参见域名管理。如果您是阿里云注册的域名,请直接执行以下步骤。

    1. 登录域名解析控制台。

    2. 权威域名解析页面,找到目标域名,在操作列单击解析设置

    3. 解析设置页面,单击添加记录

    4. 添加记录面板,配置以下信息完成CNAME解析配置,然后单击确定

      配置

      说明

      记录类型

      在下拉列表中选择CNAME

      主机记录

      您的域名的前缀。本文输入@。

      说明

      创建域名为根域名时,主机记录为@

      解析请求来源

      选择默认。

      记录值

      输入域名对应的CNAME地址,即您复制的ALB实例的DNS名称。

      TTL

      全称Time To Live,表示DNS记录在DNS服务器上的缓存时间,本文使用默认值。

步骤四:验证连通性

完成上述操作后,客户端可以通过ALB访问部署了gRPC服务的后端服务器,以下内容为您展示如何测试客户端和gRPC服务之间的连通性。

说明

浏览器无法直接访问gRPC服务。建议您通过grpcurl工具之类的测试工具验证访问。

在客户端中执行grpcurl -insecure -v <域名>:<监听端口> <gRPC服务名称>/<方法>命令尝试访问ECS中的gRPC服务。

如果收到类似下图所示的回复报文,则表示客户端可以通过ALB访问部署了gRPC服务的后端服务器ECS。

image

相关文章:

使用ALB实现gRPC协议的负载均衡

gRPC是一种高性能、开源的远程过程调用框架&#xff0c;当您使用gRPC进行后端服务通信时&#xff0c;您可使用应用型负载均衡ALB&#xff08;Application Load Balancer&#xff09;实现gRPC协议的负载均衡&#xff0c;统一流量入口。gRPC基于HTTP/2协议进行通信&#xff0c;目…...

解决IDEA的easycode插件生成的mapper.xml文件字段之间逗号丢失

问题 easycode插件生成的mapper.xml文件字段之间逗号丢失&#xff0c;如图 解决办法 将easycode(在settings里面的othersettings)设置里面的Template的mapper.xml.vm和Global Config的mybatisSupport.vm的所有$velocityHasNext换成$foreach.hasNext Template的mapper.xml.vm(…...

【Linux测试题】

1. 选择题 题目&#xff1a; 如果想将电脑中Windows C盘&#xff08;hd1&#xff09;安装在Linux文件系统的/winsys目录下&#xff0c;请问正确的命令是&#xff08;&#xff09;。 选项&#xff1a; A. root104.123.123.123:~# mount dev/hd1 /winsys B. root104.123.123.12…...

python使用openpyxl处理excel

文章目录 一、写在前面1、安装openpyxl2、认识excel窗口 二、基本使用1、打开excel2、获取sheet表格3、获取sheet表格 尺寸4、获取单元格数据5、获取区域单元格数据6、sheet.iter_rows()方法7、修改单元格的值8、向表格中插入行数据9、实战&#xff1a;合并多个excel 三、获取E…...

【JavaWeb后端学习笔记】Mybatis基础操作以及动态SQL(增、删、改、查)

Mybatis 0、环境准备0.1 准备数据库表emp&#xff1b;0.2 准备SpringBoot工程0.3 配置文件中引入数据库连接信息0.4 创建对应的实体类0.5 准备Mapper接口 1、MyBatis基础操作1.1 删除1.2 新增&#xff08;主键返回&#xff09;1.3 更新1.4 查询&#xff08;解决字段名与类属性名…...

基于MATLAB野外观测站生态气象数据处理分析实践应用

1.本课程基于MATLAB语言 2.以实践案例为主&#xff0c;提供所有代码 3.原理与操作结合 4.布置作业&#xff0c;答疑与拓展 示意图&#xff1a; 以野外观测站高频时序生态气象数据为例&#xff0c;基于MATLAB开展上机操作&#xff1a; 1.不同生态气象要素文件的数据读写与批处理…...

IP 地理位置定位技术原理概述

本文深入探讨 IP 地理位置定位技术的原理。介绍了 IP 地址的基本概念及其在网络中的作用&#xff0c;随后阐述了基于数据库查询、基于网络拓扑分析以及基于机器学习算法的三种主要 IP 地理位置定位技术原理中的基于IP数据库查询。 IP 地址基础 IP 地址是互联网协议&#xff0…...

C语言(分支结构)

问题引出 我们在程序设计往往会遇到如下的问题&#xff0c;比如下的函数的计算。 也就是我们是必须要通过一个条件的结果来选择下一步的操作&#xff0c;算法上属于一个分支结构&#xff0c;C语言中实现分支结构主要使用if语句。 条件判断 根据某个条件成立与否&#xff0c…...

批量将不同的工作簿合并到同一个Excel文件

批量将不同的工作簿合并到同一个Excel文件 下面是一个示例&#xff0c;展示如何批量将不同的工作簿合并到同一个Excel文件&#xff0c;并生成模拟数据。我们将使用 Python 的 pandas 库来完成这个任务。具体步骤如下&#xff1a; 步骤 1: 安装必要的库 首先确保你已安装 pan…...

详解AI网关助力配电房实现智能化管控应用

​对于一些建设年份久远的老旧配电房&#xff0c;由于配套降温散热设施设备不完善、线路设备老化等因素&#xff0c;极易出现因环境过热而影响设备正常稳定运行&#xff0c;进而导致电气故障甚至火灾等事故产生。 基于AI网关的配电房智能监控及管理 针对配电房的实时安全监测及…...

2025美赛数学建模常用数据库网站大全

优秀模板写作红宝书数学模型获取——更多资料请点击下方名片进群获取。 一、可以查询美国各个领域经济指标的网站: olap.epsnet.com.cnhttps://www.ers.usda.gov/data-products/rice-yearbook/www.ers.usda.govU.S. Energy Information Administration (EIA) www.eia.govhttp…...

Wordpress设置固定链接形式后出现404错误

比如固定连接设置为 /archives/%post_id%.html 这种形式&#xff0c;看起来比较舒服。对搜索引擎也友好。 出现404需要设置伪静态...

我最近在干什么【1】

前言 打算开一个新系列&#xff0c;偏休闲点的&#xff0c;不是完整全面的技术分享&#xff0c;话题还是聚焦个人成长&#xff08;学的技术、了解到的信息、看的书……&#xff09; 方面。文章偏意识流点&#xff0c;单纯分享我最近在干什么&#xff0c;不定期更新&#xff0c…...

[Vue3]computed原理

Computed原理 不管在是 Vue 2 还是在 Vue 3 中&#xff0c;对 computed 本身的实现原理基本都是一样的。当使用 computed 计算属性时&#xff0c;组件初始化会对每一个计算属性都创建对应的 watcher , 然后在第一次调用自己的 getter 方法时&#xff0c;收集计算属性依赖的所有…...

Vue工程化开发中各文件的作用

1.main.js文件 main.js文件的主要作用&#xff1a;导入App.vue&#xff0c;基于App.vue创建结构渲染index.html。...

【c++笔试强训】(第三十一篇)

目录 最⻓回⽂⼦序列&#xff08;动态规划-区间dp&#xff09; 题目解析 讲解算法原理 编写代码 添加字符&#xff08;字符串&#xff09; 题目解析 讲解算法原理 编写代码 最⻓回⽂⼦序列&#xff08;动态规划-区间dp&#xff09; 题目解析 1.题目链接&#xff1a;最…...

Go 1.19.4 HTTP编程-Day 20

1. HTTP协议 1.1 基本介绍 HTTP协议又称超文本传输协议&#xff0c;属于应用层协议&#xff0c;在传输层使用TCP协议。HTTP协议属是无状态的&#xff0c;对事务处理没有记忆能力&#xff0c;如果需要保存状态需要引用其他技术&#xff0c;如Cookie。HTTP协议属是无连接的&…...

MySQL 8.0 的主主复制(双向复制)

在 Windows Server 2022 Datacenter 上配置 MySQL 8.0 的主主复制&#xff08;双向复制&#xff09;&#xff0c;步骤与 Linux 类似&#xff0c;但有一些特定的配置和路径需要注意。以下是详细的简化步骤&#xff1a; 1. 使用 root 用户登录 确保你以 root 用户登录到 MySQL …...

四、自然语言处理_03LSTM与GRU

0、前言 随着循环神经网络&#xff08;RNN&#xff09;在各种序列数据处理任务中被广泛应用&#xff0c;研究人员逐渐发现了其在处理长序列数据时会容易出现梯度消失&#xff08;vanishing gradient&#xff09;和梯度爆炸&#xff08;exploding gradient&#xff09;问题&…...

磁盘系列基础知识(一):硬盘;IDE;ATA;SATA;AHCI;SCSI;SAS

磁盘系列基础知识&#xff08;一&#xff09;硬盘 IDE ATA SATA AHCI SCSI SAS 硬盘厂家 西部数据Western Digital/WD. 希捷 SEAGATE、三星 SAMSUNG、东之 Toshiba、英特尔 Intel、金士顿 Kingston、闪迪 SanDisk、 英睿达 Crucial、浦科特 Plextor 硬盘类别 HDD &#xff08;…...

taro小程序进入腾讯验证码

接入原因 昨天突然晚上有人刷我们公司的登录发送短信接口&#xff0c;紧急将小程序的验证码校验更新上去了 接下来就是我们的接入方法&#xff0c;其实很简单&#xff0c;不过有时候可能大家着急就没有仔细看文档&#xff0c;腾讯验证码文档微信小程序地址&#xff0c;注意这里…...

原子类相关

原子引用 JUC 并发包提供了&#xff1a; AtomicReferenceAtomicMarkableReferenceAtomicStampedReference AtomicReference 使用举例 public interface DecimalAccount {// 获取余额BigDecimal getBalance();// 取款void withdraw(BigDecimal amount);/*** 方法内会启动 10…...

RabbitMQ 客户端 连接、发送、接收处理消息

RabbitMQ 客户端 连接、发送、接收处理消息 一. RabbitMQ 的机制跟 Tcp、Udp、Http 这种还不太一样 RabbitMQ 服务&#xff0c;不是像其他服务器一样&#xff0c;负责逻辑处理&#xff0c;然后转发给客户端 而是所有客户端想要向 RabbitMQ服务发送消息&#xff0c; 第一步&a…...

Java Web 3 Axios Vue组件库

一 Ajax 1 同步 异步 2 原生Ajax 比较繁琐 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Documen…...

双目相机的标定,视差图,深度图,点云生成思路与实现。

该文档记录从双目相机标定到点云生成的所有过程&#xff0c;同时会附上代码。 代码直接能跑。https://github.com/stu-yzZ/stereoCamera 目录 大致思路如下&#xff1a; 一、相机标定 1、相机参数介绍 2、单目相机标定 3、双目相机标定 二、图片畸变矫正 三、极线矫正…...

【H2O2|全栈】MySQL的基本操作(三)

目录 前言 开篇语 准备工作 案例准备 多表查询 笛卡尔积 等值连接 外连接 内连接 自连接 子查询 存在和所有 含于 分页查询 建表语句 结束语 前言 开篇语 本篇继续讲解MySQL的一些基础的操作——数据字段的查询中的多表查询和分页查询&#xff0c;与单表查询…...

2、C++命名空间

命名空间 命名空间是一种用来避免命名冲突的机制; 原理是将一个全局的作用域分成一个个命名空间&#xff0c;每个命名空间是个单独的作用域,从而有效避免命名冲突。 注意&#xff1a;命名空间定义在全局 命名空间定义格式 使用&#xff1a; …...

Elemenu-UI时间日期单个组件,限制当前日期之后的时间

element的时间日期组件&#xff0c; type"datetime" &#xff0c;当你设置了:picker-options"pickerOptions"之后 pickerOptions: { disabledDate(time) { return time.getTime() > Date.now(); }, }, 会发现&#xff0c;他只会限制日期&#xff0c;但不…...

flutter修改状态栏学习

在flutter中如何动态更改状态栏的颜色和风格。 前置知识点学习 AnnotatedRegion AnnotatedRegion 是 Flutter 中的一个小部件&#xff0c;用于在特定区域中提供元数据&#xff08;metadata&#xff09;以影响某些系统级的行为或外观。它通常用于改变系统 UI 的外观&#xff…...

解决Unity编辑器Inspector视图中文注释乱码

1.问题介绍 新创建一个脚本&#xff0c;用VS打开编辑&#xff0c;增加一行中文注释保存&#xff0c;在Unity中找到该脚本并选中&#xff0c;Inspector视图中预览的显示内容&#xff0c;该中文注释显示为乱码&#xff0c;如下图所示&#xff1a; 2.图示解决步骤 按上述步骤操作…...