MCPcopy Create free account
hub / github.com/catwithtudou/load-balancer-algorithm / GetServer

Method GetServer

loadbalancer/random.go:22–56  ·  view source on GitHub ↗

GetServer 随机选择一个服务器

(key string)

Source from the content-addressed store, hash-verified

20
21// GetServer 随机选择一个服务器
22func (r *RandomLoadBalancer) GetServer(key string) *Server {
23 r.mu.RLock()
24 defer r.mu.RUnlock()
25
26 // 过滤出可用的服务器
27 availableServers := make([]*Server, 0)
28 for _, server := range r.Servers {
29 if server.Weight > 0 {
30 availableServers = append(availableServers, server)
31 }
32 }
33
34 if len(availableServers) == 0 {
35 return nil
36 }
37
38 // 计算总权重
39 totalWeight := 0
40 for _, server := range availableServers {
41 totalWeight += server.Weight
42 }
43
44 // 随机选择一个服务器(考虑权重)
45 randomWeight := r.rng.Intn(totalWeight)
46 currentWeight := 0
47 for _, server := range availableServers {
48 currentWeight += server.Weight
49 if randomWeight < currentWeight {
50 return server
51 }
52 }
53
54 // 如果因为浮点数精度问题没有选中任何服务器,返回最后一个
55 return availableServers[len(availableServers)-1]
56}

Callers 1

mainFunction · 0.95

Calls

no outgoing calls

Tested by

no test coverage detected