首页
学习
活动
专区
工具
TVP
发布

应用交付网关-原理和技术实现(一)

现代的应用已经绝大部分实现了Web化的迁移,从而使得用户可以通过统一的客户端(浏览器)访问几乎所有的企业应用系统。而为了确保应用安全、可靠的交付到任何类型的客户端,通过负载均衡技术以及从它演进而来的应用交付技术部署在Web应用服务器集群的前端已经成为不言而喻的架构选择。

什么是负载均衡?

负载平衡顾名思义是一种计算机网络技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最优化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。使用带有负载平衡的多个服务器组件,取代单一的组件,可以通过冗余提高可靠性。负载平衡服务通常是由专用软件和硬件来完成。

上面的定义不仅包含了网络,还包含了计算的所有方面。操作系统、网络以及容器编排器等都有各自的负载均衡技术,用于使用各自的资源进行各自的任务调度。本文仅就网络负载均衡进行探讨。

图 1:网络负载均衡概览

图 1对网络负载均衡进行了一个高层次的概括。多个客户端向多个服务器发起资源请求,负载均衡器处于客户端和后端服务器之间,简单来说完成如下任务:

服务虚拟化

负载均衡将后台的一组或者多组服务器虚拟化成一个或者多个服务。

健康检查:

健康检查有两种实现方法:

主动式:负载均衡器周期性的向后端发送请求,根据响应的效果判断后端服务器的健康情况。

被动式:负载均衡器通过对服务器响应的数据流的分析来确定健康情况。

负载均衡:

负载均衡算法也分为静态负载均衡算法和动态负载均衡算法两类,它们包括:

静态负载均衡算法:

轮询、加权轮询、源地址哈希等;

动态负载均衡算法:

最小连接、加权最小连接、最小延迟;

会话保持:

在某些应用中有一个重要需求:同一会话的请求需要到达同一后端。对于缓存、临时复杂状态等场景来说这是很必要的。对于“同一会话”的定义有多种形式,可能包括 HTTP Cookie、客户端连接的属性以及其他属性。会话保持功能的支持解决了电子商务、电子业务的分布式集群部署下的一致性难题。

在分布式集群系统中使用负载均衡能带来很多好处:

服务抽象:每个客户端不再需要知道每一个服务器的IP地址,客户端可以通过预定义的机制来找到负载均衡器,然后让负载均衡器完成服务解析功能。这些机制包括DNS 解析、智能NAT等功能。

错误隔离:通过持续性的对服务器的健康检查,负载均衡器能够有效的绕过瘫痪或过载的服务器。这样运维人员在面对系统故障时,就可以更加从容的进行错误处理。

降低成本提高效益:分布式应用系统的初衷是提供应用系统的容错、冗灾和高强度的访问以及高可用性。负载均衡通过智能算法自动化的分配客户请求到最近的站点(GSLB) 和最有效的服务器(SLB) 通过最高效率的链路(LLB) 。 因此大大降低了希望维护的成本,从而提高了整体效益。

都有那些负载均衡技术?

服务器负载均衡(Server Load Balance)

二-四层快速负载均衡

为了提高转发效率,采用基于网络帧的NAT技术,实现的高效率网络2-4层负载均衡。这种技术主要用于网络吞吐率较高(一般超过10Gbps),需要达到基本线速的转发速率。通过根据负载均衡算法以及健康检查结果,智能动态地修改数据报文的IP和端口以及MAC地址,实现将流量负载平衡到服务器群中的所有服务器的作用。注意:二-四层快速负载均衡不会终结客户端与服务器的三次握手信号,而是经过NAT之后转发相关的数据报文。同时在会话保持方面则以客户端发起的五元组会话为依据确保会话的一致性。

图 2:二-四层负载均衡

四层负载均衡

四层负载均衡的技术原理主要是以会话为单位,通过四层代理的方式将客户端的会话终结掉,经过健康监测和负载均衡算法决策后,向服务器端发起新的会话请求,从而实现四层转发负载均衡。

图 3:四层负载均衡

图 3 展示了一个传统的四层 TCP 负载均衡器。这个例子中,客户端向负载均衡器发起了一个 TCP连接,负载均衡器 终结 了这一连接(也就是说直接响应了 SYN),接下来选择一个后端,然后创建了到后端的新的 TCP 连接(就是发起了新的 SYN)。

四层负载均衡一般只在四层的 TCP/UDP进行操作。负载均衡器负责操作这些会话,保证同一会话的请求只跟同一个后端服务器打交道。其中UDP 是没有三次握手信号的,这时候基本上与二-四层负载均衡相近,唯一增加的可能是缓存和报文重新分片的处理过程。

七层负载均衡

网络二-四层负载和四层代理负载均衡目前还在大面积使用,但是四层负载均衡在某些应用场景就会出现问题,比如:

一个客户端通过HTTP协议访问某电子商务网站,在选择好产品放到购物篮后,后通过HTTPs 请求向这台服务器发送付款请求。

如果后台是一台服务器的时候,这是没有问题的,客户可以得到一致性的访问结果。

然而如果客户端是通过一个四层负载均衡来访问后端的服务器集群,由于四层负载均衡设备会将客户端的会话分成两个会话:第一个针对VIP的80端口发起的HTTP请求,第二个针对VIP的443端口发起的HTTPs请求,很可能四层负载均衡会将这两个请求分配的不同的后台服务器来处理,这时候处理HTTPs 的服务器由于没有客户端选择的商品信息而使得交易无法完成。如下图所示:

图四:四层负载均衡不能解决的问题

七层负载均衡除了通过IP和端口决定会话的唯一性以外,还通过URL/Cookie/HEADER 等信息确定交易的唯一性。从而使大规模电子商务成为可能。

图五:HTTP 七层负载均衡

图 5 描述了七层的 HTTP负载均衡。这里,客户端针对负载均衡发起了HTTP请求是第一个会话,在负载均衡设备转发服务器的响应时,向HTTP插入一个交易ID的Cookie以唯一的标识这个交易。这时候客户端在发送HTTPs 请求时将会带着这个Cookie , 负载均衡设备在接收到这个新的请求后,会发现是同一个交易的第二个请求,因此会将请求转发到同一个后台的服务器处理。从而确保了交易的一致性。

七层负载均衡有基于HTTP内容、包头信息进行负载均衡决策的能力,也具有基于7层的一些特性字段实现会话保持的能力。因此需要支持HTTP协议解析,可以根据HTTP 的 URI/ Header /Cookie 等为依据实现的负载均衡方法,而不是只有第四层的IP。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180211B0APMZ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券