Version: Next

Ribbon 概述

认识Ribbon

  • Spring Cloud Ribbon 是基于 Netfix Ribbon 实现的一套 客户端 负载均衡 工具
  • RibbonNetfix 发布的开源项目,主要功能是 客户端的软件负载均衡算法和服务调用
  • Ribbon 客户端组件提供一些列完善的配置项,如 连接超时重试
  • 在配置文件中列出 Load Balancer (aka LB) 后面所有的机器,Ribbon 会自动基于某种负载均衡规则 (如简单轮询、随机连接等)连接这些机器
  • 开发人员很容易使用 Ribbon 实现自定义的负载均衡算法

负载均衡

Load Balance 负载均衡

  • 将用户的请求平摊分配到多个服务上,从而达到系统的 HA (高可用)
  • 常见的负载均衡软件:NginxLVS;硬件:F5

本地负载均衡(进程内LB) VS 服务端负载均衡(集中式LB)

  • 集中式LB:在服务的消费方和提供方之间使用独立的 LB 设施(硬件、软件),由该设施负责把访问请求通过某种策略发送至服务提供方
    • Nginx 是服务端负载均衡:客户端所有请求都交给 Nginx,然后又 Nginx 实现请求转发。即负载均衡是由服务端实现的
  • 进程内LB:将负载均衡逻辑集成到消费方,消费方从服务注册中心获知哪些地址可用,然后自己从这些地址中选出一个合适的服务器进行 RPC
    • Ribbon 是本地负载均衡:在调用微服务接口的时候,会在注册中心上获取注册信息服务列表,然后将其缓存到 JVM 本地,从而在本地实现 RPC 远程服务调用

Ribbon 的一句话解释

  • 负载均衡 LB + RestTemplate 调用

Ribbon 的使用

Ribbon 是一个软负载均衡的客户端组件

  • 可以与其他所需请求的客户端结合使用,和 Eureka 结合知识其中一种实现方式
  • Ribbon 集成到 consumer 微服务中,查询注册中心中的可用主机,然后在本地决定合适的 RPC 对象

Ribbon 的工作步骤

  1. 选择合适的 Eureka Server(注册中心),它优先选择在同一个区域内负载较少的 server
  2. 根据用户的指定负载均衡策略,再从 Eureka Server 取到的服务列表选取一个合适的地址,进行远程服务调用

Ribbon 提供了多种负载均衡策略:轮询、随机、根据响应时间加权

为什么先前没有导入 Ribbon 的Maven坐标也能使用负载均衡功能?

  • 因为现在的 Eureka Client 组件已经默认包含了 Ribbon,之前在 Order80 微服务中,已经使用了 Eureka Client,因此它可以使用 Ribbon 的负载均衡

    <!--eureka client-->
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>

RestTemplate

getForObjectgetForEntity 方法

  • xxxObject方法:返回对象为 响应体 中数据转化成的对象,基本上可以理解为 JSON
  • xxxEntity方法:返回对象为 ResponseEntity 对象,包含了响应中的重要信息,如 响应头响应状态码响应体

order80Controller 中添加一个使用 getForEntity 的方法

@GetMapping("/consumer/payment/getForEntity/{id}")
public CommonResult<Payment> getPayment2(@PathVariable("id") Long id) {
ResponseEntity<CommonResult> entity = restTemplate.getForEntity(PAYMENT_URL + "/payment/get/" + id, CommonResult.class);
if (entity.getStatusCode().is2xxSuccessful()) // 如果是 200 系列响应码
return entity.getBody(); // 返回请求体
else
return new CommonResult<>(444, "获取失败");
}
  • 测一下,访问 http://127.0.0.1:80/consumer/payment/getForEntity/4