值得一看,ribbon装配调用过程

Ribbon的工作

ribbon是用来进行客户端负载均衡的工具,client从eurekaServer将所有的服务信息拉取到本地,然后ribbon根据role来选择调用的client。发现很多新入手的同学容易把ribbon和RestTemplete搞混,大家需要理解ribbon只是一个选择器,他只是帮助RestTemplete选择调用的节点而已,真正调用服务的还是RestTemplate。

ribbon调用图解

image
更正下上图的错误 我们缓存map是在com.netflix.discovery.shared.Applications里 错误写成Application了。
上面的图解是直接使用restTempate进行请求,需要主要注意的是我们的RestTemplate需要 @LoadBalanced进行修饰,这样才会调用到我们的LoadBalance拦截器。

    @Autowired
    RestTemplate restTemplate;

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder){
        return restTemplateBuilder.build();
    }

ribbon中有四个对象比较重要:

  • ILoadBalancer。这个就是我们使用的lb,通过自定义lb的规则可以选择出来我们可以调用的一组服务器地址。例如ZoneAwareLoadBalancer,这个lb会选择出来最合适的zone,假如北京一个机房、上海一个机房,而你正好在北京调用的话会优先选择北京地区的一组服务。
  • IRule。从名字看来他就是一个“rule”,用来从lb中选择一个合适的服务进行调用,主要不要跟lb弄混了。lb是从整个eureka中选择一组服务,rule再从这一组服务中进行选择。
  • ServerListUpdater。服务列表更新器,默认实现是DynamicServerListLoadBalancer,每隔一段时间便会更新一下lb中的serverList。
  • IPing。主要是定义了我们使用什么规则进行ping操作,来检查服务的存活。我们不仅可以用它来检验服务存活,可以扩展的记录服务的响应时间用来做权重,从而做自定义的rule。

当然以上四类都可以自定义替换。规则如下:

  • clientName.ribbon.NFLoadBalancerClassName: 需要实现 ILoadBalancer
  • clientName.ribbon.NFLoadBalancerRuleClassName: 需要实现IRule
  • clientName.ribbon.NFLoadBalancerPingClassName:需要实现 IPing
  • clientName.ribbon.NIWSServerListClassName: 需要实现 ServerList

clientName就是我们的服务名称,例如我们可以像下面这样配置yaml格式

users:
  ribbon:
    NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule

图的右半部分是介绍服务更新。其中有个比较注意的点是客户端的二级缓存,这可能会导致我们的服务上下线存在延迟,因为我们需要二级缓存都同步以后才能知道哪些服务是UP哪些服务是DOWN。

Eureka Server -> Eureka Client -> LoadBalancer
首先eureka client从eureka server中拉取到现在UP的服务,然后再把对应的拉取到的数据更新到LoadBalancer中。

有关两个定时的配置:

# ribbon更新loadbalancer的间隔 但是毫秒
ribbon.ServerListRefreshInterval=500
# 从eureka server拉取列表的间隔 默认是秒
eureka.client.registry-fetch-interval-seconds=300
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值