Version: Next
Ribbon 概述
认识Ribbon
- Spring Cloud Ribbon 是基于 Netfix Ribbon 实现的一套
客户端 负载均衡
工具Ribbon
是Netfix
发布的开源项目,主要功能是 客户端的软件负载均衡算法和服务调用Ribbon
客户端组件提供一些列完善的配置项,如 连接超时、重试 等- 在配置文件中列出
Load Balancer
(akaLB
) 后面所有的机器,Ribbon 会自动基于某种负载均衡规则 (如简单轮询、随机连接等)连接这些机器- 开发人员很容易使用
Ribbon
实现自定义的负载均衡算法
负载均衡
Load Balance 负载均衡
- 将用户的请求平摊分配到多个服务上,从而达到系统的 HA (高可用)
- 常见的负载均衡软件:
Nginx
、LVS
;硬件:F5
等
本地负载均衡(进程内LB) VS 服务端负载均衡(集中式LB)
- 集中式LB:在服务的消费方和提供方之间使用独立的 LB 设施(硬件、软件),由该设施负责把访问请求通过某种策略发送至服务提供方
Nginx
是服务端负载均衡:客户端所有请求都交给 Nginx,然后又 Nginx 实现请求转发。即负载均衡是由服务端实现的- 进程内LB:将负载均衡逻辑集成到消费方,消费方从服务注册中心获知哪些地址可用,然后自己从这些地址中选出一个合适的服务器进行 RPC
Ribbon
是本地负载均衡:在调用微服务接口的时候,会在注册中心上获取注册信息服务列表,然后将其缓存到 JVM 本地,从而在本地实现 RPC 远程服务调用
Ribbon 的一句话解释
负载均衡 LB
+RestTemplate 调用
Ribbon 的使用
Ribbon 是一个软负载均衡的客户端组件
- 可以与其他所需请求的客户端结合使用,和 Eureka 结合知识其中一种实现方式
- 把
Ribbon
集成到consumer
微服务中,查询注册中心中的可用主机,然后在本地决定合适的 RPC 对象
Ribbon 的工作步骤
- 选择合适的
Eureka Server
(注册中心),它优先选择在同一个区域内负载较少的 server- 根据用户的指定负载均衡策略,再从
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
getForObject
与getForEntity
方法
xxxObject
方法:返回对象为响应体
中数据转化成的对象,基本上可以理解为JSON
xxxEntity
方法:返回对象为ResponseEntity
对象,包含了响应中的重要信息,如响应头
、响应状态码
、响应体
等
在
order80
的Controller
中添加一个使用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(); // 返回请求体elsereturn new CommonResult<>(444, "获取失败");}
- 测一下,访问
http://127.0.0.1:80/consumer/payment/getForEntity/4