這篇文章將為大家詳細講解有關Go語言中怎么實現一個負載均衡算法,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
10年的修文網站建設經驗,針對設計、前端、開發、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。全網整合營銷推廣的優勢是能夠根據用戶設備顯示端的尺寸不同,自動調整修文建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現優雅布局與設計,從而大程度地提升瀏覽體驗。成都創新互聯從事“修文網站設計”,“修文網站推廣”以來,每個客戶項目都認真落實執行。
將請求按順序輪流地分配到后端服務器上,它均衡地對待后端的每一臺服務器,而不關心服務器實際的連接數和當前的系統負載。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-eAolzy2P-1619539822631)(/upload/otherpic69/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)(/upload/otherpic69/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語言中怎么實現一個負載均衡算法就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
標題名稱:Go語言中怎么實現一個負載均衡算法
URL網址:http://vcdvsql.cn/article24/pdsece.html
成都網站建設公司_創新互聯,為您提供網站內鏈、做網站、網站策劃、全網營銷推廣、響應式網站、建站公司
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯