Atlas权重测试中的bug调试

一、 问题背景Atlas对slave进行负载均衡,每一台slave都有一个权重值,权重越大,负载的读请求越多。负载均衡的算法比较巧妙,代码如下:        guint max_weight = rwsplit->max_weight;        guint cur_weight = rwsplit->cur_weight;        guint next_ndx   =
摘要由CSDN通过智能技术生成

一、 问题背景

    Atlasslave进行负载均衡,每一台slave都有一个权重值,权重越大,负载的读请求越多。负载均衡的算法比较巧妙,代码如下:

     

        guint max_weight = rwsplit->max_weight;
        guint cur_weight = rwsplit->cur_weight;
        guint next_ndx   = rwsplit->next_ndx;

        // get backend index by slave wrr
        gint ndx = -1;
        for(i = 0; i < ndx_num; ++i) {
                network_backend_t* backend = network_backends_get(backends, next_ndx);
                if (backend == NULL) goto next;

                network_connection_pool* pool = chassis_event_thread_pool(backend);
                if (pool == NULL) goto next;

                if (backend->type == BACKEND_TYPE_RO && 
                  backend->weight >= cur_weight && 
                  backend->state == BACKEND_STATE_UP)
                        ndx = next_ndx;

        next:
                if (next_ndx == ndx_num - 1) {
                        --cur_weight;
                        next_ndx = 0;

                        if (cur_weight == 0) cur_weight = max_weight;
                } else {
                        ++next_ndx;
                }

                if (ndx != -1) break;
        }

        rwsplit->cur_weight = cur_weight;
        rwsplit->next_ndx = next_ndx;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值