Ribbon负载均衡的使用方式(与Eurka配合使用)

1.负载均衡

    负载均衡是对系统的高可用、网络压力的缓解和处理能力扩容的重要手段之一。

2.服务器端负载均衡和客户端负载均衡

    1)服务器端负载均衡

        我们通常所说的负载均衡都是指服务器端的负载均衡,其分为硬件和软件负载均衡方式。

        * 硬件负载均衡:通过在服务器节点之间专门安装用于负载均衡的设备,比如F5等。

        * 软件负载均衡:通过在服务器上安装一些具有均衡负载功能或模块的软件阿里完成请求分发工作,比如Nginx等

    2)客户端负载均衡

        与服务器端负载均衡最大不同在于服务清单所存储的位置。

        * 服务器端负载均衡中,硬件或软件设备都会维护一个下挂可用的服务器清单列表,通过心跳检测来剔除故障的服务端节点以保证清单中都是可以正常我访问的节点

        * 客户端负载均衡中,所有客户端节点都要维护着自己要访问的服务端清单列表。而这些服务端的清单来自于服务注册中心。通过心跳来维护服务端清单健康需要服务注册中心配合完成。

引入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集群配置:

eureka:
  client:
    register-with-eureka: false
    service-url: 
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/

ConfigBean配置类修改:

1、修改RestTemplate 添加@LoadBalanced 开启负载均衡

2、新增定义Ribbon方法负载均衡策略:

@Bean
	public IRule muRule() {
		// return new RoundRobinRule();//轮询
		return new RandomRule();// 随机
	}

简单的负载均衡配置完毕,下面放置ConfigBean完整代码

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;

@Configuration
public class ConfigBean {

	@Bean
	@LoadBalanced // ribbon负载均衡
	public RestTemplate getRestTemplate() {
		return new RestTemplate();
	}

	@Bean
	public IRule muRule() {
		// return new RoundRobinRule();//轮询
		return new RandomRule();// 随机
	}
}

Ribbon自带七种负载均衡策略介绍:

策略名策略声明策略描述实现说明
BestAvailableRulepublic class BestAvailableRule extends ClientConfigEnabledRoundRobinRule选择一个最小的并发请求的server逐个考察Server,如果Server被tripped了,则忽略,在选择其中ActiveRequestsCount最小的server
AvailabilityFilteringRulepublic class AvailabilityFilteringRule extends PredicateBasedRule过滤掉那些因为一直连接失败的被标记为circuit tripped的后端server,并过滤掉那些高并发的的后端server(active connections 超过配置的阈值)使用一个AvailabilityPredicate来包含过滤server的逻辑,其实就就是检查status里记录的各个server的运行状态
WeightedResponseTimeRulepublic class WeightedResponseTimeRule extends RoundRobinRule根据相应时间分配一个weight,相应时间越长,weight越小,被选中的可能性越低。一个后台线程定期的从status里面读取评价响应时间,为每个server计算一个weight。Weight的计算也比较简单responsetime 减去每个server自己平均的responsetime是server的权重。当刚开始运行,没有形成statas时,使用roubine策略选择server。
RetryRulepublic class RetryRule extends AbstractLoadBalancerRule对选定的负载均衡策略机上重试机制。在一个配置时间段内当选择server不成功,则一直尝试使用subRule的方式选择一个可用的server
RoundRobinRulepublic class RoundRobinRule extends AbstractLoadBalancerRuleroundRobin方式轮询选择server轮询index,选择index对应位置的server
RandomRulepublic class RandomRule extends AbstractLoadBalancerRule随机选择一个server在index上随机,选择index对应位置的server
ZoneAvoidanceRulepublic class ZoneAvoidanceRule extends PredicateBasedRule复合判断server所在区域的性能和server的可用性选择server使用ZoneAvoidancePredicate和AvailabilityPredicate来判断是否选择某个server,前一个判断判定一个zone的运行性能是否可用,剔除不可用的zone(的所有server),AvailabilityPredicate用于过滤掉连接数过多的Server。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值