那么如何实现负载均衡呢?回答这个问题之前,我们首先复习一下一次HTTP请求的过程
- 对域名进行DNS解析,得到IP地址
- 对这个IP发起TCP连接请求,三次握手
- 连接成功,发起HTTP请求
这三部中的每一步,都可以作为负载均衡的基础。也就是说,我们可以设计出三种负载均衡的策略。
- 域名解析阶段的负载均衡:利用客户端解析域名的时候,DNS服务器自动分配集群中的某台机器的IP给该用户。这样一来用户就被均匀地分配到了集群中的各台机器上。这种方法没有额外开销,因为负载均衡实际上在任何网络通信开始前就已经完成了。但不足之处是,每个用户实际的工况不一样。DNS负载均衡的粒度过于粗糙
- 传输层的负载均衡:在这类负载均衡中,DNS解析实际指向一个路由器。域名解析完成后,所有客户端的TCP请求发送到这个路由器上,再经路由器分配给集群中的各台机器。
- 应用层的负载均衡:这是粒度最细的一种负载均衡,同时对于路由器的计算能力要求也最高。此时路由器会检查数据包的内容,根据内容分发给不同的服务器。
当负载均衡都不能满足更大的客户端需求的时候,系统需要适时向集群中添加额外的机器。另一方面,当系统中可能出现资源过剩时,系统需要把多余的计算资源放回到云中,以供潜在的其他用户使用。这便叫做弹性伸缩。
网友评论