Kubernetes上的gRPC负载均衡服务

gRPC是用于进程间通信的最流行的现代RPC框架之一。对于微服务体系结构来说,这是一个很好的选择。毫无疑问,部署微服务应用程序最流行的方法之一是Kubernetes。

Kubernetes部署可以有相同的后端实例来服务许多客户端请求。Kubernetes的ClusterIP服务提供负载平衡的IP地址。但是,这种默认的负载平衡在gRPC中无法立即实现。如果您将gRPC与许多部署在Kubernetes上的后端一起使用,则本文档适用于您。

为什么要进行负载平衡?

大规模部署具有许多相同的后端实例和许多客户端。每个后端服务器都有一定的容量。负载平衡用于将来自客户端的负载分布到可用服务器上。

在您开始详细了解Kubernetes中的gRPC负载平衡之前,让我们试着了解负载平衡的好处。

负载平衡有很多好处,其中一些好处是:

  • 故障容忍度:如果您的一个副本出现故障,那么其他服务器可以为该请求提供服务。
  • 提高了可伸缩性:您可以跨多个服务器分发用户流量,从而提高了可伸缩性。
  • 提高吞吐量:您可以通过在各种后端服务器上分布流量来提高应用程序的吞吐量。
  • 无缺点部署:您可以使用滚动部署技术实现无停机部署。

gRPC中的负载平衡选项

gRPC中有两种类型的负载平衡选项—代理和客户端。

代理负载平衡

在代理负载平衡中,客户端向负载平衡器(LB)代理发出RPC。LB将RPC调用分发给一个可用的后端服务器,该后端服务器实现为调用提供服务的实际逻辑。LB跟踪每个后端上的负载,并实现公平分配负载的算法。客户端本身不知道后端服务器。客户端可能不受信任。此体系结构通常用于面向用户的服务,其中来自开放internet的客户端可以连接到服务器

客户端负载平衡

在客户端负载平衡中,客户端知道许多后端服务器,并为每个RPC选择一个。如果客户端希望,它可以根据服务器的负载报告实现负载平衡算法。对于简单的部署,客户端可以在可用服务器之间循环请求。

与gRPC负载平衡相关的挑战

gRPC在HTTP/2上工作。HHTP/2上的TCP连接是长期的。一个连接可以多路传输多个请求。这减少了与连接管理相关的开销。但这也意味着连接级负载平衡不是很有用。Kubernetes中的默认负载平衡基于连接级负载平衡。因此,Kubernetes的默认负载平衡不适用于gRPC。

为了证实这个假设,让我们创建一个Kubernetes应用程序。此应用程序包括——

  • 服务器pod:Kubernetes部署有三个gRPC服务器pod。
  • 客户端pod:Kubernetes部署,带有一个gRPC客户端pod。
  • 服务:集群服务,它选择所有服务器pod。

你可能感兴趣的:(JAVA,计算机,程序员,kubernetes,负载均衡,容器)