负载均衡笔记

负载均衡算法

随机分配

缺点:

随机取适用的场景是:各服务器处理能力都差不多(实际上是不太可能的)
不能满足我们 "能者多劳" 的诉求

func main() {
	servers := []string{
		"127.0.0.1:8080",
		"127.0.0.1:8081",
		"127.0.0.1:8082",
		"127.0.0.1:8083",
		"127.0.0.1:8084",
		"127.0.0.1:8085",}
	for i := 0; i < 10; i++ {
		fmt.Println(getServer1(servers))
	}
}


func getServer1(servers []string) string {
	return servers[rand.Intn(len(servers))]

加权随机分配(能者多劳)

func main() {
	servers_m := map[string]int{
		"127.0.0.1:8080": 2,
		"127.0.0.1:8081": 8,
		"127.0.0.1:8082": 1,
		"127.0.0.1:8083": 9,
		"127.0.0.1:8084": 4,
		"127.0.0.1:8085": 6,
	}
	m := make(map[string]int)
	for i := 0; i < 10000; i++ {
		ip := getServer2(servers_m)
		v, ok := m[ip]
		if ok {
			m[ip] = v + 1
		} else {
			m[ip] = 1
		}
	}
	fmt.Printf("%+v", m)
}

func getServer2(servers map[string]int) string {
	// 所有权重总和,作为坐标轴
	var totalWeight int
	for _, v := range servers {
		totalWeight += v
	}

	// 随机生成坐标点
	offset := rand.Intn(totalWeight)
	// 找寻坐标点在坐标轴的位置 以及对应的IP
	for ip, weight := range servers {
		if offset < weight {
			return ip
		}
		offset -= weight
	}
	return ""
}

// 控制台打印结果
map[
127.0.0.1:8080:643 
127.0.0.1:8081:2723 
127.0.0.1:8082:346 
127.0.0.1:8083:2970 
127.0.0.1:8084:1337 
127.0.0.1:8085:1981
]

加权轮询

代码是有问题的,golang没有LinkedHash

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Nginx可以通过四层(TCP/UDP)负载平衡来分配流量到不同的后端服务器。这种方式可以用于负载平衡非Web协议的应用程序,例如数据库和DNS服务器。 以下是针对TCP/UDP负载平衡的一些常见配置选项: 1. upstream 定义一个后端服务器池,用于存储实际的服务器。可以通过ip地址,域名或unix域套接字来指定服务器。例如: ``` upstream backend { server 192.168.1.100:3306; server 192.168.1.101:3306; } ``` 2. server 定义一个后端服务器及其端口号。它必须位于upstream块中。例如: ``` upstream backend { server 192.168.1.100:3306; server 192.168.1.101:3306; } server { listen 3306; proxy_pass backend; } ``` 3. hash 根据客户端IP地址,将请求路由到一个固定的后端服务器。这样,同一IP地址的请求将总是被路由到同一台服务器。例如: ``` upstream backend { hash $remote_addr; server 192.168.1.100:3306; server 192.168.1.101:3306; } ``` 4. least_conn 将请求路由到当前连接数最少的服务器。这样可以确保每个服务器的负载都是均衡的。例如: ``` upstream backend { least_conn; server 192.168.1.100:3306; server 192.168.1.101:3306; } ``` 5. ip_hash 根据客户端IP地址的哈希值,将请求路由到一个固定的后端服务器。这样,同一IP地址的请求将总是被路由到同一台服务器。例如: ``` upstream backend { ip_hash; server 192.168.1.100:3306; server 192.168.1.101:3306; } ``` 总之,Nginx的TCP/UDP负载平衡功能非常强大,并且可以根据不同的负载均衡算法来满足不同的求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值