自定义负载均衡策略

解释自定义负载均衡策略如何在独特环境下帮助优化负载均衡。

自定义负载均衡策略

解释自定义负载均衡策略如何在独特环境下帮助优化负载均衡。

概述

gRPC 的一项关键特性是负载均衡,它允许将客户端请求分发到多个服务器。这有助于防止任何一个服务器过载,并通过添加更多服务器来扩展系统。

gRPC 负载均衡策略由名称解析器提供服务器 IP 地址列表。该策略负责维护到服务器的连接(子通道),并在发送 RPC 时选择要使用的连接。

实现您自己的策略

默认情况下将使用 pick_first 策略。该策略实际上不执行负载均衡,它只是尝试名称解析器提供的每个地址,并使用它能够连接的第一个地址。通过更新 gRPC 服务配置,您还可以切换到使用 round_robin 策略,该策略会连接到所有获取的地址,并为每个 RPC 轮流使用已连接的后端。还有其他一些负载均衡策略可用,但具体集合因语言而异。如果内置策略不满足您的需求,您也可以实现自己的自定义策略。

这涉及在您使用的语言中实现负载均衡器接口。从高层次来看,您需要:

  • 在负载均衡器注册表中注册您的实现,以便可以在服务配置中引用它
  • 解析您的实现的 JSON 配置对象。这允许您的负载均衡器在服务配置中配置为支持您选择的任何任意 JSON
  • 管理要维护连接的后端
  • 实现一个选择器(picker),用于在发出 RPC 时选择要连接的后端。请注意,这需要是一个快速操作,因为它位于 RPC 调用路径上
  • 要启用您的负载均衡器,请在您的服务配置中进行配置

具体步骤因语言而异,请参阅语言支持部分,了解您所用语言的一些具体示例。

flowchart TD
NR(Name Resolver) -->|Provides addresses &\nLB config| LB(Load Balancer)
LB --> |Provides a picker| C(Channel)
C -->|Requests\na subchannel| P(Picker)
LB --> |Manages subchannels\nto backends| SC(Subchannel 1..n)
LB -. Creates .-> P
P --> |Picks one| SC

后端指标

如果您的负载均衡策略需要关于后端服务器的实时信息怎么办?为此,您可以依赖后端指标。您可以获得带内(在后端 RPC 响应中)或带外(作为来自后端的独立 RPC)提供的指标。提供了 CPU 和内存利用率等标准指标,但您也可以实现自己的自定义指标。

有关更多信息,请参阅自定义后端指标指南

服务网格

如果您的服务网格设置中有一个中央控制平面协调微服务的配置,则无法通过服务配置直接配置自定义负载均衡器。但可以通过您的控制平面用于与 gRPC 客户端通信的 xDS 协议来支持此操作。请参阅您的控制平面文档,以确定如何支持自定义负载均衡配置。

有关更多详细信息,请参阅 gRPC 提案 A52

语言支持

语言示例备注
JavaJava 示例
GoGo 示例
C++暂不支持
最后修改于 2024 年 11 月 12 日:在不同网页中嵌入 YouTube 视频 (#1380) (196f408)