Zuul 和 Ribbon 集成

Zuul and Ribbon integration

我不太理解 Zuul 和 Ribbon 之间的联系。

我想我把 Zuul 弄清楚了。它是一个反向代理,我可以联系它来访问我的多个服务实例之一。它将使用循环算法或您配置它执行的任何操作来选择正确的服务器。这是一个传统的负载均衡器。要知道可用的实例,它可以使用像 Eureka 这样的注册表。

但是我在使用 Ribbon 时遇到了更多麻烦。它作为客户端负载平衡器出售,但它是什么意思?它不需要外部服务器? Ribbon 嵌入客户端的方式与 Eureka 客户端相同?如果是这样,它是如何工作的?使用 Ribbon 时是否需要 Zuul,反之亦然?

在一些文章上看到其实Zuul在负载均衡部分默认使用Ribbon,这让我更加疑惑了。如果这是真的 "client-side" 是什么意思? Zuul除了路由还能做什么?

希望你能帮帮我。

客户端和服务器总是相对的。 Zuul 是您的服务实例的客户端,您的服务实例是 Zuul 的服务器。

当我们使用传统的负载均衡器(服务器端负载均衡器)时,API调用者(客户端)只知道一个端点是负载均衡器而客户端不知道服务器列表.负载平衡器从列表中选择一个服务器。

当我们使用像 Ribbon 这样的客户端负载平衡器时,API 调用者(客户端)应该知道服务器列表并从列表中选择一个。这就是我们称之为客户端负载平衡器的原因。

如您所知,Ribbon 是一个客户端负载均衡器模块,并集成到许多 http 客户端模块中。例如,Feign 和 Load-balanced RestTemplate 支持 Ribbon。即 Feign 和 Load-balanced RestTemplate 可以从给定的列表中选择一个服务器,或者在与 ribbon 一起使用时从 eureka 的列表中选择一个服务器。

关于 Zuul,有一个 RibbonRoutingFilter 将您的请求路由到实际的服务实例。 RibbonRoutingFilter 正在使用 Ribbon 从您的配置或 Eureka 给出的列表中选择一个服务器。所以如果想使用Zuul作为负载均衡的反向代理,Zuul需要Ribbon。