我正在尝试制作一种算法,该算法可以按预定义的比率循环真实事物,在我的情况下是后端服务器。
例如我有 2 个后端服务器
type server struct {
addr string
ratio float64
counter int64
}
// s2 is a beast and may handle 3 times the requests then s1 *edit
s1 := &server{":3000", 0.25}
s2 := &server{":3001", 0.75}
func nextServer() {
server := next() // simple goroutine that provides the next server between s1 and s2
N := server.counter / i
if float64(N) > server.ratio {
//repeat this function
return nextServer()
}
server.counter += 1
}
for i := 0; i < 1000; i++ {
nextServer()
}
s1 有 250 作为计数器(处理的请求)
s2 很大,所以他有 750 作为计数器(请求处理)
这是我得到的一个非常简单的实现,但是当我像 10000 时,它会在 nextServer() 中不断循环,因为 N 总是 > server.ratio。
只要我在 5000 左右,它就完美无缺。但我认为有更好的算法来循环比率。
如何使这个简单而扎实?
喵喵时光机
相关分类