添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
var slaveDns = map[int]map[string]interface{}{ 0: {"connectstring": "root@tcp(172.16.0.164:3306)/shiqu_tools?charset=utf8", "weight": 8}, 1: {"connectstring": "root@tcp(172.16.0.165:3306)/shiqu_tools?charset=utf8", "weight": 4}, 2: {"connectstring": "root@tcp(172.16.0.166:3306)/shiqu_tools?charset=utf8", "weight": 2}, var i int = -1 //表示上一次选择的服务器 var cw int = 0 //表示当前调度的权值 var gcd int = 2 //当前所有权重的最大公约数 比如 2,4,8 的最大公约数为:2 算法思路: cw为当前的权重,遍历每个服务器,如果服务器的权值大于cw,则该服务器执行一次,一轮轮询之后,cw-gcd; 之后重复上诉步骤 func getDns() string { for { i = (i + 1) % len(slaveDns) if i == 0 { cw = cw - gcd if cw <= 0 { cw = getMaxWeight() if cw == 0 { return "" if weight, _ := slaveDns[i]["weight"].(int); weight >= cw { return slaveDns[i]["connectstring"].(string) func getMaxWeight() int { max := 0 for _, v := range slaveDns { if weight, _ := v["weight"].(int); weight >= max { max = weight return max func main() { note := map[string]int{} s_time := time.Now().Unix() for i := 0; i < 100; i++ { s := getDns() fmt.Println(s) if note[s] != 0 { note[s]++ } else { note[s] = 1 e_time := time.Now().Unix() fmt.Println("total time: ", e_time-s_time) fmt.Println("--------------------------------------------------") for k, v := range note { fmt.Println(k, " ", v)

执行结果:

C:/go/bin/go.exe build [D:/PROGRAM/Golang/src/study/roundRobin] 成功: 进程退出代码 0. D:/PROGRAM/Golang/src/study/roundRobin/roundRobin.exe [D:/PROGRAM/Golang/src/study/roundRobin] root@tcp(172.16.0.164:3306)/shiqu_tools?charset=utf8 root@tcp(172.16.0.164:3306)/shiqu_tools?charset=utf8 root@tcp(172.16.0.164:3306)/shiqu_tools?charset=utf8 root@tcp(172.16.0.165:3306)/shiqu_tools?charset=utf8 root@tcp(172.16.0.164:3306)/shiqu_tools?charset=utf8 root@tcp(172.16.0.165:3306)/shiqu_tools?charset=utf8 root@tcp(172.16.0.166:3306)/shiqu_tools?charset=utf8 。。。(中间部分省略) root@tcp(172.16.0.164:3306)/shiqu_tools?charset=utf8 root@tcp(172.16.0.164:3306)/shiqu_tools?charset=utf8 root@tcp(172.16.0.164:3306)/shiqu_tools?charset=utf8 root@tcp(172.16.0.165:3306)/shiqu_tools?charset=utf8 root@tcp(172.16.0.164:3306)/shiqu_tools?charset=utf8 root@tcp(172.16.0.165:3306)/shiqu_tools?charset=utf8 root@tcp(172.16.0.166:3306)/shiqu_tools?charset=utf8 root@tcp(172.16.0.164:3306)/shiqu_tools?charset=utf8 root@tcp(172.16.0.164:3306)/shiqu_tools?charset=utf8 total time: 0 -------------------------------------------------- root@tcp(172.16.0.164:3306)/shiqu_tools?charset=utf8 58 root@tcp(172.16.0.165:3306)/shiqu_tools?charset=utf8 28 root@tcp(172.16.0.166:3306)/shiqu_tools?charset=utf8 14 成功: 进程退出代码 0.