1、我们在前面写过“随机算法”来实现简单的负载均衡。
https://blog.youkuaiyun.com/github_26672553/article/details/99701928
用过nginx配置负载均衡,可能会写过类似这样的配置:
upstream lb {
server xxxxxx1 weight=1
server xxxxxx2 weight=2
}
这表示server1和server2的比重为1:2
2、在go里我们也可以简单实现
#以1:2为例,我们构建一个切片
[011]
#然后随机去一个索引
3、下面开始具体实现
要给HttpServer服务添加权重配置,那么首先需要修改下面代码:
//目标server类
type HttpServer struct {
Host string
Weight int
}
//初始化HttpServer对象
func NewHttpServer(host string, weight int) *HttpServer {
return &HttpServer{
Host: host, Weight: weight}
}
这样在创建server的时候传递weight参数作为权重参数:NewHttpServer("http://localhost:9091", 1)
4、包里有个init()函数,当引入包的时候会自动执行此函数。
我们整理一下代码:把添加httpserver和用于实现权重分配的切片的创建都写在这个函数里:
//定义负载均衡对象
var LB *LoadBalance
// 定义用于之后加权随机计算的切片
var ServerIndices []int
//引入这个包就会自动执行这个函数
func init() {
LB = NewLoadBalance()
//给其添加2个服务
//这里写死,常规做法是引入配置文件
LB.AddServer(NewHttpServer("http://localhost:9091", 1))
LB.AddServer(NewHttpServer("http://localhost:9092", 2))
//下面代码实现了 [0 1 1]
//9091这个httpServer权重为1,9092这个httpServer权重为2
for index, server := range LB.Servers{
if server.Weight > 0 {
for i := 0; i < server.Weight; i++ {
ServerIndices = append(ServerIndices, index)
}
}
}
fmt.Println(ServerIndices) //[0 1 1]
}
这段代码是核心,首先是创建负载均衡对象,然后往里添加server,最后循环取出server根本权重值组装[0 1 1]这样的切片。
4、下面就是加权随机算法,也就是先从ServerIndices切片中随机取索引,然后根据索引取出ServerIndices切片的值,然后把该值作为多个server的索引,取出一个server。
//加权随机算法
func (this *LoadBalance)
加权随机算法实现负载均衡

本文介绍了如何在Go语言中实现加权随机算法的负载均衡。通过创建带有权重的HttpServer服务,利用随机数生成器结合权重比例选择服务器,以此达到更智能的负载效果。示例代码展示了具体实现过程,包括创建服务器、设置权重和加权随机选择服务器的逻辑。
最低0.47元/天 解锁文章
287

被折叠的 条评论
为什么被折叠?



