当前位置: 首页 > 图灵资讯 > java面试题> javaSpringCloud面试题-Feign / Ribbon

javaSpringCloud面试题-Feign / Ribbon

来源:图灵教育
时间:2024-05-24 13:15:37
Feign 可以与 Eureka 和 Ribbon 组合使用以支持负载均衡;

●Feign 可以与 Hystrix 组合使用,支持熔断回退;

●Feign 可以与ProtoBuf实现快速的RPC调用;

●InvocationHandlerFactory 代理采用 JDK 的动态代理方式生成代理对象,当我们调用这个接口,实际上是要去调用远程的 HTTP API;

●Contract 契约组件比如请求类型是 GET 还是 POST,请求的 URI 是什么;

●Encoder 编码组件 \ Decoder 解码组件通过该组件我们可以将请求信息采用指定的编码方式进行编解码后传输;

●Logger 日志记录负责 Feign 中记录日志的,可以指定 Logger 的级别以及自定义日志的输出;

●Client 请求执行组件负责 HTTP 请求执行的组件,Feign 中默认的 Client 是通过 JDK 的 HttpURLConnection 来发起请求的,在每次发送请求的时候,都会创建新的 HttpURLConnection 链接,Feign 的性能会很差,可以通过扩展该接口,使用 Apache HttpClient 等基于连接池的高性能 HTTP 客户端。

●Retryer 重试组件负责重试的组件,Feign 内置了重试器,当 HTTP 请求出现 IO 异常时,Feign 会限定一个最大重试次数来进行重试操作。

●RequestInterceptor 请求拦截器可以为 Feign 添加多个拦截器,在请求执行前设置一些扩展的参数信息。

Feign最佳使用技巧

●继承特性

●拦截器比如添加指定的请求头信息,这个可以用在服务间传递某些信息的时候。

●GET 请求多参数传递

●日志配置FULL 会输出全部完整的请求信息。

●异常解码器异常解码器中可以获取异常信息,而不是简单的一个code,然后转换成对应的异常对象返回。

●源码查看是如何继承HystrixHystrixFeign.builder 中可以看到继承了 Feign 的 Builder,增加了 Hystrix的SetterFactory, build 方法里,对 invocationHandlerFactory 进行了重写, create 的时候返回HystrixInvocationHandler, 在 invoke 的时候会将请求包装成 HystrixCommand 去执行,这里就自然的集成了 Hystrix。

Ribbon

使用方式

●原生 API,Ribbon 是 Netflix 开源的,没有使用 Spring Cloud,需要使用 Ribbon 的原生 API;

●Ribbon + RestTemplate,整合Spring Cloud 后,可以基于 RestTemplate 提供负载均衡的服务;

●Ribbon + Feign;

负载均衡算法

●RoundRobinRule 是轮询的算法,A和B轮流选择。

●RandomRule 是随机算法,这个就比较简单了,在服务列表中随机选取。

●BestAvailableRule 选择一个最小的并发请求 server。

自定义负载均衡算法

●实现 Irule 接口

●继承 AbstractLoadBalancerRule 类

自定义负载均衡使用场景(核心)

●灰度发布灰度发布是能够平滑过渡的一种发布方式,在发布过程中,先发布一部分应用,让指定的用户使用刚发布的应用,等到测试没有问题后,再将其他的全部应用发布。如果新发布的有问题,只需要将这部分恢复即可,不用恢复所有的应用。

●多版本隔离多版本隔离跟灰度发布类似,为了兼容或者过度,某些应用会有多个版本,这个时候如何保证 1.0 版本的客户端不会调用到 1.1 版本的服务,就是我们需要考虑的问题。

●故障隔离当线上某个实例发生故障后,为了不影响用户,我们一般都会先留存证据,比如:线程信息、JVM 信息等,然后将这个实例重启或直接停止。然后线下根据一些信息分析故障原因,如果我能做到故障隔离,就可以直接将出问题的实例隔离,不让正常的用户请求访问到这个出问题的实例,只让指定的用户访问,这样就可以单独用特定的用户来对这个出问题的实例进行测试、故障分析等。