
# 通过ELB部署gRPC协议转发以提高并发效率
#### 应用场景
gRPC是一种高性能且开源的远程过程调用（RPC Remote Procedure Calls）框架，广泛应用于微服务通信和移动端API等需要高性能、低延迟和跨语言支持的分布式应用场景。当前弹性负载均衡服务已支持使用HTTPS协议的监听器进行gRPC请求接收，后端服务器组使用gRPC协议进行转发的功能，基于gRPC协议支持HTTP/2多路复用的优势，显著提高流量的吞吐效率。
#### 实践方案架构
某公司在区域A的弹性云服务器ECS中部署了gRPC应用服务，在ECS所在的虚拟私有云内创建了弹性负载均衡实例。弹性负载均衡实例通过HTTPS监听器接收业务请求再转发到gRPC协议的后端服务器组中，部署了gRPC应用服务的ECS作为后端服务器接收处理客户端请求并返回响应。
图1客户端通过ELB访问gRPC应用服务   
![](https://support.huaweicloud.com/bestpractice-elb/zh-cn_image_0000002317347021.png "点击放大")
#### 准备工作
- 已创建独享型ELB实例，且ELB已绑定EIP。具体操作，请参见[购买独享型负载均衡器](https://support.huaweicloud.com/usermanual-elb/elb_lb_000006.html)和[绑定IPv4公网IP](https://support.huaweicloud.com/usermanual-elb/elb_ug_fz_0015.html)。
- 已购买证书或者上传第三方证书到SSL证书服务并绑定公网域名。推荐您在华为云云证书与管理服务购买服务器证书，详情请参见[购买SSL证书](https://support.huaweicloud.com/usermanual-ccm/ccm_01_0074.html)。
- 已购买ECS01实例，并且在ECS01中部署了gRPC应用服务。更多关于gRPC服务的详情，请参见[gRPC官网文档](https://grpc.io/docs/what-is-grpc/)。
 
#### 操作步骤
图2配置gRPC协议转发操作流程   
![](https://support.huaweicloud.com/bestpractice-elb/zh-cn_image_0000002282617188.png "点击放大")
 #### 步骤一：创建GRPC协议的后端服务器组
1. 进入[后端服务器组列表页面](https://console.huaweicloud.com/vpc/?locale=zh-cn#/elb/elbPool/list)。
2. 在后端服务器列表页面，单击页面右上角"创建后端服务器组"按钮。
3. 配置后端分配策略，关键参数详情请参见[表1]，其余配置项保持默认值即可。
    表1配置后端分配策略参数说明 
   | 参数      | **示例**                | 说明                                                                                                                                                                                                                                                |
   |:---|:---|:---|
   | 名称      | **server_group_gRPC** | 创建的后端服务器组的名称。                                                                                                                                                                                                                                     |
   | 负载均衡类型  | **独享型**               | 可使用该后端服务器组的负载均衡实例类型。                                                                                                                                                                                                                              |
   | 所属负载均衡器 | **关联已有**              | 使用该后端服务器组的负载均衡实例。 单击"关联已有"后，选择您已创建完成的负载均衡实例。                                                                                                                                                                         |
   | 后端协议    | **GRPC**              | 后端云服务器自身提供的网络服务的协议。 本实践方案选择GRPC协议。                                                                                                                                                                                  |
   | 分配策略类型  | **加权轮询算法**            | 负载均衡采用的算法，本实践方案保持默认的加权轮询算法。 加权轮询算法：根据后端服务器的权重，按顺序依次将请求分发给不同的服务器，权重大的后端服务器被分配的概率高。 更多关于分配策略的信息，请参见[配置流量分配策略分发流量](https://support.huaweicloud.com/usermanual-elb/elb_ug_jt_0003.html)。 |
      
   
4. 单击"下一步"，添加后端服务器并配置健康检查。
5. 单击"添加云服务器"，选择您已创建好的ECS01实例，设置业务端口，其余选项保持默认，完成云服务器的添加。
   ![](https://support.huaweicloud.com/bestpractice-elb/public_sys-resources/caution_3.0-zh-cn.png)
   此处设置的业务端口必须与实际部署gRPC业务的端口保持一致，且后端服务器的安全组需放行该业务端口
   
6. 开启健康检查，其余健康检查参数保持默认。
7. 单击"下一步"。
8. 确认配置无误后，单击"立即创建"。
 
#### 步骤二：添加HTTPS监听器
1. 进入[弹性负载均衡列表页面](https://console.huaweicloud.com/vpc/?locale=zh-cn#/elb/list)。
2. 在目标弹性负载均衡实例的操作列，单击"添加监听器"。
3. 在添加监听器页面，前端协议选择"HTTPS"，并且在"更多配置（可选）"中，开启"**HTTP/2** "开关。
   图3添加HTTPS监听器并配置单向认证   
   ![](https://support.huaweicloud.com/bestpractice-elb/zh-cn_image_0000002133559530.png "点击放大")
   图4开启HTTP/2   
   ![](https://support.huaweicloud.com/bestpractice-elb/zh-cn_image_0000002354403025.png "点击放大") 
4. 单击"下一步：配置后端分配策略"，后端服务器组参数选择"使用已有"。选择[步骤一]中已经创建完成的GRPC协议后端服务器组，完成后单击"下一步：确认配置"。
5. 确认配置参数后，单击"提交"，完成HTTPS监听器的创建。
 
#### 步骤三：配置域名解析
通过为域名添加A类型记录集解析，将域名解析到ELB的公网地址，使得客户端可以通过公网域名访问ELB。
以下提供将网站域名解析至IPv4地址的配置示例，更多关于A类型记录集的配置指导，请参考[快速添加网站域名解析](https://support.huaweicloud.com/qs-dns/dns_qs_0002.html)。
1. 进入[云解析服务控制台](https://console.huaweicloud.com/dns/?#/dns/dashboard)。
2. 在左侧树状导航栏，选择"公网域名"。 进入域名列表页面。
   
3. 在待添加记录集的公网域名所在行，单击操作列的"管理解析"。
4. 单击"添加记录集"，进入"添加记录集"页面。
5. 设置记录集参数，如[表2]所示。
    表2A类型记录集参数说明 
   | 参数       | **示例**               | 说明                                                                                                                                                                                      |
   |:---|:---|:---|
   | 记录类型     | **A -- 将域名指向IPv4地址** | 记录集的类型，本实践为**A -- 将域名指向IPv4地址**。                                                                                                                                                        |
   | 主机记录     | **www**              | 您域名的前缀。                                                                                                                                                                                 |
   | 线路类型     | **全网默认**             | 解析的线路类型用于DNS服务器在解析域名时，根据访问者的来源，返回对应的服务器IP地址。 默认值为"全网默认"。 全网默认：默认线路类型，当未根据访问者来源设置解析线路时，系统会返回默认解析结果。 |
   | TTL(秒)   | **300**              | 解析记录在本地DNS服务器的缓存时间，以秒为单位。 本实践使用默认值300秒。                                                                                                         |
   | 记录值      | **192.168.12.2**     | 域名对应的IPv4地址，本实践为ELB绑定的弹性公网IP地址。                                                                                                                                                         |
   | 高级配置（可选） | **-**                | 您可以单击![](https://support.huaweicloud.com/bestpractice-elb/zh-cn_image_0000002219795465.png)，展开折叠的高级配置区域，设置记录集的别名和权重并添加标签和描述，本文保持默认设置。                                                   |
      
   
6. 单击"确定"。
7. 返回"解析记录"页面。 添加完成后，您可以在域名对应的记录集列表中查看已添加的记录集。当记录集的状态显示为"正常"时，表示记录集添加成功。
   
 
#### 步骤四：验证gRPC业务连通性
完成以上操作后，客户端可以通过ELB访问部署在后端服务器上的gRPC服务。由于浏览器不支持直接处理gRPC协议特定的数据帧格式，您可参考以下步骤测试客户端与gRPC服务之间的连通性。
1. 本文以ECS作为客户端进行验证，远程登录ECS。 弹性云服务器有多种登录方法，具体请参见[登录弹性云服务器](https://support.huaweicloud.com/ecs_faq/ecs_faq_0632.html)。
   
2. grpcurl是用于与gRPC服务进行交互的命令行工具。在客户端中安装grpcurl用于验证gRPC服务，以下提供安装示例。
   1. 安装grpcurl软件包，本实践提供两种安装示例。
      - 通过yum自动安装grpcurl软件包。
        ```
        yum install grpcurl
        ```
        
      
      - 手动安装指定版本的grpcurl软件包。
        ```
        rpm -ivh grpcurl_1.9.3_linux_386.rpm
        ```
        
       
   
   2. 验证grpcurl安装成功。
      ```
      grpcurl --version
      ```
      图5验证安装grpcurl成功   
      ![](https://support.huaweicloud.com/bestpractice-elb/zh-cn_image_0000002310985430.png "点击放大") 
    
3. 在客户端中执行以下命令，尝试访问后端服务器中的gRPC服务。
   ```
   grpcurl -insecure -proto <.proto文件> <域名>:<监听端口> <gRPC服务名称>/<方法>
   ```
   如果收到类似下图所示的回复报文，则表示客户端可以通过ELB访问部署了gRPC服务的后端服务器。
   图6验证访问gRPC服务   
   ![](https://support.huaweicloud.com/bestpractice-elb/zh-cn_image_0000002317164445.png "点击放大") 
 
