《深入分析JAVA web技术内幕》 之 CDN和Load balance

来源:互联网 发布:linux目录结构 编辑:程序博客网 时间:2024/06/17 03:13

CDN

context delivery Network,内容分布式网络,一种先进的流量分配网络,一个比喻,CDN=mirror + cache + GSLB。

主要用于web中请求的静态数据,如图片,CSS,JS,静态页面等,用户从主站请求到动态数据后,从CDN上下载静态的文件,

其架构如下图:


1、首先向local DNS server发起请求,经过一系列迭代操作,最终到达该域名的注册域名解析服务器上去解析(一般每个公司都有一个指定的域名解析服务器),

2、这时,该注册域名解析服务器会把域名重新CNAME到CDN中的GTM,再有这个负载均衡将距离用户最近的CDN节点返回给用户。

3、拿到了CDN节点的解析结果,用户就去这个节点上去下载静态数据了,如果这节点上得数据不存在,那么再去源站上去获取文件,再返回给用户。


LB load balance

一、什么是负载均衡?

顾名思义,将多个任务分摊到多个节点上处理,提高系统的并发处理能力,负载均衡是个很广泛的概念,由路由协议的负载均衡ECMP协议等,这个我们讨论的是web负载均衡,是指能够分担http请求的负载均衡技术。常见的web负载均衡包括DNS轮询,IP负载均衡和CDN。

二、基本原理

任何的负载均衡技术都是想建立一种一对多的映射机制,将一个请求的入口映射到多个处理请求的节点,然后分而治之,divide and conquer。采用不同的映射处理,形成不同的负载技术。

1、DNS轮询

DNS轮询是最简单的负载均衡方式。以域名作为访问入口,通过配置多条DNS A记录使得请求可以分配到不同的服务器。在DNS中为多个地址配置同一个名字,因而查询这个名字的客户机将得到其中一个地址,从而使得不同的客户访问不同的服务器,达到负载均衡的目的。 

DNS负载均衡是一种简单而有效的方法,但是它不能区分服务器的差异,也不能反映服务器的当前运行状态。当使用DNS负载均衡的时候,必须尽量保证不同的客户计算机能均匀获得不同的地址。由于DNS数据具备刷新时间标志,一旦超过这个时间限制,其他DNS服务器就需要和这个服务器交互,以重新获得地址数据,就有可能获得不同IP地址。因此为了使地址能随机分配,就应使刷新时间尽量短,不同地方的DNS服务器能更新对应的地址,达到随机获得地址,然而将过期时间设置得过短,将使DNS流量大增,而造成额外的网络问题。DNS负载均衡的另一个问题是,一旦某个服务器出现故障,即使及时修改了DNS设置,还是 要等待足够的时间(刷新时间)才能发挥作用,在此期间,保存了故障服务器地址的客户计算机将不能正常访问服务器。

2、CDN

上面已经介绍了,该方案的缺点是很难建立大量的缓存节点,费用高昂

3、IP负载均衡

IP负载均衡是基于特定的TCP/IP技术实现的负载均衡。比如NAT、DR、Turning等。是最经常使用的方式。

IP负载均衡可以使用硬件设备,也可以使用软件实现。硬件设备的主要产品是F5-BIG-IP-GTM(简称F5),软件产品主要有LVS、HAProxy、NginX。其中LVS、HAProxy可以工作在4-7层,NginX工作在7层。硬件负载均衡设备可以将核心部分做成芯片,性能和稳定性更好,而且商用产品的可管理性、文档和服务都比较好。唯一的问题就是价格。

软件负载均衡通常是开源软件。自由度较高,但学习成本和管理成本会比较大。这里仅仅介绍软件负载均衡。

3.1 LVS

Linux virtual server,基于不同的网络技术,有VS/NAT,VS/TUN,VS/DR。

3.2 VS/NAT

基于NAT协议实现的负载均衡技术,原理就是改写报文头部的源地址,将报文发送到NAT主机,该主机将报文的源地址改写成NAT主机的一个合法地址,然后发送出去,当收到报文时,在根据原来改写的规则,将地址改回原来的地址,来回都要修改地址,这里NAT协议这里不再介绍,可以自己查看。VS/NAT原理如下

  1. 客户通过Virtual IP Address(虚拟服务的IP地址)访问网络服务时,请求报文到达调度器
  2. 调度器根据连接调度算法从一组真实服务器中选出一台服务器,将报文的目标地址Virtual IP Address改写成选定服务器的地址,报文的目标端口改写成选定服务器的相应端口,最后将修改后的报文发送给选出的服务器。

  3. 真实的服务器处理请求,并将响应报文发到调度器。

  4. 调度器将报文的源地址和源端口改为Virtual IP Address和相应的端口
  5. 调度器将修改过的报文发给用户
在VS/NAT的集群系统中,请求和响应的数据报文都需要通过负载调度器,当真实服务器的数目在10台和20台之间时,负载调度器将成为整个集群系统的新瓶颈。大多数Internet服务都有这样的特点:请求报文较短而响应报文往往包含大量的数据。如果能将请求和响应分开处理,即在负载调度器中只负责调度请求而响应直接返回给客户,将极大地提高整个集群系统的吞吐量。比如IP隧道技术

3.3、VS/TUN

原理如下:


3.4、VS/DR

DR(Direct Routing, 直接路由), 路由器学习路由的方法之一。路由器对于自己的网络接口所直连的网络之间的通信,可以自动维护路由表,而且不需要进行路由计算。

直接路由通常用在一个三层交换机连接几个VLAN的情况,只要设置直接路由VLAN之间就可以通信,不需要设置其他的路由方式。VS/DR(Virtual Server via Direct Routing)是基于直接路由实现负载均衡的方法。其架构如下图所示:


跟VS/TUN方法相同,VS/DR利用大多数Internet服务的非对称特点,负载调度器中只负责调度请求,而服务器直接将响应返回给客户,可以极大地提高整个集群系统的吞吐量。VS/DR要求调度器和服务器组都必须在物理上有一个网卡通过不分段的局域网相连,即通过交换机或者高速的HUB相连,中间没有隔有路由器。VIP地址为调度器和服务器组共享,调度器配置的VIP地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面是不可见的,只是用于处理目标地址为VIP的网络请求。





0 0