Go介面練習之負載均衡演算法

2021-10-02 13:33:27 字數 2727 閱讀 9386

web請求中,申請服務,為了避免多個服務都集中執行在乙個伺服器上,於是有了負載均衡,本文撰寫了隨機演算法和輪渡(順序)演算法

balance.go

package balance

// 負載均衡介面

type balance inte***ce

instance.go

package balance

import

("strconv"

)// 例項:主機 埠

type instance struct

// 建構函式

func

newinstance

(host string

,port int

)*instance

}// 獲取主機

func

(p *instance)

gethost()

string

// 獲取埠

func

(p *instance)

getport()

int// 重寫打string用於列印

func

(p *instance)

string()

string

mgr.go

package balance

import

("fmt"

)// 管理員

type balancemgr struct

// 例項化乙個管理員

var mgr = balancemgr

// 註冊乙個負載均衡演算法

func

(p *balancemgr)

registerbalancer

(name string

,b balance)

// 註冊乙個負載均衡演算法

func

registerbalancer

(name string

,b balance)

// ???

func

dobalance

(name string

,insts [

]*instance)

(inst *instance,err error

) fmt.

printf

("use %s balancer\n"

,name)

inst,err = balance.

dobalance

(insts)

return

}

random.go

package balance

import

("errors"

"math/rand"

)// 初始化函式 用來註冊

func

init()

)}// 隨機排程

type randombalance struct

// 實現介面

func

(p *randombalance)

dobalance

(insts [

]*instance,key ...

string

)(inst *instance,err error

) lens :=

len(insts)

index := rand.

intn

(lens)

inst =insts[index]

return

}

randrobin.go

package balance

import

("errors"

)// 初始化函式 用來註冊

func

init()

)}// 順序排程

type roundrobinbalance struct

// 實現介面

func

(p *roundrobinbalance)

dobalance

(insts [

]*instance,key...

string

)(inst *instance,err error

) lens :=

len(insts)

if p.curindex >= lens

inst = insts[p.curindex]

return

}

main.go

package main

import

("go_dev/day06/work/balance"

"fmt"

"time"

"math/rand"

"os"

)func

main()

// 根據不同配置選擇不同負載均衡演算法

var balancename =

"random"

iflen

(os.args)

>

1// 模擬請求

for fmt.

println

(inst)

time.

sleep

(time.second)

}}

負載均衡演算法之輪詢

最近的工作事情比較少,於是就開是瞎折騰了 負載均衡大家一定不陌生了,一句話就是,人人有飯吃,還吃得飽,它的核心關鍵字就在於均衡,關於負載均衡大家基本可以脫口而出常見的幾種,輪詢,隨機,雜湊,帶權值的輪詢,客戶端請求數等等 作為最簡單的一種負載均衡策略,輪詢的優點顯而易見,簡單,並且在多數的情況是,基...

負載均衡 serializable介面

負載均衡 1.dns做負載,通過給客戶端解析不同的ip位址,讓客戶端的流量直接到達各個伺服器。但是這種方法有乙個很大的缺點就是延時性問題,在做出排程策略改變以後,由於dns各級節點的快取並不會及時的在客戶端生效,而且dns負載的排程策略比較簡單,無法滿足業務需求,因此就出現了負載均衡。客戶端的流量首...

負載均衡演算法

輪循演算法 roundrobin 說明 每一次來自網路的請求輪流分配給內部中的每台伺服器,從1至n然後重新開始 舉例 適合於伺服器組中的所有伺服器都有相同的軟硬體配置並且平均服務請求相對均衡的情況 最少連線演算法 leastconnection 說明 客戶端的每一次請求服務在伺服器停留的時間都可能會...