前言
重定向技术,它们是如何工作的以及它们的负载均衡能力如何:
- HTTP 重定向
- DNS 重定向
- 任播路由
- IP MAC 转发
- IP 地址转发
- WCCP (Web 缓存协调协议)
- ICP (缓存间通信协议)
- HTCP(超文本缓存协议)
- NECP(网元控制协议)
- CARP(缓存阵列路由协议)
- WPAD(Web代理自动发现协议)
为什么要重定向
由于HTTP应用程序总是要做下列3件事情,所以在现代网络中重定向是普遍存在的:
- 可靠的执行 HTTP 事任
- 最小化时延
- 节约网络带宽
处于这些原因,Web内容通常分布在很多地方。这么做是出于可靠性的考虑。这样,如果一个位置出问题了,还有其他可用;如果客户端能去访问较近的资源,就可以更快地收到所有请求的内容,以降低响应时间;将目标服务器分散,还可以减少网络拥塞,可以将重定向当作一组有助于找到"最佳"分布式内容的技术。
通用的重定向方法
可以通过重定向技术将流量重定向到不同的(可能更优的)服务器,或者通过代理来转发流量。
- HTTP 重定向
- DNS 重定向
- 传播寻址
- 任播寻址
- IP MAC 转发以及 IP 地址转发
HTTP 重定向
客户端请求服务器,服务器返回一个 状态码在 300~399,高速服务器重定向,并且告诉重定向之后的地址。然后,客户端在对重定向地址发出请求,完成请求。
HTTP 重定向可以在服务器间引导请求,但它有以下缺点:
- 需要原始服务器进行大量处理来判断要重定向到哪台服务器上去,有时,发布重定向所需的处理量几乎与提供页面本身所需的处理量一样。
- 增加了用户时延,因为访问页面时要进行两次往返。
- 如果重定向服务器出故障,站点就会瘫痪。
由于存在这些弱点,HTTP 重定向通常都会与其他一种或多种重定向技术结合使用。
DNS 重定向
DNS 轮转,每一次请求都会在所有的ip中,轮转的分配ip地址。
DNS 对服务器的每次查询都会得到不同的服务器地址序列,所以DNS地址轮转会将负载分摊。但是,这种负载分摊并不完美,因为DNS查找的结果可能会被记住,并被各种应用程序,操作系统和一些简易的DNS服务器重用。很多Web浏览器都会对主机进行DNS查找,然后一次次地使用相同的地址,以减少DNS查找的开销,而且有些服务器也更愿意保持与同一台客户端的联系。另外,很多操作系统都会自行进行DNS查找,并将结果缓存,但并不是对地址进行轮转。因此,DNS轮转通常都不会平衡单个客户端的负载,一个客户端通常会在很长时间内连接到一台服务器上去。
尽管DNS没有对单个客户端的事务进行跨服务器副本的处理,但在分散多个客户端的总负荷方面它做的相当好。只要有大量具有相同需求的客户端,就可以将负载合理地分散到各个服务器上去。
其他基于DNS的重定向算法
- 负载均衡算法
有些DNS服务器会跟踪 Web 服务器上的负载,将负载最轻的 Web 服务器放在列表的最前面。 - 邻接路由算法
Web 服务器集群在地理上分散时,DNS服务器会尝试着将用户导向最近的Web服务器。 -
故障屏蔽算法
DNS服务器可以监视网络的状况,并将请求绕过出现服务器中断或其他故障的地方。
通常,运行复杂服务器跟踪算法的DNS服务器就是在内容提供者控制之下的一个权威服务器。
有一些分布式主机服务器会使用这个DNS重定向模型。对于那些要查找附近服务器的服务来说,这个模型的一个缺点就是,权威DNS服务器只能用本地DNS服务器的IP地址,而不能用由客户端的IP地址来做决定。
任播寻址
任播寻址仍然是项实验性技术。要使用分布式任播技术,服务器就必须"使用路由器语言",而且路由器必须能够处理可能出现的地址冲突,因为因特网地址基本上都是假定一台服务器只有一个地址的。(如果,没有正确的实现,可能会造成很严重的"路由泄漏的问题"。)分布式任播是一种新兴技术,可以为那些自己控制骨干网络的内容提供商提供一种解决方案。
IP MAC 转发
在以太网中,HTTP 报文都是以携带地址的数据分组的形式发送的。每个分组都有一个第四层地址,由源IP地址,目的IP地址以及TCP端口号组成,它是第四层设备所关注的地址。每个分组还有一个第二层地址,MAC(媒体访问控制地址),这是第二层设备(通常是交换机和Hub)所关注的地址。第二层设备的任务是接收具有特定输入MAC地址的分组,然后将其转发到特定的输出MAC地址上去。
IP 地址转发
在 IP 地址的转发过程中,交换机或其他第四层设备会检测输入分组中的 TCP/IP 地址,并通过修改目的 IP 地址(不是目的MAC地址),对分组进行响应的转发。与MAC转发相比,这么做的优点是目标服务器不需要位于一跳远的地方,只需要位于交换机的上游就行了,而且通常第三层的端到端因特网路由都会将分组传送到正确的地方。这种类型的转发也被称为 NAT (网络地址转换)。