文章目录
  1. 防火墙的结构与原理
  2. 负载均衡
  3. 缓存服务器
    1. 缓存服务器的工作过程
  4. 内容分发服务

防火墙的结构与原理

防火墙的基本思路:只允许发往特定服务器的特定应用程序的网络包通过,屏蔽其他的网络包。其中最主流的方式为包过滤,它根据源IP与目的IP、源端口与目的端口、控制位等信息来判断是否允许网络包通过。

负载均衡

若对服务器的访问量上升,则需要多台服务器来分担负载,即分布式架构。要采用这种方法,需要一种机制将客户端发送的请求分发到不同的服务器上,最简单的方式是通过DNS服务器来分配——由于客户端访问Web服务器时需要先向DNS服务器查询Web服务器的IP地址,这时在DNS服务器中对Web服务器的域名填写多个IP地址,则每次查询时DNS服务器都会按顺序(循环地)返回不同的IP地址,即轮询。但是,DNS服务器不能确认某个IP地址对应的Web服务器是否正常工作,因此,如果某台Web服务器出现故障,DNS仍然会给客户端返回这台Web服务器的IP地址,那么客户端发送的请求就无法被处理。

另外,由于一些操作需要发送多次HTTP请求,这就导致需要在一个Web服务器上完成这多个请求,然而轮询会把这些HTTP请求分发到不同的Web服务器上。

为避免上述问题,需要使用名为负载均衡器的设备,对于相关HTTP请求消息,客户端发送HTTP请求消息时在表单里面加上表示关联的信息,或者对HTTP规格进行扩展,在HTTP头部字段加上用来判断相关性的信息。若请求消息相关,负载均衡器将不考虑Web服务器的负载而是必须将相关的请求发送到同一Web服务器。

同样地,要使用负载均衡器,要将Web服务器域名对应的IP在DNS服务器中设置为负载均衡器的IP。

缓存服务器

Web服务器需要检查网址与访问权限,还有一些在页面填充数据的操作,因此将页面返回客户端的时间较长;相对地,缓存服务器只需要将保存在磁盘上的数据读取出来发送给客户端即可。使用缓存服务器既减轻了Web服务器的负担,又缩短了请求响应的时间。

缓存服务器的工作过程

与负载均衡器相同,缓存服务器也需要代替Web服务器被注册到DNS服务器上;因此,对于使用了缓存服务器的Web服务器,客户端的请求会到达缓存服务器,缓存服务器接收请求消息,接收操作下一章介绍;然后,缓存服务器会检查请求消息的内容,判断请求的数据是否已经在缓存中;

  • 不在缓存中。缓存服务器在HTTP请求消息头部添加一个Via字段,表示这个消息经过缓存服务器转发,然后将消息转发给Web服务器(如果有多台Web服务器,可根据请求消息中URL的目录名来判断),示意图如下:

 

缓存服务器转发请求消息时,缓存服务器相当于客户端,会创建套接字并连接Web服务器的套接字,然后转发请求消息并接收Web服务器的响应消息,然后在响应消息中加上Via字段表示响应消息是经缓存服务器中转的;最后,响应消息会保存在缓存服务器中,并记录保存的时间。

  • 在缓存中。缓存服务器在HTTP请求头部添加一个If-Modified-Since字段(内容为缓存数据被保存的时间)并将请求转发给Web服务器,Web服务器比较请求数据最后的更新时间与缓存数据被保存的时间来判断Web服务器上的请求的数据与缓存服务器上保存的请求的数据是否一致。
    • 若一致。缓存服务器将请求的数据返回给客户端,同样加上Via字段;示意图如下。
    • 若不一致。Web服务器返回最新的请求数据,缓存服务器加上Via字段转发给客户端。

 

这种在Web服务器端缓存数据的代理机制,称为反向代理。

透明代理:缓存服务器在判断转发的目标Web服务器时,还可以查看请求消息头部,从而可以将消息转发给任一Web服务器。

内容分发服务

缓存服务器放在Web服务器端虽然可以减轻Web服务器的负载,但无法减少互联网中的流量。从这一点来看,将缓存服务器放在客户端更有效,但是Web服务器的运营者无法控制客户端的缓存服务器。于是出现了内容分发服务,一些专门从事相关服务的厂商来部署缓存服务器,并租借给Web服务器运营者。

而互联网中有很多缓存服务器,需要找到离客户端最近的一个。

  • 一种方法是DNS服务器使用路由表的路由信息计算大致距离,并向客户端返回距离(收到客户端查询请求的DNS服务器)最近的缓存服务器的IP地址。这种计算比较粗略;
  • 另一种方法是使用重定向服务器分配访问目标;当使用重定向告知客户端最近的缓存服务器时,首先需要将重定向服务器注册到DNS服务器上。于是,客户端会将HTTP请求消息发送到重定向服务器上。重定向服务器和刚才一种方法中的DNS服务器一样,收集了来自各个路由器的路由信息,并根据这些信息找到离客户端最近的缓存服务器,然后将缓存服务器的地址放到Location字段中返回响应。这样,客户端就会重新去访问指定的缓存服务器了。

同时,每次客户端发送请求时缓存服务器都需要询问Web服务器缓存的数据是否一致,而更好的方法是每次Web服务器中数据发生改变时主动联系缓存服务器,使缓存服务器上的内容时刻保持最新。