lylzsu 2012-07-11
负载均衡
负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无需其他服务器的辅助。通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接受到请求的服务器独立地回应客户的请求。均衡负载能够平均分配客户请求到服务器阵列,藉此快速获取重要数据,解决大量并发访问服务问题。这种集群技术可以用最少的投资获得接近于大型主机的性能。
反向代理
反向代理(ReverseProxy)是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结构返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
常见的Web负载均衡方法
1.用户手动选择方式
这是一种较为古老的方式,通过在主站首页入口提供不同线路、不同服务器链接的方式,来实现负载均衡。这种方式在一些提供下载业务的网站中比较常见,例如:华军软件园。
2.DNS轮询方式
大多域名注册商都支持对同一主机名添加多条A记录,这就是DNS轮询,DNS服务器将解析请求按照A记录的顺序,随机分配到不同的IP上,这样就完成了简单的负载均衡。
DNS轮询的成本非常低,在一些不重要的服务商,被经常使用。
虽然DNS轮询成本低廉,但是,DNS负载均衡存在两个明显的缺点
1)可靠性低。
2)负载分配不均衡。
3.四/七层负载均衡设备
由于DNS轮询的缺点,一些对可靠性要求较高的服务器集群,则通过采用四/七层负载均衡设备来实现服务器的负载均衡。
现代负载均衡技术通常操作与OSI网络模型的第四层或第七层。第四层负载均衡将一个Internet上合法注册的IP地址映射为多个内部服务器的IP地址,对每个TCP连接请求动态使用其中一个内部IP地址,达到负载均衡的目的。在第四层交换机中,此种均衡技术得到广泛的应用,一个目标地址是服务器群VIP(虚拟IP,VirtualIPaddress)连接请求的数据包流经交换机。交换机根据源端和目的IP地址、TCP或UDP端口号和一定的负载均衡策略,在服务器IP和VIP间进行映射,选取服务器群中最好的服务器来处理连接请求。
第七层负载均衡控制应用层服务的内容,提供了一种对访问流量的高层控制方式,适合对HTTP服务器群的应用。第七层负载均衡技术通过检查流经的HTTP报头,根据报头内的信息来执行负载均衡任务。
常见的四/七层负载均衡均衡设备
1)硬件四/七层负载均衡交换机:F5BIG-IP、CitrixNetScaler、Radware、CiscoCSS、Foundry等产品,这些产品价格不菲,高达几十万元人民币。
2)软件四层负载均衡
软件四层负载均衡的代表作品为LVS(LinuxVirtualServer)。
3)软件七层负载均衡
软件的七层负载均衡大多基于HTTP反向代理方式,代表产品有Nginx、L7SW(Layer7switching)、HAProxy等。
4)多线多地区智能DNS解析与混合负载均衡方式
以新浪首页(www.sina.com.cn)为例,负载均衡同时用到了“多线多地区智能DNS解析、DNS轮询、四/七层负载均衡交换机”等技术。智能DNS解析能够根据用户本地设置的DSN服务器线路和地区,将对同一个域名请求解析到不同的IP上。
OSI七层协议
1)物理层
物理层包括物理联网媒介,实际上就布线、光纤、网卡和其他用来把两台网络通讯设备连接在一起的设施。它规定了激活、维持、关闭通讯端点之间的机械特征、电气特征、功能特性及过程特性。虽然物理层不提供纠错服务,但它能够设定数据传输速率并检测数据出错率。
2)数据链路层
数据链路层的主要作用是控制网络层与物理层之间的通讯。它保证了数据在不可靠物理线路上进行可靠的传递。它把从网络层接收到的数据分割成特定的可被物理层传输的帧,保证了传输的可靠性。它的主要作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。它是独立于网络层和物理层的,工作时无需关心计算机是否正在运行软件还是其他操作。
数据链路层协议的主要内容包括:SDLC、HDLC、PPP、STP、帧中继等。
3)网络层
很多用户经常混淆第二层和第三层的界限,简单来说,如果你在讨论一个与IP地址、路由协议或地址解析协议(ARP)相关的问题,那么这就是第三层的问题。
网络层负责对子网间的数据包进行路由选择,它通过综合考虑发送优先权、网络拥塞程度、服务质量及可选路由的花费来决定一个网络中两个节点的最佳路径。另外,它还可以实现拥塞控制、网际互联等功能。
网络层协议的主要内容包括:IP、IPX、RIP、OSPF等
4)传输层
传输层是OSI模型中最重要的一层,它是两台计算机经过网络进行数据通讯时,第一个端到端的层次,起到缓冲作用。当网络层的服务质量不能满足要求时,它将提高服务,以满足高层的要求;而当网络层服务质量较好时,它只须进行很少的工作。另外,它还要处理端到端的差错控制和流量控制等问题,最终为会话提供可靠的、无误的数据传输。
传输层协议的主要内容包括:TCP、UDP、SPX等。
在IP协议栈中第四层是TCP(传输控制协议)和UPD(用户数据报协议)所在的协议层。TCP和UDP包含端口号。它可以唯一区分每个数据包包含哪些应用协议(例如HTTP、FTP、telnet等)。TCP/UDP端口号提供的附加信息可以为网络交换机所利用,四层交换机利用这种信息来区分包中的数据,这是第四层交换的基础。
5)会话层
会话层负责在网络中的两节点之间建立和维持通讯,并保持会话同步,他还决定通讯是否中断,以及通讯中断时决定从何处重行发送。
6)表示层
表示层的作用是管理数据的解密与加密,如常见的系统口令处理,当你的账号数据在发送前被加密,在网络的另一端,表示层将对接收到的数据解密。另外,表示层还要对图片和文件格式信息进行解码和编码。
7)应用层
简单来说,应用层就是为操作系统或网络应用程序提供访问网络服务的接口,包括文件传输、文件管理及电子邮件等的信息处理。
应用层协议的代表包括:Telnet、FTP、HTTP、SNMP等。
Nginx负载均衡服务器的双机高可用
双机高可用一般是通过虚拟IP(也成偏移IP)方式来实现的,基于Linux/Unix的IP别名技术。双机高可用方式目前可分为两种:第一种方式为一台主服务器加一台热备服务器,正常情况下主服务器绑定一个公网虚拟IP,提供负载均衡服务,热备服务器处于空闲状态,当主服务器发生故障时,热备服务器接管主服务器的虚拟IP,提供负载均衡服务;第二种方式为两台负载均衡服务器都处于活动能够状态,各自绑定一个公网虚拟IP,提供负载均衡服务,当其中一台服务器发生故障时,另一台服务器接管发生故障服务器的虚拟IP。第一种方式较为常见,但始终有一台服务器出于空闲状态,浪费了一台服务器的负载均衡处理能力。第二种方式需要多用一个公网IP。
Nginx模块
Ngnix所有的模块都要预先编译进Nginx的二进制可执行文件中。
Nginx模块有三种角色
1)Handlers(处理模块)---用于处理HTTP请求并输出内容
2)Filters(过滤模块)---用于过滤Handler输出的内容
3)Load-balancers(负载均衡模块)---当有多于一台的后端服务器供选择时,选择一台后端服务器并将HTTP请求转发到该服务器上。
Nginx模块的处理流程
客户端发送HTTP请求到Nginx服务器->Nginx基于配置文件中的文字选择一个合适的处理模块->负载均衡模块选择一台后端服务器(反向代理情况下)->处理模块进行处理并把输出缓冲放到第一个过滤模块上->第一个过滤模块处理后输出到第二个过滤模块->然后第二个过滤模块又到第三个过滤模块->第N个过滤模块->最后把处理结果发送给客户端。
Web缓存
Web缓存位于内容源Web服务器和客户端之间,当用户访问一个URL时,Web缓存服务器会去后端Web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的URL,Web缓存服务器直接输出内容到客户端,而不是源服务器再次发送请求。Web缓存降低了内容源Web服务器、数据库的负载,减少了网络延迟,提高了用户访问的响应速度,增强了用户体验。
Web缓存服务器中,最最著名的要数SquidCache(简称为Squid),已经在大多数网站中使用。Squid是一个流行的自由软件(GNU通用公共许可证)的代理服务器和Web缓存服务器。Squid有广泛的用途,从作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度,到为一组人共享网络资源而缓存万维网、域名系统和其他网络搜索,到通过过滤流量帮助网络安全,到局域网通过代理上网。Squid主要设计用于在Unix一类系统运行。