openresty / lua-resty-balancer

A generic consistent hash implementation for OpenResty/Lua
322 stars 77 forks source link

[Advise]the improvement on roundrobin. #12

Open guanglinlv opened 7 years ago

guanglinlv commented 7 years ago

@doujiang24 , the gcd implement is not fair enough, the following is more better:

 function _M:next()
     local servers=self.servers
     local selectedIdx
     for i = 1, #servers do
        servers[i]['cweight'] = servers[i]['weight'] + severs[i]['cweight']
        if not selectedIdx or servers[selectedIdx]['cweight'] < severs[i]['cweight'] then
            selectedIdx = i
        end
    end

    servers[selectedIdx]['cweight'] = servers[selectedIdx]['cweight'] - self.totalWeight

    return servers[selectedIdx]['name']

 end
kalindudc commented 2 years ago

Possible related consequence of the current implementation: https://github.com/openresty/lua-resty-balancer/issues/44