class EbisuConnection::LoadBalancer

Public Class Methods

new(replicas) click to toggle source
# File lib/ebisu_connection/load_balancer.rb, line 5
def initialize(replicas)
  @replicas = replicas
end

Public Instance Methods

replica() click to toggle source
# File lib/ebisu_connection/load_balancer.rb, line 9
def replica
  @replicas[roulette.sample]
end

Private Instance Methods

calc_roulette() click to toggle source
# File lib/ebisu_connection/load_balancer.rb, line 19
def calc_roulette
  set = []
  weight_list = @replicas.map(&:weight)
  gcd = GreatestCommonDivisor.calc(weight_list)

  weight_list.each_with_index do |w, index|
    weight = w / gcd
    set.concat([index] * weight)
  end

  set
end
roulette() click to toggle source
# File lib/ebisu_connection/load_balancer.rb, line 15
def roulette
  @roulette ||= calc_roulette
end