负责均衡-手写简单的负载均衡和ribbon介绍

服务器负载均衡就是

nignx

客户端负载均衡

客户端负责,负载均衡规则,从服务列表里面选择具体的服务实例。

从nacos服务发现组件上,利用简单的随机负载均衡算法来获取服务地址。

List instances = discoveryClient.getInstances("pay");
List targerUrls = instances.stream().map(instance->instance.getUri().toString()+"/test")
.collect(Collectors.toList());
int i= ThreadLocalRandom.current().nextInt(targerUrls.size());
log.info("请求目标地址:"+targerUrls.get(i));
return restTemplate.getForObject(targerUrls.get(i),String.class);

使用ribbon实现负载均衡
ribbon是一个netflix开源的实现负载均衡的组件,
集成方式
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
return restTemplate.getForObject("http://pay/test",String.class);
pay是服务名称
ribbon 提供的自定义接口
接口                             作用                             默认值                                    
IClientConfig 读取配置 DefaultClientConfigImpl
IRule  负载均衡规则,选择实例  ZoneAvoidanceRule
IPing 筛选Ping不通的实例  DummyPing 
ServerList 交给Ribbon的实例列表  Ribbon:ConfigurationBasedServerList,Spring Cloud Alibaba :NacosServerList 
ServerListFilter 过滤掉不符合条件的实例   ZonePreferenceServerListFilter
ILoadBalancer Ribbon的入口 ZoneAwareLoadBalancer
ServerListUpdater 更新交给Ribbon的List的策略 PollingServerListUpdater

 

 

 

 

 

ribbon 提供的默认负载均衡规则

规则名称 特点
AvailabilityFilteringRule  过滤掉一直连接失败的被标记为circuit tripped的后端server,并过滤掉那些高并发的后端server或者使用一个AvailabilityPredicate来包含过滤server的逻辑,其实就是检查status里面记录的各个server的运行状态
BestAvailableRule 选择一个最小的并发请求的server,逐个考察server,如果server被tripped了,跳过
RandomRule 随机选择一个server
ResponseTimeWeightedRule 已废弃,作用同WeightedResponseTimeRule
RetryRule   对选定的负载均衡策略机上重试机制,在一个配置时间段内当选择server不成功,则一直尝试使用subRule的方式选择一个可用的server
RoundRobinRule 轮询选择,轮询index,选择index对应位置的server
WeightedResponseTimeRule 根据响应时间加权,响应时间越长,权重越小,被选中的可能性低
ZoneAvoidanceRule 复合判断server所zone的性能和server的可用选择性选择server,在没有zone的环境下,类似于轮询RoundRobinRule

 

你可能感兴趣的:(负责均衡-手写简单的负载均衡和ribbon介绍)