欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > Golang實現四種負載均衡的算法(隨機,輪詢等)

Golang實現四種負載均衡的算法(隨機,輪詢等)

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

隨機負載

隨機挑選目標服務器

package load_balance

import (
 "errors"
 "math/rand"
)

//隨機負載均衡
type RandomBalance struct {
 curIndex int

 rss []string
}

func (r *RandomBalance) Add(params ...string) error {
 if len(params) == 0 {
  return errors.New("params len 1 at least")
 }
 addr := params[0]
 r.rss = append(r.rss, addr)

 return nil
}

func (r *RandomBalance) Next() string {
 if len(r.rss) == 0 {
  return ""
 }
 r.curIndex = rand.Intn(len(r.rss))
 return r.rss[r.curIndex]
}

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

輪詢負載

服務器依次輪詢

package load_balance

import "errors"

//輪詢負載均衡
type RoundRobinBalance struct {
 curIndex int
 rss      []string
}

func (r *RoundRobinBalance) Add(params ...string) error {
 if len(params) == 0 {
  return errors.New("params len 1 at least")
 }

 addr := params[0]
 r.rss = append(r.rss, addr)
 return nil
}

func (r *RoundRobinBalance) Next() string {
 if len(r.rss) == 0 {
  return ""
 }
 lens := len(r.rss)
 if r.curIndex >= lens {
  r.curIndex = 0
 }

 curAddr := r.rss[r.curIndex]
 r.curIndex = (r.curIndex + 1) % lens
 return curAddr
}

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

加權輪詢負載

給目標設置訪問權重,按照權重輪詢

package load_balance

import (
 "errors"
 "strconv"
)

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

type WeightNode struct {
 addr            string
 Weight          int //初始化時對節點約定的權重
 currentWeight   int //節點臨時權重,每輪都會變化
 effectiveWeight int //有效權重, 默認與weight相同 , totalWeight = sum(effectiveWeight)  //出現故障就-1
}

//1, currentWeight = currentWeight + effectiveWeight
//2, 選中最大的currentWeight節點為選中節點
//3, currentWeight = currentWeight - totalWeight

func (r *WeightRoundRobinBalance) Add(params ...string) error {
 if len(params) != 2 {
  return errors.New("params 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 {
 var best *WeightNode
 total := 0
 for i := 0; i  len(r.rss); i++ {
  w := r.rss[i]
  //1 計算所有有效權重
  total += w.effectiveWeight
  //2 修改當前節點臨時權重
  w.currentWeight += w.effectiveWeight
  //3 有效權重默認與權重相同,通訊異常時-1, 通訊成功+1,直到恢復到weight大小
  if w.effectiveWeight  w.Weight {
   w.effectiveWeight++
  }

  //4 選中最大臨時權重節點
  if best == nil || w.currentWeight > best.currentWeight {
   best = w
  }
 }

 if best == nil {
  return ""
 }
 //5 變更臨時權重為 臨時權重-有效權重之和
 best.currentWeight -= total
 return best.addr
}

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

func (r *WeightRoundRobinBalance) Update()  {

}

一致性hash

請求固定的URL訪問指定的IP

package load_balance

import (
 "errors"
 "hash/crc32"
 "sort"
 "strconv"
 "sync"
)

//1 單調性(唯一) 2平衡性 (數據 目標元素均衡) 3分散性(散列)
type Hash func(data []byte) uint32

type UInt32Slice []uint32

func (s UInt32Slice) Len() int {
 return len(s)
}

func (s UInt32Slice) Less(i, j int) bool {
 return s[i]  s[j]
}

func (s UInt32Slice) Swap(i, j int) {
 s[i], s[j] = s[j], s[i]
}

type ConsistentHashBalance struct {
 mux      sync.RWMutex
 hash     Hash
 replicas int               //復制因子
 keys     UInt32Slice       //已排序的節點hash切片
 hashMap  map[uint32]string //節點哈希和key的map, 鍵是hash值,值是節點key
}

func NewConsistentHashBalance(replicas int, fn Hash) *ConsistentHashBalance {
 m := ConsistentHashBalance{
  replicas: replicas,
  hash:     fn,
  hashMap:  make(map[uint32]string),
 }
 if m.hash == nil {
  //最多32位,保證是一個2^32-1環
  m.hash = crc32.ChecksumIEEE
 }
 return m
}

func (c *ConsistentHashBalance) IsEmpty() bool {
 return len(c.keys) == 0
}

// Add 方法用來添加緩存節點,參數為節點key,比如使用IP
func (c *ConsistentHashBalance) Add(params ...string) error {
 if len(params) == 0 {
  return errors.New("param len 1 at least")
 }

 addr := params[0]
 c.mux.Lock()
 defer c.mux.Unlock()

 // 結合復制因子計算所有虛擬節點的hash值,并存入m.keys中,同時在m.hashMap中保存哈希值和key的映射
 for i := 0; i  c.replicas; i++ {
  hash := c.hash([]byte(strconv.Itoa(i) + addr))
  c.keys = append(c.keys, hash)
  c.hashMap[hash] = addr
 }

 // 對所有虛擬節點的哈希值進行排序,方便之后進行二分查找
 sort.Sort(c.keys)
 return nil
}

// Get 方法根據給定的對象獲取最靠近它的那個節點
func (c *ConsistentHashBalance) Get(key string) (string, error) {
 if c.IsEmpty() {
  return "", errors.New("node is empty")
 }
 hash := c.hash([]byte(key))

 // 通過二分查找獲取最優節點,第一個"服務器hash"值大于"數據hash"值的就是最優"服務器節點"
 idx := sort.Search(len(c.keys), func(i int) bool { return c.keys[i] >= hash })

 // 如果查找結果 大于 服務器節點哈希數組的最大索引,表示此時該對象哈希值位于最后一個節點之后,那么放入第一個節點中
 if idx == len(c.keys) {
  idx = 0
 }
 c.mux.RLock()
 defer c.mux.RUnlock()
 return c.hashMap[c.keys[idx]], nil
}

封裝

定義LoadBalance接口

package load_balance

type LoadBalance interface {
 Add(...string) error
 Get(string)(string, error)

}

工廠方法

package load_balance

type LbType int

const (
 LbRandom LbType = iota
 LbRoundRobin
 LbWeightRoundRobin
 LbConsistentHash
)

func LoadBalanceFactory(lbType LbType) LoadBalance {
 switch lbType {
 case LbRandom:
  return RandomBalance{}
 case LbConsistentHash:
  return NewConsistentHashBalance(10, nil)
 case LbRoundRobin:
  return RoundRobinBalance{}
 case LbWeightRoundRobin:
  return WeightRoundRobinBalance{}
 default:
  return RandomBalance{}
 }
}

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

您可能感興趣的文章:
  • golang grpc 負載均衡的方法
  • 使用Golang實現加權負載均衡算法的實現代碼

標簽:黑龍江 延邊 武漢 新余 嘉峪關 宜賓 張掖 江西

巨人網絡通訊聲明:本文標題《Golang實現四種負載均衡的算法(隨機,輪詢等)》,本文關鍵詞  Golang,實現,四種,負載,均衡,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Golang實現四種負載均衡的算法(隨機,輪詢等)》相關的同類信息!
  • 本頁收集關于Golang實現四種負載均衡的算法(隨機,輪詢等)的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    极品销魂美女一区二区三区| 制服 丝袜 综合 日韩 欧美| 国产1区2区3区4区| 国产日韩v精品一区二区| 国产一区二区三区在线观看免费| 一级片手机在线观看| 日韩免费一区二区| 免费在线观看一区二区三区| 国产毛片毛片毛片毛片毛片毛片| 欧美久久久久久蜜桃| 亚洲国产成人porn| 久久久久国产免费| 欧美精品一二三区| 首页亚洲欧美制服丝腿| 亚洲永久无码7777kkk| 欧美一区二区三区四区五区| 日韩av一区二区在线影视| 亚洲调教欧美在线| 欧美www视频| 精彩视频一区二区三区| 国产大屁股喷水视频在线观看| 久久久久久久精| 成人午夜av在线| 在线欧美一区二区| 亚洲综合激情小说| 成年人的黄色片| 精品国产乱码久久久久久久| 国产在线一区观看| 天天综合天天做| 一区二区三区中文字幕在线观看| 日韩大尺度视频| 日韩一级欧美一级| 国产综合久久久久影院| 91ts人妖另类精品系列| 1区2区3区欧美| 无码人妻一区二区三区一| 9191久久久久久久久久久| 日韩不卡手机在线v区| 国产精品理论在线| 亚洲欧美综合网| 亚洲熟妇一区二区| 欧美大肚乱孕交hd孕妇| 国产剧情一区二区| 91高清在线观看| 日本午夜精品视频在线观看| 自拍偷拍你懂的| 亚洲精品国产视频| 巨胸大乳www视频免费观看| 国产视频亚洲色图| 少妇丰满尤物大尺度写真| 日韩一区二区在线观看| 国产乱淫av一区二区三区| 色偷偷久久人人79超碰人人澡| 亚洲第一成年网| 日韩欧美黄色网址| 亚洲女与黑人做爰| 日韩av一二区| 中文字幕一区二区三区不卡 | 91国产成人在线| 91麻豆国产福利在线观看| 欧美精品少妇一区二区三区| 精品无人码麻豆乱码1区2区 | 欧美色综合网站| 男人的天堂亚洲一区| 欧美爱爱免费视频| 亚洲成人免费电影| 亚洲综合视频网站| 日韩中文字幕区一区有砖一区| 香蕉成人在线视频| 性做久久久久久免费观看| 欧美另类69xxxx| 亚洲成人av在线电影| 91大神福利视频| 舔着乳尖日韩一区| 色综合天天综合给合国产| 久久精品国产精品亚洲综合| 午夜写真片福利电影网| 麻豆国产精品777777在线| 欧美亚洲高清一区| 国产精品一区二区三区乱码 | 欧美日韩一区二区在线观看 | 国产精品伦理一区二区| xxxx黄色片| 一区二区三区丝袜| 91香蕉国产视频| 日韩成人一区二区三区在线观看| 色婷婷av一区二区三区之一色屋| 极品尤物av久久免费看| 日韩一区二区三区视频在线| av欧美精品.com| 国产亚洲欧美激情| 少妇户外露出[11p]| 亚洲精品五月天| 色老板免费视频| 精品午夜久久福利影院| 日韩一区二区电影网| 一级全黄裸体片| 亚洲欧洲av一区二区三区久久| 婷婷丁香综合网| 喷白浆一区二区| 国产一区在线精品| 91精品国产91久久久久久一区二区| 高清不卡在线观看| 久久精品一区蜜桃臀影院| yy1111111| 偷拍自拍另类欧美| 欧美在线视频日韩| voyeur盗摄精品| 欧美激情资源网| 丁香花五月婷婷| 免费高清在线视频一区·| 91麻豆精品国产91久久久使用方法 | 熟女少妇a性色生活片毛片| 美国十次综合导航| 日韩一区二区三区四区| 中文字幕a在线观看| 亚洲一区欧美一区| 欧美四级电影在线观看| 99久久婷婷国产| 成人免费小视频| 一本色道久久综合亚洲精品按摩| 国产主播一区二区三区| 久久久久久97三级| 免费成人深夜天涯网站| 麻豆国产精品官网| www欧美成人18+| 舐め犯し波多野结衣在线观看| 毛片不卡一区二区| 日韩一区二区影院| 不卡一区二区在线观看| 日本不卡视频一二三区| 欧美成人福利视频| 欧美特黄一区二区三区| 久久成人久久鬼色| 欧美精品一区二| 国产一区二区三区四区在线| 国产精品夜夜嗨| 国产精品国产三级国产aⅴ中文| 亚洲天堂一级片| 97久久久精品综合88久久| 亚洲激情在线播放| 欧美日韩国产高清一区| 亚洲av成人片色在线观看高潮| 日本亚洲视频在线| 久久这里只有精品6| 日韩欧美视频免费观看| 丁香婷婷综合网| 亚洲欧美国产毛片在线| 欧美高清一级片在线| 中文字幕在线免费看线人| 精品一区二区三区久久| 欧美国产激情一区二区三区蜜月| 暗呦丨小u女国产精品| 91在线云播放| 亚洲一二三四久久| 日韩欧美一二三四区| 欧美成人久久久免费播放| 国产成+人+日韩+欧美+亚洲| 亚洲人吸女人奶水| 欧美精品一级二级三级| 91l九色lporny| 成人激情图片网| 亚洲h在线观看| 2024国产精品视频| 顶臀精品视频www| 国偷自产av一区二区三区麻豆| 日韩成人一区二区| 中文字幕不卡的av| 欧美色爱综合网| 亚洲黄色免费视频| www.欧美日韩| 日本亚洲三级在线| 国产精品久久久久天堂| 制服丝袜中文字幕一区| 精品一区二区在线观看视频| 亚洲精品老司机| 久久久综合九色合综国产精品| 免费看黄色的视频| www.视频一区| 免费av网站大全久久| 国产精品女主播av| 欧美一区二区视频在线观看2022| 午夜激情视频在线播放| 色婷婷狠狠18禁久久| 狠狠久久亚洲欧美| 一区二区三区精品在线观看| 26uuu精品一区二区| 色婷婷国产精品| 久久国产柳州莫菁门| 91小视频在线观看| 精品在线一区二区三区| 一区二区三区毛片| 欧美激情在线一区二区| 欧美巨大另类极品videosbest| 中文字幕乱码av| 亚洲成人日韩在线| 91伊人久久大香线蕉| 精品一区二区三区久久久| 亚洲国产aⅴ天堂久久| 日本一区二区三区dvd视频在线|