91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Go語言中怎么實現一個負載均衡算法

發布時間:2021-07-06 15:56:28 來源:億速云 閱讀:119 作者:Leah 欄目:編程語言

這篇文章將為大家詳細講解有關Go語言中怎么實現一個負載均衡算法,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

輪詢法

  • 將請求按順序輪流地分配到后端服務器上,它均衡地對待后端的每一臺服務器,而不關心服務器實際的連接數和當前的系統負載。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-eAolzy2P-1619539822631)(https://cache.yisu.com/upload/information/20210524/357/973.png)]

  • Go語言實現示例如下:

    /** * Author: ClassmateLin * Site: https://www.classmatelin.top * mail: classmatelin.site@gmail.com * Date: 2021/4/26 21:32 */package mainimport ("fmt")type RoundRobin struct {     
    	servers []string
    	current int}/** 獲取下一個服務器 */func (R *RoundRobin) next() string {     
    	R.current++
    	R.current = R.current % len(R.servers) // 訪問到最后一個服務器之后,重置會第一臺。 5%5=0。return R.servers[R.current]}func main() {     
    
    	r := &RoundRobin{     
    		servers: []string{     "192.168.10", "192.168.11", "192.168.12"},
    		current: -1,}for i := 0; i < 10; i++ {     
    		fmt.Printf("| %d | %s |\n", i + 1, r.next())}}


加權輪詢法

  • 每臺后端服務器的配置可能不太一樣,有些性能好,能處理的請求多, 有些則性能比較差,能處理的請求較少。

  • 它們的抗壓能力不相同,因此按順序的分配服務器的話導致性能好的服務器無法發揮最大作用,性能差的服務器壓力太大。

  • 那么加權輪詢法可以解決這個問題,給性能好的服務器分配較高的權重,性能差的服務器分配較低的權重。

  • go語言實現的平滑的加權輪詢法:

/** * @Author: ClassmateLin * @Site: https://www.classmatelin.top * @Email: classmatelin.site@gmail.com * @Date: 2021/4/27 22:44 */package mainimport "fmt"type Server struct {   
	host string  // 主機地址
	weight int // 配置的權重
	currentWeight int  // 當前權重}func getSever(servers []*Server) (s *Server)  {   

	allWeight := 0 // 總權重for _, server := range servers {   if server == nil {   return nil}// 每一輪選擇都用自身的權重加到當前權重
		allWeight += server.weight
		server.currentWeight += server.weight		// 當前未選中節點或當前節點比之前選中的節點權重高,那么更新當前選中的節點if s == nil || server.currentWeight > s.currentWeight{   
			s = server		}}

	s.currentWeight -= allWeight	return}func main() {   
	servers := []*Server{   {   "192.168.10.10", 5, 0},{   "192.168.10.11", 2, 0},{   "192.168.10.12", 1, 0},}for i := 0; i < 20; i++ {   
		server := getSever(servers)if server == nil {   continue}

		fmt.Printf("| %s | %d |\n", server.host, server.weight)}}

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-eVhLqR1j-1619539822633)(https://cache.yisu.com/upload/information/20210524/357/975.png)]

  • 平滑是指什么?例如有以下三臺服務器:

A: {   host:"192.168.10.10", "weight": 3}B: {   host:"192.168.10.11", "weight": 1}C: {   host:"192.168.10.12", "weight": 1}

如果出現的序列為AAABC, 可能會給第一臺機器造成壓力過大。如果出現的序列為ABACA,避免同時造成同一臺服務器壓力過大的問題,就是平滑的。)

隨機法

  • 隨機法就是通過隨機算法,從服務器列表中隨機地選取一臺服務器進行訪問。隨著客戶端調用服務器的次數增加到一定數量級別,每臺服務器的平均訪問次數跟輪詢法的次數相近,也就是說趨近于輪詢法。

  • go實現示例:

/** * @Author: ClassmateLin * @Site: https://www.classmatelin.top * @Email: classmatelin.site@gmail.com * @Date: 2021/4/27 22:44 */package mainimport ("fmt""math/rand")type Random struct {   
	servers []string}func (R *Random) next() string {   return R.servers[rand.Intn(len(R.servers))]}func main()  {   
	r := Random{   
		servers: []string{   "192.168.10.10", "192.168.10.11", "192.168.10.12"},}for i := 0; i < 10; i++ {   
		fmt.Println(r.next())}}

關于Go語言中怎么實現一個負載均衡算法就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

济源市| 永仁县| 大足县| 松桃| 商水县| 宁武县| 孟州市| 阳泉市| 南部县| 井陉县| 句容市| 恩施市| 东安县| 合作市| 环江| 新平| 龙陵县| 昌黎县| 彩票| 阿克| 桃源县| 宣汉县| 平安县| 靖西县| 呼玛县| 家居| 商城县| 南京市| 富川| 临武县| 涞源县| 永川市| 东海县| 剑川县| 绥化市| 拉孜县| 依兰县| 静宁县| 黑龙江省| 乐平市| 卢氏县|