Ribbon负载均衡

 

Ribbon的概述

SpringCloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具。

 

简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算法。

Ribbon干什么(LB)

LB,即负载均衡(Load Balance),在微服务或分布式集群中经常用的一种应用。

负载均衡简单的说就是将用户的请求平摊的分配到多个服务上,从而达到系统的HA(高可用)。

常见的负载均衡软件有:Nginx,LVS,硬件F5等。

相应的在中间件,例如:dubbo和SpringCloud中均给我们提供了负载均衡,SpringCloud的负载均衡算法可以自定义

 

常用的负载均衡有两种:

  • 集中式LB:偏硬件 常见的有(F5,和Nginx软件) 常见的Nginx就是消费方 区调用服务 由Nginx决定请求该调用谁
  • 进程内LB:偏软件 常见的有(Ribbon) 而Ribbon就是比如你去排队点餐他会通过负载算法让你知道那边排队人少,完之后你去那边点餐

Ribbon的配置,等等等等代码就不写了,我把我的GitHub地址扔出来有兴趣的down下来自己看看

本人搭建的demo地址:https://blog.csdn.net/qq_41453424/article/details/102972233

在消费者pom加入microservicecloud-consumer-dept-80
<!-- Ribbon相关 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-ribbon</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-config</artifactId>
		</dependency>
  
  修改yml
  eureka:
 client:
  register-with-eureka: false #false表示不向注册中心注册自己
  service-url: 
    defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
    
 

 

小结:Ribbon和Eureka整合后Consumer可以直接调用服务而不用在关心地址和端口号了

 

Ribbon负载均衡算法

 

Ribbon在工作时分成两步

第一步选择EurekaServer,它优先选择在同一个区域内负载较少的Server。

第二步再根据用户指定的策略,在从Server取到的服务注册列表中选择一个地址。

 

 

总结:Ribbon其实就是一个软负载均衡的客户端组件,它可以和其他所需请求的客户端结合使用,和Eureka结合只是其中的一个实例。

总的来说SpringCloud还是很牛逼的,通过一个@LoadBalanced注解就能达到负载均衡!(默认轮询方式一个服务提供者一次)

 

Ribbon的核心组件IRule

IRule:根据特定算法中从服务列表中选取一个要访问的服务,默认带着七中负载算法如下

 

  1. RoundRobinRule:轮询
  2. RandomRule:随机
  3. AvailabilityFilteringRule:会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,还有并发的连接数量超过阈值的服务,然后对剩余的服务列表按照轮询策略进行访问
  4. WeighedResponseTimeRule:根据平均响应时间计算所有服务的权重,响应时间越快服务权重越大....
  5. RetryRule:先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内会进行重试
  6. BestAvailableRule:会过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的微服务
  7. ZoneAvoidanceRule:默认规则,复合判断server所在区域的性能和server的可用性选择服务器
package com.atguigu.springcloud.cfgbeans;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import com.netflix.loadbalancer.RetryRule;

@Configuration
public class ConfigBean {//boot -->spring aaplicationContext.xml --@Configuration配置 ConfigBean = applicationContext.xml
	@Bean
	@LoadBalanced//SpringCloud Ribbon是基于Netflix Ribbon实现的一套客户端 +负载均衡的工具。
	public RestTemplate getRestTemplate() {
		return new RestTemplate();
	}
	@Bean
	public IRule myRule() {
//		return new RandomRule();//这一步就是替换Ribbon默认的轮询算法,改为随机算法负载
		return new RetryRule();//再试试这个算法,如果其中一台服务死了,将不再轮询那个服务
	}
}
/*@Bean
public UserService getUserService() {
	return new UserSericeImpl();
}*/
//applicationContext.xml  == ConfigBean(@Configuration)
//<bean id="uerService" class="com.atguigu.tmall.UserServiceImpl">

补充:Ribbon默认的负载策略就是选用的RoundRobinRule(轮询),它的底层源码就是挨个访问nextserver

 

包括自己写负载算法等等,我都在GitHub上分享了自己的联系代码

//在启动该微服务的时候就能去加载我们的自定义Ribbon配置类,从而使配置生效,形如:

@RibbonClient(name="MICROSERVICECLOUD-DEPT",configuration=MySelfRule.class)

GitHub地址:https://github.com/songhaiboGitHub/SpringCloud

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值