Nginx's Smooth Weighted Round-Robin Balanceing 发表于 2019-02-11 | 分类于 arithmetic Nginx’s Smooth Weighted Round-Robin Balanceinggolang实现的nginx的加权轮训算法 123456789101112131415161718192021222324252627282930313233343536373839func SWRBBalance(nodes []*node) { totalBalance := getTotalBalance(nodes) i := 1 for { //like netWork I/O time.Sleep(time.Second) s := selectNode(nodes, totalBalance) //print selectNode log.Println("no.", i, "--selected nodeName:", s.Name) //index i++ }}func getTotalBalance(nodes []*node) (res int) { for _, v := range nodes { res = res + v.Value } return}func selectNode(nodes []*node, totalBalance int) (res *node) { nodeIndex := 0 for i := 0; i < len(nodes); i++ { if res == nil { res = nodes[i] } else { if nodes[i].CurrentValue > res.CurrentValue { res = nodes[i] nodeIndex = i } } } for i := 0; i < len(nodes); i++ { nodes[i].CurrentValue += nodes[i].Value } nodes[nodeIndex].CurrentValue -= totalBalance return res} 结果及图:1234567891011121314151617181920212223242526272019/04/11 12:10:12 no. 10 --selected nodeName: C-32019/04/11 12:10:13 no. 11 --selected nodeName: B-22019/04/11 12:10:14 no. 12 --selected nodeName: C-32019/04/11 12:10:15 no. 13 --selected nodeName: C-32019/04/11 12:10:16 no. 14 --selected nodeName: B-22019/04/11 12:10:17 no. 15 --selected nodeName: A-12019/04/11 12:10:18 no. 16 --selected nodeName: C-32019/04/11 12:10:19 no. 17 --selected nodeName: B-22019/04/11 12:10:20 no. 18 --selected nodeName: C-32019/04/11 12:10:21 no. 19 --selected nodeName: C-32019/04/11 12:10:22 no. 20 --selected nodeName: B-22019/04/11 12:10:23 no. 21 --selected nodeName: A-12019/04/11 12:10:24 no. 22 --selected nodeName: C-32019/04/11 12:10:25 no. 23 --selected nodeName: B-22019/04/11 12:10:26 no. 24 --selected nodeName: C-32019/04/11 12:10:27 no. 25 --selected nodeName: C-32019/04/11 12:10:28 no. 26 --selected nodeName: B-22019/04/11 12:10:29 no. 27 --selected nodeName: A-12019/04/11 12:10:30 no. 28 --selected nodeName: C-32019/04/11 12:10:31 no. 29 --selected nodeName: B-22019/04/11 12:10:32 no. 30 --selected nodeName: C-32019/04/11 12:10:33 no. 31 --selected nodeName: C-32019/04/11 12:10:34 no. 32 --selected nodeName: B-22019/04/11 12:10:35 no. 33 --selected nodeName: A-12019/04/11 12:10:36 no. 34 --selected nodeName: C-32019/04/11 12:10:37 no. 35 --selected nodeName: B-22019/04/11 12:10:38 no. 36 --selected nodeName: C-3