SpringCloud-Ribbon负载均衡

        

        Spring Cloud Ribbon是基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过SpringCloud的封装,可以让我们实现将面向服务的REST模块请求自动转换成客户端负载均衡的服务调用。

01Ribbon在微服务中的角色和作用

        通过一次消费流程描述ribbon在微服务的角色和作用,消费者(order-service)调用服务者(user-service)向外暴露的接口。在springcloud中具体的请求流程图如下

7f20f5dc61a9831408098781c2fb2ce4.png

        消费者(order-service)发起请求到ribbon,ribbon发起服务调用到eureka-server拉取服务列表信息,接收到列表信息之后ribbon根据负载均衡策略选中列表中的可用服务,向服务提供方发起请求。从上图可以看出,ribbon的作用就是从eureka注册中心拿到服务列表serverList,然后根据当前的负载均衡算法选中一个服务进行http远程调用。

02负载均衡原理

        在一个微服务远程调用过程中,我们可以通过debug进行断点追踪来确定ribbon的负载均衡是如何实现的,如下图所示在代码执行追踪过程中我们能看到起到服务调用和选择的类为RibbonLoadBanlancerClient,通过传递请求url中的服务ID(userservice),调用DynamicServerListLoadBanlancer访问eureka- server拉取到userservice的服务注册列表,再调用IRule接口实现对列表中服务的选择,从而实现负载均衡。

e4a2691bb96a9640a5248076c16464e5.png

03负载均衡策略

        通过以上过程,可以看出决定负载均衡策略的实际上就是IRule接口,下面对IRule 接口进行一个简单的分析。当前ribbon已经实现的接口入口如下图所示,在不同的场景下可以选择应用。

bc8dd6673038111f879cfd0aa28744ca.png

f19e283842674f7bf4709cec086daed5.png


04ribbon自定义的实现方式

        对ribbon实现原理有了一个简单的认识之后,下面进行负载均衡的配置说明,在没有任何配置的情况下,系统会默认一种负载均衡策略(可以理解为一种轮询),我们可以根据业务需求对负载均衡的策略进行自定义管理,从两个维度进行管理。

  • 代码方式,在消费者的启动类中,定义一个新的Rule,这种配置方式为全局维度上进行服务调用的负载均衡配置,无论调用哪个服务提供者都会采用同样的策略进行访问。

@Bean
public IRule randomRule(){
    return new RandomRule();
}
  • 配置方式,在order-service的application.yml文件中,添加新的配置修改规则。这种配置方式可以指定针对性的对不同的服务组件配置不同的访问策略

userservice: 
    ribbon: 
        NFLoadBalangerRuleClassName:com.netflix.Loadbalancer.RandomRule    #负载均衡规则

ribbon 默认为懒加载,即在服务第一次被调用的时候才会加载服务信息,可以通过配置将指定的服务进行饥饿加载来提供第一次访问的效率。

ribbon: 
    eager-Load: 
        enabled:true    #开启饥饿加载 
    clients:userservice    #指定userservice这个服务饥饿加载

往期推荐:

SpringCloud-微服务拆分、服务远程调用

——————————————————

关注微信公众号「BaseJ」,收看更多专题内容

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值