Feign 是如何实现负载均衡的?
Feign 是如何实现负载均衡的?
回答重点
Feign是一个声明式的Http客户端调用工具,它使得开发者可以更加方便地调用远程服务。
开发者只需要定义一个接口,并不需要写关于如何发送Http请求的代码。
Feign 本身并没有负载均衡的能力,它负载均衡的能力需要依赖其它的框架。
目前在 SpringCloud 体系下,主要有两个框架可以配合 Feign 实现负载均衡:
- Ribbon
- loadbalancer
Ribbon 也是最开始配合 Feign 实现负载均衡的框架。
loadbalancer 是 SpringCloud 团队自己写的,主要是因为 Ribbon 后面停止维护了,所以 SpringCloud 团队写了一个 loadbalancer 来替代 Ribbon。
扩展内容
Ribbon 如何得知服务实例的数据?
答案其实很简单,那就是需要注册中心去主动适配Ribbon,只要注册中心去适配了Ribbon,那么Ribbon自然而然就知道服务实例的数据了。
Ribbon提供了一个获取服务实例的接口,叫ServerList:
接口中提供了两个方法,这两个方法在众多的实现中实际是一样的,并没有区别。
当Ribbon通过ServerList获取到服务实例数据之后,会基于这些数据来做负载均衡的。
Nacos自然而然也实现了ServerList接口,为Ribbon提供Nacos注册中心中的服务数据。
这样,Ribbon就能获取到了Nacos服务注册中心的数据。
同样地,除了Nacos之外,Eureka、Zookeeper等注册中心也都实现了这个接口。
对于loadbalancer来说,其实也是这种模式,需要不同的注册中心去适配,这样也就可以获取到服务注册中心的服务实例信息了。
之后Ribbon或者loadbalancer是就可以通过获取到的服务实例信息进行负载均衡了选择一个供OpenFeign使用。
Comments