我无法理解Zuul和Ribbon之间的联系。
我想我清楚了。这是一个反向代理,我可以联系以达到我的几个服务实例之一。它将使用循环算法或您配置的任何内容来选择正确的服务器。它是传统的负载均衡器。要了解可用的实例,它可以使用像Eureka这样的注册表。
但是我在Ribbon上遇到了更多麻烦。它作为客户端负载均衡器出售,但它意味着什么?它不需要外部服务器?功能区是否与Eureka客户端一样嵌入客户端?如果是这样,它是如何工作的?我使用Ribbon时是否需要Zuul,反之亦然?
在一些文章中,我看到实际上,Zuul默认使用Ribbon作为负载均衡部分,这让我更加困惑。如果这是真的,“客户端”是什么意思?除了路由之外,Zuul会怎么做?
我希望你能帮助我。
答案 0 :(得分:22)
客户端和服务器始终是相对的。 Zuul是您的服务实例的客户端,您的服务实例是Zuul的服务器。
当我们使用传统的负载均衡器(服务器端负载均衡器)时,API调用者(客户端)只知道作为负载均衡器的单个端点,而客户端不知道服务器列表。负载均衡器从列表中选择服务器。
当我们使用像Ribbon这样的客户端负载均衡器时,API调用者(客户端)应该知道服务器列表并从列表中选择其中一个。这就是我们称之为客户端负载均衡器的原因。
如您所知,Ribbon是一个客户端负载均衡器模块,并集成到许多http客户端模块中。例如,Feign和Load-balanced RestTemplate支持Ribbon。即,当与功能区一起使用时,Feign和Load-balanced RestTemplate可以从给定列表或eureka中的列表中选择服务器。
关于Zuul,有一个RibbonRoutingFilter
将您的请求路由到实际的服务实例。 RibbonRoutingFilter
正在使用功能区从列表中选择一个服务器,该服务器是从您的配置或Eureka中提供的。因此,如果您想使用Zuul作为负载平衡的反向代理,Zuul需要Ribbon。