美文网首页
Dubbo 基础篇(三) - 负载均衡策略

Dubbo 基础篇(三) - 负载均衡策略

作者: freeseawind | 来源:发表于2018-08-26 19:15 被阅读0次
    开发环境
    负载均衡

    dubbo 提供了多种负载均衡的策略,在org.apache.dubbo.rpc.cluster.loadbalance 包下可以找到dubbo 提供的扩展实现:

    • 随机(random): 根据权重设置随机概率。
    • 一致性hash(consistenthash): 根据hash值,每次总是请求到同一个服务提供者。
    • 轮询(roundrobin):根据权重比例依次调用所有的服务提供者。
    • 最少活跃调用(leastactive):请求服务提供者的计数差, 相同活跃数的随机。

    dubbo 同时提供了服务端和客户端的负载均衡

    配置负载均衡

    服务端注解方式配置
    @Service(timeout = 5000, loadbalance="random")
    public class DemoServiceImpl implements DemoService
    {
        @Override
        public String sayHello(String name)
        {
            return "Service1 -> Hello " + name;
        }
    }
    
    客户端注解方式配置

    指定@Reference注解引用的路径

    @DubboComponentScan(basePackages = "github.freeseawind.springboot.helloworld.consumer")
    

    接口注入

    @Reference(loadbalance="random")
    private DemoService demoService;
    
    负载均衡案例研究

    服务提供者代码:

    @Service(timeout = 5000)
    public class DemoServiceImpl implements DemoService
    {
        @Override
        public String sayHello(String name)
        {
            return "Service1 -> Hello " + name;
        }
    }
    
    @Service(timeout = 5000)
    public class DemoServiceImpl2 implements DemoService
    {
        @Override
        public String sayHello(String name)
        {
            return "Service2 -> Hello " + name;
        }
    }
    

    服务消费者:

    @Reference
    private DemoService demoService;
        
    @Test
    public void testRPC()
    {
        for(int i = 0; i < 100; i++)
        {
             System.out.println(demoService.sayHello("freeseawind"));
         }
    }
    
    1. 服务端优先还是客户端优先
    测试用例
    • 创建两个服务提供者,使用随机访问策略
    • 创建一个服务消费者,使用一致性hash策略
    • 请求100次服务提供者
    测试结果
    • 随机返回 Service1 和service2
    总结

    服务提供者负载均衡策略优先级高于消费者。

    2. 服务提供者混合策略的副作用
    测试用例
    • 创建两个服务提供者,其中一个使用一致性hash策略,另外一个使用随机策略
    • 创建一个服务消费者,使用随机策略
    • 请求100次服务提供者
    测试结果
    • 返回使用一致性hash策略的服务提供者的响应结果
    3. 单节点伪集群
    测试用例
    • 使用一个web服务加载两个服务提供者,使用随机访问策略
    • 创建一个服务消费者,使用随机访问策略
    • 请求100次服务提供者

    启动代码

    @SpringBootApplication
    @EnableAutoConfiguration
    @DubboComponentScan(basePackages = "github.freeseawind.service.**")
    public class ProviderApplication
    {
        public static void main(String[] args)
        {
            SpringApplication.run(ProviderApplication.class, args);
        }
    }
    

    可以看到成功注册了两个服务提供者

    zookeeper注册信息
    测试结果
    • 始终返回Service2,并没有进行随机

    负载均衡通常由中心协调者进行策略分配,在没有中心节点时,是否由消费端来决定负载策略为好。

    上一篇:Dubbo 基础篇(二) - 约定和目录

    Github工程地址

    相关文章

      网友评论

          本文标题:Dubbo 基础篇(三) - 负载均衡策略

          本文链接:https://www.haomeiwen.com/subject/ibaoiftx.html