Spring Cloud【Ribbon】客户端负载均衡

微服务负载均衡器Ribbon


一、什么是Ribbon?

目前主流的负载均衡方案分为以下两种:

  • 集中式的(服务端)在消费者和服务的提供方使用独立的代理方式负载均衡(有用硬件,也有用软件nginx)
  • 客户端的根据自己的请求情况负载均衡,Ribbon就属于客户端的负载均衡

SpringCloud Ribbon 是基于Netffix Ribbon是实现的一套客户端负载均衡工具,Ribbon客户端提供了一系列的完善的配置,如超时,重试等等,通过LoadBalance获取到服务提供的所有机器的实例。Ribbon会自动地基于某种规则(轮询,随机) 去调用这些服务,Ribbon也可以自己实现自己的负载均衡算法。

1.1 客户端的负载就均衡

例如SpringCloud 中的Ribbon 客户端会有一些服务地址列表,再发送请求前通过负载均衡算法到另一个服务器,然后进行访问,这是客户端的负载均衡,
即在客户端就进行了负载均衡算法的分配
在这里插入图片描述

1.2 服务端的负载均衡

在这里插入图片描述

1.3 常见的负载均衡算法

  • 随机: Random
  • 轮询: 一个接一个 One By One
  • 加权: 在服务提供者有一个weight的概念,根据机器的性能分配不同的权重,权重高的机器高配置,低负载,用以画质各个服务器的压力
  • 地址hash: 通过客户端的地址的hash值取模后进行服务的调度, ip — > hash
  • 最小链数: 即使请求均衡了压力也不一定均衡,最小链数算法就是根据服务的情况,比如请求积压数等等参数,将请求分配到当前压力最小的服务器上,最小活跃数。

二、Nacos使用Ribbon

nacos-discovery依赖了ribbon,可以不再引入ribbon的依赖

在这里插入图片描述

2.1 具体使用

  1. 需要加上一个配置注解@LoadBalanced实现负载均衡
@Bean
@LoadBalanced
public RestTemplate restTemplate(RestTemplateBuilder builder){
	// 剋以进行连接超时的设置
	builder.setConnectTimeout(3000);
	RestTemplate restTemplate = builder.build();
	return restTemplate();
}
  1. 在控制层上
@AutoWired
private RestTemplate restTemplate;

@RequestMapping("/findOrderByUserId/{id}")
public R findOrderById(@PathVariable("id") Integer id){
	String url = "http://mall-order/order/findOrderById/"+id;
	R result = restTemplate.getForObject(url,R.class);
	return result;
}

可以写在配置类中,也可以直接写在启动类上。

三、Ribon内核原理

3.1 Ribbon负载均衡策略

在这里插入图片描述
Ribbon的负载均衡策略:
在这里插入图片描述

3.1.1 修改默认的负载均衡策略

全局配置: 调用其他服务,一律使用指定的负载均衡策略

例如使用nacos的集群负载均衡
在这里插入图片描述

@Configuration
public class RibbonConfig(){
	/**
	* 全局配置
	*指定负载均衡策略 
	*@return
	*/
	@Bean
	public IRule iRule(){
		// 指定使用nacos的提供负载均衡策略(优先调用统一集群上的实例,基于随机权重)
		return new NacosRule();
	}
}

这里返回IRule的类,原因是所有的负载均衡策略都有一个公共的父接口就是IRule,所以返回后,可以使用任何一种负载均衡策略。

局部配置:调用指定的微服务的服务提供者提供的服务,使用对应的负载均衡算法

修改application.yml

# 被调用的微服务名称
mall-servicce:
	ribbon:
		# 只当使用Nacos的负载均衡策略,
		NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

最后还要再启动类上加上ribbonClients的注解


🔥🔥 注意:此操作实在服务的消费端实现

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@WAT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值