前言
Github传送门
golang在工业中用途最多的方面就是编写中间件以及上游设施,因此切入golang的话,了解其网络库是很有必要的。因此,笔者上手了自带的net包,花了一天左右的时间写了个简单的负载均衡(Load Balancer),也算是能用啦= =
用net包写负载均衡
我们在浏览网页时,通常会遇到服务方故障的情况,提示我们nginx、apache之类的字眼。这些,便都是负载均衡的工作了。
一个负载均衡可能会包含以下的功能:
- 负载调节
- 上游连接分配(策略:轮流(roundrobin)、最少连接等)
- 权重管理
- 健康检查(业务是否OK)
- 协议支持
- tcp、udp
- http、https
- 路由代理
- 数据缓存与压缩
- 安全
- 限流,DDOS防护
- 备用负载均衡
为了实践一下(培养手感),笔者用net包弄了一个基于tcp的简易负载均衡,实现了上述最基础的负载调节与健康检查功能。
首先设计一个struct: