Ribbon负载均衡策略简介

Ribbon负载均衡策略

ribbon是一个客户端负载均衡器,类似于nginx的负载均衡模块功能

负载均衡(Load Balance)是用于解决一台机器无法解决所有请求而产生的一种算法,像nginx使用负载均衡分配流量,ribbon为客户端提供负载均衡,dubbo服务调用里的负载均衡、openfeign等很多地方使用到了负载均衡。

主流的负载均衡方案分为两类:

1.集中式的负载均衡,即在服务的消费方和提供方之间使用独立的设备,如nginx、F5等,通过这种设施将访问的请求通过某种策略转发至服务的提供方
2.进程内的负载均衡,将负载均衡策略逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可以用,然后再从这些地址中选择一个合适的服务器,Ribbon就是进程内的负载均衡策略,集成于消费方进程,消费方通过它来获取到服务提供方的地址。

使用负载均衡的好处:

当集群的一台或者多台服务器挂掉的时候,剩余的没有挂的服务器可以保证服务的继续使用
使用了更多机器保证机器的良性使用,不会由于某一时刻并发量上升导致服务器压力过大

负载均衡常见的策略:

  • 随机 (Random)
  • 轮询 (RoundRobin)
  • 一致性哈希(ConsistentHash)
  • 哈希(Hash)
  • 加权(Weighted)

Ribbon的组件

接口作用默认实现
IClientConfig读取配置DefaultClientConfigImpl
IRule负载均衡规则,根据规则选择实例ZoneAvoidanceRule(轮询)
IPing筛选掉ping不通的实例DummyPing
ServerList< Server>交给Ribbon的实例列表Ribbon:ConfigurationBasedServerList Spring Cloud Alibaba:NacosServerList
ServerListFilter< Server>过滤掉不符合条件的实例ZonePreferenceServerListFilter
ILoadBalanceRibbon的入口ZoneAwareLoadBalance
ServerListUpdater更新交给Ribbon的List的策略PollingServerListUpdater

ribbon版本:2.2.2->ribbon-loadbalancer版本:2.3.0

IRule

IRule路由接口代表负载均衡策略

/**
 * Interface that defines a "Rule" for a LoadBalancer. A Rule can be thought of
 * as a Strategy for loadbalacing. Well known loadbalancing strategies include
 * Round Robin, Response Time based etc.
 * 
 * @author stonse
 * 
 */
public interface IRule{
    /*
     * choose one alive server from lb.allServers or
     * lb.upServers according to key
     * 
     * @return choosen Server object. NULL is returned if none
     *  server is available 
     */

    public Server choose(Object key);
    
    public void setLoadBalancer(ILoadBalancer lb);
    
    public ILoadBalancer getLoadBalancer();    
}

IRule接口的实现类有以下几种
在这里插入图片描述

如何设置负载均衡策略

编写配置类转载指定的bean

/**
 * RetryRule 重试策略
 * AvailabilityFilteringRule 可用过滤策略
 * ResponseTimeWeightedRule 响应时间加权重策略
 * ZoneAvoidanceRule 根据区域的性能和服务的可用性等权重选择服务,如果没有区域就类似于轮询
 * RoundRobinRule 最基本的轮询选择
 * RandomRule 随机策略
 * WeightedResponseTimeRule 加权策略
 * BestAvailableRule 最小请求数策略
 */
@Configuration()
public class RibbonClientDefaultConfigurationConfig {

    @Bean
    public IRule ribbonRule() {
        return new ZoneAvoidanceRule();
    }
}

特别注意,如果注册中心有多个服务的情况下,需要将注册的策略实现类设为多例,否则会出现请求指向错误

参考资料
Spring Cloud Gateway入坑记
SpringCloud gateway (史上最全)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值