Feign 是如何实现负载均衡的?

Sherwin.Wei Lv7

Feign 是如何实现负载均衡的?

回答重点

Feign是一个声明式的Http客户端调用工具,它使得开发者可以更加方便地调用远程服务。

开发者只需要定义一个接口,并不需要写关于如何发送Http请求的代码。

Feign 本身并没有负载均衡的能力,它负载均衡的能力需要依赖其它的框架

目前在 SpringCloud 体系下,主要有两个框架可以配合 Feign 实现负载均衡:

  • Ribbon
  • loadbalancer

Ribbon 也是最开始配合 Feign 实现负载均衡的框架。

loadbalancer 是 SpringCloud 团队自己写的,主要是因为 Ribbon 后面停止维护了,所以 SpringCloud 团队写了一个 loadbalancer 来替代 Ribbon。

扩展内容

Ribbon 如何得知服务实例的数据?

答案其实很简单,那就是需要注册中心去主动适配Ribbon,只要注册中心去适配了Ribbon,那么Ribbon自然而然就知道服务实例的数据了。

Ribbon提供了一个获取服务实例的接口,叫ServerList:

ServerList

接口中提供了两个方法,这两个方法在众多的实现中实际是一样的,并没有区别。

当Ribbon通过ServerList获取到服务实例数据之后,会基于这些数据来做负载均衡的。

Nacos自然而然也实现了ServerList接口,为Ribbon提供Nacos注册中心中的服务数据。

image.png

这样,Ribbon就能获取到了Nacos服务注册中心的数据。

同样地,除了Nacos之外,Eureka、Zookeeper等注册中心也都实现了这个接口。

image.png

对于loadbalancer来说,其实也是这种模式,需要不同的注册中心去适配,这样也就可以获取到服务注册中心的服务实例信息了。

之后Ribbon或者loadbalancer是就可以通过获取到的服务实例信息进行负载均衡了选择一个供OpenFeign使用。

Comments