引言
你说妹子太多了,压力有点大,身体有点吃不消,有点支持不住了。
于是乎,你找了几个兄弟说:哥们,帮忙分担一下压力呗。于是你开始把这些妹子推向你兄弟的魔爪,把妹子一个个的介绍给你不同的兄弟,并且尽力撮合他们。PS: 当然自己得留点。
这大概就是负载均衡,你既充当着负载均衡器, 也充当着服务器, 你的兄弟就是个服务器。你的压力相比之下减少了很多,这就是负载均衡的作用。
用专业术语来说:
- 负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
- 负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
简单点来说:
- 其实就是请求太多,一台服务器处理不过来,把它分摊到多台服务器处理。
那么如何将请求分摊到多台服务器?
接下来一一介绍常见的几种负载均衡算法。
轮询法
- 将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eAolzy2P-1619539822631)(https://www.classmatelin.top/images/20210427234214.png)]
-
Go语言实现示例如下:
/** * Author: ClassmateLin * Site: https://www.classmatelin.top * mail: classmatelin.site@gmail.com * Date: 2021/4/26 21:32 */ package main import ( "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