请解释 Feign 在微服务架构中实现负载均衡的原理与流程。
考察说明
考查对 Feign 与负载均衡整合机制的理解,包括动态服务发现和请求分发。
回答思路
- 【回答框架 1】Feign 本身是声明式 HTTP 客户端,通过接口定义远程调用,底层默认使用 Ribbon 或 Spring Cloud LoadBalancer 实现客户端负载均衡。
- 【回答框架 2】当 Feign 接口方法被调用时,会基于服务名从注册中心获取服务实例列表,然后通过负载均衡策略选择一个实例,将请求转发到该实例的 URL。
- 【回答框架 3】负载均衡策略包括轮询、随机、权重等,默认是轮询。这些策略可以在配置文件中调整。
- 【回答框架 4】Feign 与 Ribbon 整合时,Ribbon 拦截 Feign 的请求,替换主机名为具体实例地址。若使用 Spring Cloud LoadBalancer,则通过 LoadBalancerClient 实现。
- 【关键点 1】Feign 通过服务名发现实例列表,再通过负载均衡算法选择目标实例。
- 【关键点 2】默认负载均衡策略是轮询,可通过配置修改。
- 【关键点 3】Feign 的负载均衡是客户端负载均衡,区别于 Nginx 的服务端负载均衡。
- 【易错点 1】不要混淆 Feign 与负载均衡,Feign 只是客户端,负载均衡由 Ribbon 或 LoadBalancer 实现。
- 【易错点 2】若未配置注册中心,Feign 无法获取实例列表,负载均衡会失效。