写点什么

微服务服务治理之负载均衡实践:使用 Ribbon 和 Feign 实现负载均衡详解

发布于: 2021 年 04 月 28 日
微服务服务治理之负载均衡实践:使用Ribbon和Feign实现负载均衡详解

Ribbon 负载均衡

Ribbon 与 Nginx 的区别

  • 客户端负载均衡 Ribbbon:

  • Ribbon 是从 Eureka 注册中心服务器上获取注册信息列表,缓存到本地, 然后在本地实现轮询负载均衡策略.即在客户端实现负载均衡.

  • 服务端负载均衡 Nginx:

  • Ngnix 是客户端所有请求统一交给 Nginx,由 Nginx 实现负载均衡请求转发,属于服务器端负载均衡.即请求由 Nginx 服务器端进行转发.

  • 应用场景的区别:

  • Nginx 适用服务器端实现负载均衡:Tomcat,Jetty

  • Ribbon 适用于在微服务中 RPC 远程调用实现本地负载均衡:Dubbo,SpringCloud

Ribbon 负载均衡的底层实现

  • Ribbon 负载均衡:

  • 客户端从 Eureka 注册中心获取对应的注册信息列表,获取到注册信息列表后,缓存到本地,然后在本地实现负载均衡.即负载均衡是由客户端实现的.

  • 负载均衡算法:

  • 接口的总请求数取模服务器数得到实际的服务器下标(从 0 开始)获取到服务器调用服务

  • 实现:

  • 获取对应服务器的远程调用地址:DiscoveryClient


  List<ServiceInstance> instances=discoveryClient.getInstance("eureka_ticket");
复制代码


  • 使用 rest 方式发送请求使用远程调用


   String result=restTemplate.getForObject(instanceUrl,String.class);
复制代码

Feign

  • SpringCloud 中支持两种客户端调用工具:

  • Rest(RestTemplate 模板)

  • Feign

  • Feign 是声明式 Http 客户端调用工具,采用接口+注解方式实现,易读性强.


Feign客户端书写是以SpringMVC接口形式书写的
@FeignClient(name="服务别名")@FeignClient调用服务接口(name:服务名称)
在主类上标注@EnableFeignClients注解开启Feign权限
复制代码


微服务项目目录结构:parent: 存放共同的依赖信息api-service: 所有服务的接口ticket-service: 特定服务的接口ticket-serviceImpl: 特定服务的实现实体类和定义接口信息存放在接口包里在特定服务中的参数前面要标注@RequestParam("xx"),这样参数才会被接收
复制代码

Feign 客户端超时时间设置

设置Feign客户端超时时间ribbon.connectTime=5000    # 建立连接所用时间,两端连接所用时间ribbon.ReadTimeout=5000    # 建立连接后,从服务器读取可用资源所用时间
复制代码


发布于: 2021 年 04 月 28 日阅读数: 30
用户头像

一位攻城狮的自我修养 2021.04.06 加入

分享技术干货,面试题和攻城狮故事。 你的关注支持是我持续进步的最大动力! https://github.com/ChovaVea

评论

发布
暂无评论
微服务服务治理之负载均衡实践:使用Ribbon和Feign实现负载均衡详解