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

1,084 阅读2分钟

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		# 建立连接后,从服务器读取可用资源所用时间