好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > Golang加權輪詢負載均衡的實現

Golang加權輪詢負載均衡的實現

熱門標簽:壽光微信地圖標注 excel地圖標注分布數據 電話機器人軟件免費 外呼系統用什么卡 百度地圖標注后傳給手機 評價高的400電話辦理 外呼系統顯本地手機號 阿克蘇地圖標注 涿州代理外呼系統

實現加權輪詢負載均衡思路

代碼實現一個加權負載均衡

  • Weight            初始化時對節點約定的權重
  • currentWeight     節點臨時權重,每輪都會變化
  • effectiveWeight   節點有效權重,默認與Weight相同
  • totalWeight       所有節點有效權重之和:sum(effectiveWeight)

代碼實現一個加權負載均衡

  • currentWeight = currentWeight+effecitveWeight
  • 選中最大的 currentWeight 節點為選中節點
  • currentWeight = currentWeight-totalWeight  (4+3+2=9)

所以我們能夠 在表格模擬運行情況:

請求次數 請求前currentWelght 選中的節點 請求后currentWelght
1 [serverA=4,serverB=3,serverC=2] serverA [serverA=-1,serverB=6,serverC=4]
2 [serverA=-1,serverB=6,serverC=4] serverB [serverA=3,serverB=0,serverC=6]
3 [serverA=3,serverB=0,serverC=6] serverc [serverA=7,serverB=3,serverC=-1]
4 [serverA=7,serverB=3,serverC=-1] serverA [serverA=2,serverB=6,serverC=1]
5 [serverA=2,serverB=6,serverC=1] serverB [serverA=6,serverB=0,serverC=3]
6 [serverA=6,serverB=0,serverC=3] serverA [serverA=1,serverB=3,serverC=5]
7 [serverA=1,serverB=3,serverC=5] serverc [serverA=5,serverB=6,serverC=-2]

加權輪詢負載均衡代碼

package load_balance

import (
 "errors"
 "strconv"

)

type WeightRoundRobinBalance struct {
 curIndex int
 rss      []*WeightNode
 rsw      []int

 //觀察主體
 conf LoadBalanceConf
}

// 配置主題
type LoadBalanceConf interface {
 GetConf() []string
 WatchConf()
 UpdateConf(conf []string)
}

type WeightNode struct {
 addr            string // 服務器地址
 weight          int //權重值
 currentWeight   int //節點當前權重
 effectiveWeight int //有效權重
}

func (r *WeightRoundRobinBalance) Add(params ...string) error {
 if len(params) != 2 {
  return errors.New("param len need 2")
 }
 parInt, err := strconv.ParseInt(params[1], 10, 64)
 if err != nil {
  return err
 }
 node := WeightNode{addr: params[0], weight: int(parInt)}
 node.effectiveWeight = node.weight
 r.rss = append(r.rss, node)
 return nil
}

func (r *WeightRoundRobinBalance) Next() string {
 total := 0
 var best *WeightNode
 for i := 0; i  len(r.rss); i++ {
  w := r.rss[i]
  //step 1 統計所有有效權重之和
  total += w.effectiveWeight

  //step 2 變更節點臨時權重為的節點臨時權重+節點有效權重
  w.currentWeight += w.effectiveWeight

  //step 3 有效權重默認與權重相同,通訊異常時-1, 通訊成功+1,直到恢復到weight大小
  if w.effectiveWeight  w.weight {
   w.effectiveWeight++
  }
  //step 4 選擇最大臨時權重點節點
  if best == nil || w.currentWeight > best.currentWeight {
   best = w
  }
 }
 if best == nil {
  return ""
 }
 //step 5 變更臨時權重為 臨時權重-有效權重之和
 best.currentWeight -= total
 return best.addr
}

func (r *WeightRoundRobinBalance) Get(key string) (string, error) {
 return r.Next(), nil
}

func (r *WeightRoundRobinBalance) SetConf(conf LoadBalanceConf) {
 r.conf = conf
}

測試代碼

package load_balance

import (
 "fmt"
 "testing"
)

func TestLB(t *testing.T) {
 rb := WeightRoundRobinBalance{}
 rb.Add("127.0.0.1:2003", "4") //0
 // rb.Add("127.0.0.1:2004", "3") //1
 rb.Add("127.0.0.1:2005", "2") //2

 fmt.Println(rb.Next())
 fmt.Println(rb.Next())
 fmt.Println(rb.Next())
 fmt.Println(rb.Next())
 fmt.Println(rb.Next())
 fmt.Println(rb.Next())
 fmt.Println(rb.Next())
 fmt.Println(rb.Next())
 fmt.Println(rb.Next())
 fmt.Println(rb.Next())
 fmt.Println(rb.Next())
 fmt.Println(rb.Next())
 fmt.Println(rb.Next())
 fmt.Println(rb.Next())
}

測試結果

$ go test
127.0.0.1:2003
127.0.0.1:2005
127.0.0.1:2003
127.0.0.1:2003
127.0.0.1:2005
127.0.0.1:2003
127.0.0.1:2003
127.0.0.1:2005
127.0.0.1:2003
127.0.0.1:2003
127.0.0.1:2005
127.0.0.1:2003
127.0.0.1:2003
127.0.0.1:2005
PASS
ok      gateway/_test/demo      0.080s

## 127.0.0.1:2003 為 127.0.0.1:2005 權重兩倍。而從答應結果上看,符合要求

到此這篇關于Golang加權輪詢負載均衡的實現的文章就介紹到這了,更多相關Golang加權輪詢負載均衡內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家! 

您可能感興趣的文章:
  • Golang實現四種負載均衡的算法(隨機,輪詢等)
  • Golang 實現簡單隨機負載均衡
  • golang 實現一個負載均衡案例(隨機,輪訓)
  • Django高并發負載均衡實現原理詳解
  • golang grpc 負載均衡的方法

標簽:吐魯番 雞西 汕頭 蘭州 梅河口 銅川 欽州 重慶

巨人網絡通訊聲明:本文標題《Golang加權輪詢負載均衡的實現》,本文關鍵詞  Golang,加權,輪詢,負載,均衡,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Golang加權輪詢負載均衡的實現》相關的同類信息!
  • 本頁收集關于Golang加權輪詢負載均衡的實現的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 武则天情欲史在线观看| 精品视频一区二区三区艾草 | 一本色道久久88综合亚洲精品高清| 91精品欧美| jiZZJIZZ学生老师视频| av拍摄灌满H| 99精品视频在线在线视频观看| 97在线视频| 无码无套少妇毛18PXXXX| 色婷婷综合缴情免费观看| 泡良达人| yy4180殇情影院| 黃色A片三級三級三級免费看精东| 在线看h高清视频网站| 日本不卡新2区| 91免费精品视频| 94久久国产伦免费精品| 乳欲人妻1~5集动漫无删减 | 成午夜精品一区二区三区软件| 3p国产对白刺激在线视频69| 日韩精品视频在线观看免费| 日本黄色片网站| 麻麻喜欢吃我下面| GOGO亚洲国模私拍大尺度人体| 8090韩国理伦片在线天堂| 艳鉧动漫1~6日本全集在线播放| 换着玩人妻HD中文字幕| 高清乱码????免费网| 射射电影| 日产国产欧美视频一区精品| 香蕉视频黄app| 国产精品亚洲一区二区| 日本三区视频| 黄色软件下载安装| 强制粗暴高h男男文| 亚洲AV秘?无码一区明步 | 亚洲好骚综合| 湿润手指揉捏调教H女友| 肉文合集| 山村村妇野外激战| 哦┅┅快┅┅用力啊┅少妇奶水 |