spring cloud(2)----负载均衡 Ribbon

在spring cloud中使用负载均衡非常简单

1.服务提供者只需要启动多个服务实力并注册到一个注册中心或是多个相关联的服务注册中心

2.服务消费者直接通过调用被@LoadBalanced注解秀试过的RestTemplate来实现面向服务的接口调用

 

RestTemplate详解

GET请求

1.getForEntity函数,该方法返回的是ResponseEntity

RestTemplate restTemplate = new RestTemplate();

ResponseEntity<String> response = restTemplate.getForEntity("http://SERVICE-HI/user?name={1}",String.class,"didi");

String body = response.getBody();

*didi会替换掉占位符{1},返回的body是一个String类型

2.

RestTemplate restTemplate = new RestTemplate();

ResponseEntity<User> response = restTemplate.getForEntity("http://SERVICE-HI/user?name={1}",User.class,"didi");

User body = response.getBody();

*直接指定一个实体类

但实际上,getForEntity提供了三种重载方法,这里不做详细介绍,有兴趣的可以看一下源码

POST请求

1.post请求其实和get请求类似

RestTemplate restTemplate = new RestTemplate();

ResponseEntity<String> response = restTemplate.postForEntity("http://SERVICE-HI/user?name={1}",String.class,"didi");

String body = response.getBody();

post也是提供了三种重载方法

负载均衡策略

AbstractLoadBalancerRule

负载均衡策略的抽象类,在该类中定义了负载均衡器ILoadBalancer对象,该对象能够在具体实现选择服务策略时,获取到一些负载均衡器中维护的信息来作为分配依据

RandomRule

该策略实现了从服务实例清单中随机选择一个服务实例的功能。

RoundRobinRule

该策略实现了按照现行轮询的方式一次选择每个服务实例的功能

RetryRule

该策略实现了一个具备重试机制的实例选择功能

WeightedResponseTimeRule

该实例是对RoundRobinRule的扩展,增加了根据实例运行情况来计算权重,并根据权重来挑选实例,以达到更优的分配效果。

ClientConfigEnabledRoundRobinRule

该策略较为特殊,我们一般不直接使用它,因为它本身并没有实现什么特殊的处理逻辑,在他的内部定义了一个RoundRobinRule策略,而choose函数的实现也正是使用了RoundRobinRule的线性轮询机制,虽然我们不会直接使用该函数,但是通过集成该策略,默认的choose就实现了线性轮询机制,在自雷中做一些高级策略时通常有可能会存在一些无法实施的情况,那么就可以用父类的实现作为备选,所以一般是用来作为高级策略的父类。

BestAvailableRule

该策略继承自ClientConfigEnabledRoundRobinRule,在实现中它注入了负载均衡的统计对象LoadBalancerStats,同事在具体的choose算法中利用LoadBalancerStats保存的实例统计信息来选择满足要求的实例。

PredicateBasedRule

该实例会先通过自雷中实现的Predicate逻辑来过滤一部分服务实例,然后在以现行轮询的方式从过滤厚的实例清单中选出一个

AvailabilityFilteringRule

该策略继承PredicateBasedRule,会使用AvailabilityPredicate来进行过滤

ZoneAvoidanceRule

该策略同样集成了PredicateBasedRule,但是是一个组合过滤以ZoneAvoidancePredicate过滤为主,AvailabilityPredicate为辅

自动化配置

IClientConfig:Ribbon的客户端配置,默认采用DefaultClientConfigImpl实现

IRUlead:Ribbon的负载均衡策略,默认采用ZoneAvoidanceRule实现,该策略能够在多区域环境下选出最截取与的实例

Iping:Ribbon的实例检查策略,默认采用NoOpPing实现,该检查策略是一个特殊的实现,实际上它并不会检查实例是否可用,而是始终返回true,默认认为所有服务实例都是可用的

ServerList<Server> 服务实例清单过滤机制,默认采用ZonePreFernceServerListFilter实现,该策略能够优先过滤出与请求调用方处于同区域的服务实例

ILoadBalancer:负载均衡器,默认采用ZoneAwareLoadBalancer实现,它具备了区域感知的能力

示例:

如下面的配置内容,由于创建了PingUrl实例,所以默认的NoOpPing就不会被创建

@Configuration
public class MyRibbonConfiguration{
    @Bean
    public Iping ribbonPing(IClientConfig config){
        return new PingUrl();
    }
}

但其实Ribbon还有很多知识可以学习,比如是如何获取服务列表,如何选择哪个服务,选择的规则等等,这里就懒得写啦

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值