四.负载均衡进阶之Ribbon和Feign实战
ribbon服务间调用负载均衡源码分析
AlibabaCloud负载均衡策略略调整
- Ribbon支持的负载均衡策略介绍
策略类 | 命名 | 描述 |
---|---|---|
RandomRule | 随机策略 | 随机选择server |
RoundRobinRule | 轮询策略 | 按照顺序选择server(默认) |
RetryRule | 重试策略 | 当选择server不成功,短期内尝试选择一个可用的server |
AvailabilityFilteringRule | 可用过滤策略 | 过滤掉一直失败并被标记为circuit tripped的server,过滤掉那些高并发链接的server(active connections超过配置的阈值) |
WeightedResponseTimeRule | 响应时间加权重策略 | 根据server的响应时间分配权重,以响应时间作为权重,响应时间越短的服务器被选中的概率越大,综合了各种因素,比如:网络,磁盘,io等,都直接影响响应时间 |
ZoneAvoidanceRule | 区域权重策略 | 综合判断server所在区域的性能,和server的可用性,轮询选择server |
- 负载均衡策略调整实战
#订单服务增加配置
yuan-video-service:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
策略选择:
1、如果每个机器配置一样,则建议不修改策略 (推荐)
2、如果部分机器配置强,则可以改为 WeightedResponseTimeRule
微服务新一代负载均衡组件Open-Feign介绍
原先ribbon
代码存在的问题
:不规范,风格不统一,维护性比较差
什么是Feign
SpringCloud提供的伪http客户端(本质还是用http),封装了Http调用流程,更适合面向接口化,让用Java接口注解的方式调用Http请求。不用像Ribbon中通过封装HTTP请求报文的方式调用
Feign默认集成了Ribbon
Nacos支持Feign,可以直接集成实现负载均衡的效果
集成Open-Feign实现远程方法调用
Feign让方法调用更加解耦
使用feign步骤讲解:
- 加入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
- 配置注解: 启动类增加
@EnableFeignClients
- 增加一个接口:@FeignClient(name="yuan-video-service") (服务名称要和nacos保持一样)
- 编写代码:
java
@GetMapping(value = "/api/v1/video/find_by_id")
Video findById(@RequestParam("videoId") int videoId)
post方式对象传输Open-Feign实现远程方法调用
GET方式查询简单,POST方式提交如下:
//订单服务这边
@PostMapping(value = "/api/v1/video/save")
Video saveVideo(@RequestBody Video video);
@PostMapping("save")
public Object save(@RequestBody Video video){
System.out.println(video.getTitle());
return video;
}
注意:路径核对;Http方法必须对应;使用服务提供方用@RequestBody,要使用@PostMapping
Ribbon和feign两个的区别和选择:
选择feign;默认集成了ribbon;写起来更加思路清晰和方便;采用注解方式进行配置,配置熔断等方式方便
评论区