服务端的局域网设置与负载均衡

5.1 WEB服务的部署地点

常见的WEB部署的方式有三种:

  • 和路由器直接的方式,此时服务器在互联网上是处于“裸露”的状态而且IP地址也不足;
  • 通过防火墙的连接,防火墙会先对包进行检查,只转发允许的包;
  • 部署在接入网的数据中心,因为比较接近POP或者IX 所以速度高,安全并且维护成本也低。

5.2 防火墙结构和原理

  1. 基本思路 : 只允许发往特定服务器上特定程序的包,其余都屏蔽。

  2. 常见实现方式:

    • 包过滤
    • 应用网关
    • 电路层网关
  3. 对于包过滤是通过检测报的头部信息来实现的,字段包括:

    • MAC头部的发送方MAC地址;
    • IP头部的发送/接收IP,协议号;
    • TCP/UDP头部 : 发送方/接收方的端口号;
    • TCP 控制位(ACK,SYN,PSH,RST。FIN等)
  4. 端口限定应用程序。比如说在服务端仅仅是 80 或者8080 端口的可以进入,其余的都必须屏蔽;

  5. 控制位判断连接的方向

    • 举例:如果禁止服务器访问互联网,发送方自己的端口是 80 并且 SYN = 1,ACK = 0 的时候禁止,因为这个时候是服务器作为客户端向外请求建立连接。
    • 如果是 UDP作为连接是无法判断方向的所以只能是要么全部保留,要么是全部屏蔽。
  6. 从公司内网访问公开区域的规则

    • 这里的内网相当于家庭中的路由下面的局域网,公开区域相当于默认路由到分配的公网IP地址这一段。
    • 此时要配置两个包转发规则,一个是从内网到公开区域的规则,一个是从公开区域到互联网的包转发规则。
  7. 从外网访问公司的内网

    • 一般为了安全是不允许从外网访问公司的内网。
    • 在一般情况下,包过滤防火墙具备这地址转换的功能来实现从外部互联网访问内部网络。
    • 个人理解:外网,无法直接访问内部局域网;那么外网访问路由,路由根据信息转给内网对应的设备。
  8. 在通过防火墙的时候,如果是允许那么就像路由一样进行包转发操作

    如果是需要屏蔽的包不进行转发并且将包的相关信息(包括目的IP地址,源IP地址等)记录下来。

    那跟路由器的功能差不多为何不是使用路由呢?

    • 原因很简单:路由内存小,增加记录负担更大,占用更多的带宽。
  9. 仅仅是通过检查起点和终点是不能完全抵御攻击的,因为这种办法不能对数据的内容进行检查,所以有两个常见的解决方法:

    • 一个是通过修复WEB服务器的Bug
    • 第二个是设置包内容检查的设备软件
    • 其中最为有效的是 第一种。

5.3 通过请求平均分配给多台服务器实现负载均衡

  1. 在单台WEB发服务器访问量过多或者需要运行的程序过多的时候,可以通过提高提高宽带或者提供性能更好的服务器来实现,但是还是会有到达瓶颈的时候,那么设置三台服务器配置三个IP地址就解决了。

    此时的问题是:三个IP地址到底是访问哪一个呢?

    • 最简单的方式是轮询,所谓轮询是指的 在 WEBDNS 服务器上设置三个IP地址指向同一个域名。每次会返回不同的IP地址。
      • 第一个问题 : DNS不知道这个服务器的情况,即便是服务器瘫痪了,依旧会返回指定的IP地址。
      • 第二个问题 : 在跨页面操作的时候,不能连续操作
        • 比如商城中在这个页面下单,在另一个页面支付,两次请求到不同的服务器上
  2. 使用负载均衡器

    • 此时WEBDNS服务器的注册IP地址是负载均衡器的IP地址,负载均衡器与多个WEB服务器相连
    • 判断的方式:
      • 当不跨页面操作的时候,定期采集服务器CPU、内存等或者提前按比例分配;
      • 当跨页面(提交表单或者HTTP头部的控制信息)的时候是直接发送到同一个WEB服务器上。

5.4 使用缓存服务器分担负载

  1. 缓存服务器是什么?

    • 介于WEB服务器与客户端之间进行数据的中转。

    • WEB 服务器返回的数据保存在磁盘上,客户端请求的时候,是代替WEB服务器把磁盘中的内容返回给客户端

    • 缓存并非是永久的,CGU 程序每次产生不同的数据也不能进行数据的缓存。

    • 简言之,缓存只能缓存静态的文件不能缓存动态的数据

  2. 如何更新:通过时间来管理内容

    • 缓存服务器的工作过程:
      • 先代替 WEB 服务器注册到 DNS 服务器上,
      • 客户端发起请求先经过缓存服务器,
      • 缓存服务器接收请求消息并查看在本地是否有缓存。
    • 当数据没有在缓存服务器的时候
      • 缓存服务器将请求转发给服务器,
      • WEB 服务器通过响应机制将数据发送给缓存服务器,在HTTP的头文件中会添加 via 字段
      • 缓存服务器将响应的数据发送给客户端的同时并且保存在本地中。
    • 当数据在缓存服务器的时候,仅会向服务器发送一个探测的包,如果服务器数据有更新与上部相同,如果与缓存内容一致则直接发送给客户端。
    • 一般一个缓存服务器对应着多个 WEB 服务器,那么访问的时候会根据请求的URL的目录名来判断访问的哪一个WEB服务器。
      • 缓存服务器相对于WEB服务器是客户端,客户端相对应缓存服务器是WEB服务器,添加via头部代表着经过了缓存服务器。
      • 缓存服务器是以 WEB服务的身份向客户端发送响应消息,并且将响应消息保存在缓存中,记录保存的时间。
    • 在缓存服务器端没有的时候具体的过程是:
      • 缓存服务器将请求消息发送给服务器的同时,
      • 请求消息的头部会添加 If-Modified-since 字段,
      • WEB服务器根据其值与服务器端数据最后更新时间相比较。HTTP代码: 304
  3. 正向代理 参考资料 所谓的正向代理是代理客户端,隐藏了客户端,服务器不知道是谁在访问

    • 最早的时候其实就是在客户端的防火墙或者缓存服务器。

    • 过程如下:

      • 客户端将请求消息给代理,代理服务器伪装成客户端发送给WEB服务器。
      • 同时如果之前访问的时候可以直接从本地获取缓存的内容提高访问的速度。
    • 使用代理配置代理的IP地址,在WEB请求的时候并非是目录而是整个域名。

  4. 反向代理 所谓的反向代理是代理服务器,基本上是一个负载平衡器比如NGINX

  5. 透明代理 缓存服务器通过查看消息的包头部分来判断转发的目标,直接拦截TCP/IP,修改HTTP请求报文,直接发送到目的地址,客户端和服务端不需要知道代理服务器的存在。

5.5 内容分发服务

  1. 利用内容分发服务分担负载

    • 当缓存服务器放在WEB服务器的一端的时候,减少了WEB服务器的请求,但不会减少网络的请求,造成网络拥塞;
    • 当缓存服务器放在客户端的时候,服务器这端不能受到控制,不能够及时的更新缓存,同时客户端也不一定有缓存服务器。
  2. 此时比较折中的方案是WEB服务商与运营商达成合作将服务器放在互联网的边缘处,服务商能控制而且离客户端还近,但全球上千万家既伤心又伤财的,所以出现了一个新的网络提供商,叫做内容分发服务商,简称 CDN,Content Delivery Network

  3. 如何找到最近的缓存服务器呢?

    • 像负载均衡一样用DNS进行分配访问
      • 在只有一个IP地址的时候,无所谓是向客户端的DNS服务器还是向服务器端DNS服务器查找对有用的IP地址返回即可;
      • 但当是多个IP地址的时候可能会给分配到距离相对较远的IP地址。
    • 判断客户端与缓存服务器的距离
      • 先收集 缓存服务器的路由信息 WEB服务器端的DNS服务器上
      • 接着WEB服务器 DNS服务器根据路由信息查询 客户端DNS服务器的路由信息
      • 同时比对返回较近的地址。
  4. 通过重定向服务器来查询

    • 使用HTTP中的 Location 字段,将客户端访问引导到另一台服务器上叫做重定向
  • 过程:

    • 重定向服务器注册到WEB服务端的DNS服务器上,

    • 同时重定向服务器收集各个缓存服务器的各种路由信息,

    • 客户端进行请求的时候,服务端DNS服务器根据路由信息将最近的路由放在 Location 中作为回应。

    • 缺点是增加了HTTP请求的次数,但是优化最高。

  1. 关于缓存更新的方式
    • WEB服务器发生数据更新的时候会立即通知缓存服务器;
    • 对于CGI等动态数据,不能保存在缓存服务器中,所以要静态与动态的分离。

版权声明:本文为weixin_38089997原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。