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