3.Ribbon

发布时间 2023-05-25 13:06:15作者: 22-10-21

4.Ribbon

4.1.简介

SpringCloudRibbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于NetflixRibbon实现,通过SpringCloud的封装,可以让我们轻松地将面向服务的 REST模版请求自动转换成客户端负载均衡的服务调用。

Ribbon主要功能是提供客户端负载均衡算法和服务调用

Ribbon客户端组件提供了一套完善的配置项,比如连接超时,重试等。

SpringCloud构建的微服务系统中,Ribbon作为服务消费者的负载均衡器,有两种使用方式,一种是和RestTemplate相结合,另一种是和OpenFeign相结合。

OpenFeign已经默认集成了RibbonRibbon有很多子模块,但很多模块没有用于生产环境!

https://docs.spring.io/spring-framework/docs/current/reference/html/integration.html#spring-integration

4.2.负载均衡

负载均衡(LoadBalance LB

http:// -> http协议

lb:// -> 负载均衡协议

指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如Web服务器、 企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。

负载均衡构建在原有网络结构之上,它提供了一种透明且廉价有效的方法扩展服务器和网络设 备的带宽、加强网络数据处理能力、增加吞吐量、提高网络的可用性和灵活性。

4.3.快速入门

image-20230524224900458

4.3.1.项目搭建

consumer、provider-1、provider-2

provider-1、provider-2的依赖为:SpringWeb、eureka-client。

consumer的依赖为:SpringWeb、eureka-client以及ribbon。

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
	<version>2.2.9.RELEASE</version>
</dependency>

4.3.2.provider-1和provider-2

image-20230524225239584

①pom.xml

image-20230524225322667

②修改启动类

image-20230524225505516

③编写controller类

image-20230524233319384

④编写配置类

image-20230524225908622

4.3.3.consumer

①pom.xml

e

②修改启动类

image-20230524230253202

③编写controller类

image-20230524233337592

④编写配置类

image-20230524233359937

4.3.4.访问测试

http://localhost:8003/testBalance?serviceName=provider

每一次访问都是和上一次不同的,会进行轮询

4.4.负载均衡算法

4.4.1.介绍

1.轮询(RoundRobinRule):该算法按照顺序依次将请求分配给每个服务器,直到达到总数或遇到故障。(请求次数 % 机器数量 )

2.加权轮询(WeightedResponseTimeRule):根据平均响应时间计算所有服务的权重,响应时间越快服务权重越大被选中的概率越大。刚启动时如果同统计信息不足,则使用轮询的策略,等统计信息足够会切换到自身规则。

3.最少连接(Least Connections):该算法选择当前连接数最少的服务器来处理请求。

4.源IP哈希(Source IP Hash):该算法根据客户端IP地址计算哈希值,然后将请求分配给相应的服务器。

5.随机(RandomRule):该算法随机选择一个服务器来处理请求。

6.最少响应时间(Least Response Time):该算法选择响应时间最短的服务器来处理请求。

7.一致性哈希(Consistent Hashing):该算法使用一致性哈希算法将请求分配到多个服务器上,以确保负载均衡和故障转移的高可用性。

8.AvailabilityFilteringRule --会先过滤掉由于多次访问故障处于断路器跳闸状态的服 务,还有并发的连接数量超过阈值的服务,然后对于剩余的服务列表按照轮询的策略进行访问

9.RetryRule-- 先按照轮询的策略获取服务,如果获取服务失败则在指定的时间内会进行重 试,获取可用的服务

10.BestAvailableRule --会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后 选择一个并发量小的服务

11.默认规则(ZoneAvoidanceRule):复合判断Server所在区域的性能和Server的可用行选择服务器。

4.4.2.修改

指定某一个服务使用什么算法

修改yml配置

provider: #提供者的服务名称,那么访问该服务的时候就会按照自定义的负载均衡算法
	ribbon:
		NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
#算法的全限定类名

4.5.常用配置

ribbon: #全局的设置
	eager-load:
		enabled: false # ribbon 一启动不会主动去拉取服务列表,当实际使用时才去拉取,是否立即加载
	http:
		client:
			enabled: false # 在ribbon最后要发起Http的调用调用,我们认为是RestTemplate完成的,其实最后是HttpURLConnection来完成的,这里面设置为true,可以把HttpUrlConnection设置为HttpClient
	okhttp:
		enabled: false #HttpUrlConnection来完成的,这里面设置为true,可以把HttpUrlConnection设置为OkHttpClient(也是发 http请求的,它在移动端的开发用的多)
provider: #提供者的服务名称,那么访问该服务的时候就会按照自定义的负载均衡算法
	ribbon:
		NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
#修改默认负载均衡算法,几种算法的全限定类名
# NFLoadBalancerClassName: #loadBalance 策略
# NFLoadBalancerPingClassName: #ping 机制策略
# NIWSServerListClassName: #服务列表策略
# NIWSServerListFilterClassName: #服务列表过滤策略
# ZonePreferenceServerListFilter 默认是优先过滤非一个区的服务列表法