1.4 Ribbon负载均衡原理
一、负载均衡原理
负载均衡流程
发起请求
LoadBalancerInterceptor负载均衡拦截器,得到请求服务地址
将地址交给RibbonLoadBanlancerClient
获取url中的服务id,交给DynamicServerListLoadBalance
从注册中心中拉取对应服务列表
将列表中的内容交给IRule,进行负载均衡计算,选定最终服务
将最选择的服务交给RibbonLoadBanlancerClient,替换原请求,得到真实请求地址
发送请求,结束
二、负载均衡策略(IRule)
负载均衡策略
Ribbon的负载均衡规则是一个叫IRule的接口来定义的,每一个字借口都是一种规则
规则继承关系图
IRule-接口 |-AbstractLoadBalancerRule | |-RetryRule-重试机制的选择逻辑 | |-ClientConfigEnableRoundRobinRule-轮询方案 | | |-BestAvailablerule-忽略短路的服务器,并选择并发数比较低的服务器 | | |-PredicateBasedRule | | | |-AvailabilityFilteringRule-对短路与并发高的服务器进行忽略,然后轮询 | | | |-ZoneAvoidanceRule-次区域可用的服务器为基础进行服务器的选择 | |-RoundRobinRule-简单轮询服务列表来选择 | | |-WeightedResponseTimeRule-为每一个服务器赋予权重 | |-RandomRule-随机选择一个可用的服务器如何调整负载均衡规则
代码方式:
@Bean public IRule randomRule() { return new RandomRule(); // 这里只是举个例子,RandomRule可以为上面的任意一个方式 }备注:此方法修改后,对任意请求均生效
yml配置的方式
user-server: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule备注:此方法只针对某个微服务生效,上面的表示对user-server服务修改生效
三、饥饿加载
Ribbon默认采用蓝加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长,而饥饿加载则会在项目启动时候创建,降低第一次访问的耗时,通过下面的配置开启饥饿加载
ribbon: eager-load: enable: true # 开启饥饿加载服务 clients: - user-server # 指定对某个服务进行饥饿加载
最后更新于
这有帮助吗?