负载均衡的基础原理说明

合集下载

数据库负载均衡方案的说明书

数据库负载均衡方案的说明书

数据库负载均衡方案的说明书一、引言数据库负载均衡是在现代信息系统中非常重要的一项技术,它可以将数据库的负载平均分配到多个节点上,提高数据库的性能和稳定性。

本文将详细介绍数据库负载均衡的概念、原理以及实施方案。

二、数据库负载均衡概述数据库负载均衡是一种通过在多个数据库节点上分配请求负载,以达到提高系统性能、降低响应时间和增加系统可用性的技术。

在传统的架构中,单个数据库承担了所有的读写请求,当访问量过大时,数据库可能会成为瓶颈,导致系统响应缓慢甚至崩溃。

而采用负载均衡的方案,可以将请求平均分配到多个数据库节点上,提高整个系统的稳定性和可靠性。

三、数据库负载均衡原理1. 反向代理负载均衡方案中常用的一种方式是通过反向代理服务器来实现。

反向代理服务器接收客户端的请求,并根据特定的算法将请求转发到不同的数据库节点上。

这样做的好处是客户端无需知道具体的数据库节点,只需要访问反向代理服务器即可。

2. DNS轮询DNS轮询是另一种常见的负载均衡策略。

通过在DNS服务器中配置多个数据库节点的IP地址,并将其返回给客户端。

客户端每次发送请求时,会选择其中一个节点进行访问。

由于DNS缓存的存在,不同客户端可能会访问到不同的节点,实现了负载的均衡。

3. 分布式数据库分布式数据库是将数据分片存储在多个节点上,每个节点仅负责一部分数据。

当客户端请求访问数据库时,会计算数据所在的节点,并直接访问该节点。

通过将数据分散存储在多个节点上,可以提高系统的并发能力和性能。

四、数据库负载均衡方案的实施1. 硬件负载均衡器硬件负载均衡器是一种专门用于分发请求并平衡负载的硬件设备。

它可以实现高效的负载均衡算法,并能够处理大量的并发请求。

常见的硬件负载均衡器品牌有F5、Cisco等。

2. 软件负载均衡器软件负载均衡器是一种基于软件实现的负载均衡方案。

它通常在服务器端运行,通过在服务器集群中运行负载均衡软件来实现。

常见的软件负载均衡器有Nginx、HAProxy等。

负载均衡解决方案

负载均衡解决方案

负载均衡解决方案引言在计算机网络中,负载均衡是一种分配网络流量的技术,通过将流量分散到多个服务器上,以提高系统的可靠性、稳定性和性能。

负载均衡解决方案是指在实际应用中采用的一系列策略和技术,用于实现负载均衡功能。

本文将介绍负载均衡的基本原理和常见的解决方案。

负载均衡的基本原理负载均衡的基本原理是通过将用户请求分发到多个服务器上,使得每个服务器的负载相对均衡。

负载均衡可以在多个层面进行,包括应用层、传输层和网络层。

应用层负载均衡应用层负载均衡是在应用层上进行的负载均衡。

它通过解析用户请求的内容,如URL、报文头等,来进行请求的分发。

常见的应用层负载均衡算法有轮询、随机、最少连接等。

传输层负载均衡传输层负载均衡是在传输层上进行的负载均衡。

它通过解析传输层协议的头部信息,如TCP头部中的源IP地址、目的IP地址和端口号等,来进行请求的分发。

常见的传输层负载均衡算法有轮询、源IP哈希、最少连接等。

网络层负载均衡网络层负载均衡是在网络层上进行的负载均衡。

它通过解析网络层协议的头部信息,如IP头部中的源IP地址和目的IP地址等,来进行请求的分发。

常见的网络层负载均衡算法有轮询、一致性哈希等。

常见的负载均衡解决方案根据负载均衡的原理和实现方式,常见的负载均衡解决方案可以分为硬件负载均衡和软件负载均衡两大类。

硬件负载均衡解决方案硬件负载均衡解决方案是指使用专用的硬件设备来实现负载均衡功能。

这些设备通常具有高性能、高可靠性和可扩展性,并提供了丰富的负载均衡功能。

常见的硬件负载均衡设备包括F5 BIG-IP、Citrix ADC等。

硬件负载均衡解决方案适用于对性能和可靠性有较高要求的场景。

软件负载均衡解决方案软件负载均衡解决方案是指使用软件来实现负载均衡功能。

这些软件可以运行在通用的服务器上,通过使用负载均衡算法来实现请求的分发。

常见的软件负载均衡解决方案包括Nginx、HAProxy等。

软件负载均衡解决方案相对于硬件解决方案具有成本低、灵活性高等优势,适用于中小型应用场景。

F5服务器负载均衡基本原理

F5服务器负载均衡基本原理

F5服务器负载均衡基本原理F5服务器负载均衡(Server Load Balancing,SLB)是一种通过将网络流量分配到多个服务器上,以实现网络服务的高可用和高性能的技术。

它基于不同的算法,将传入的网络请求按照一定的规则分发到多台服务器上,从而确保服务器的负载均衡和网络服务的可用性。

1.请求分发:当用户发送请求到负载均衡器时,负载均衡器根据一定的算法(如轮询、加权轮询、最少连接数)选择一台可用的服务器去处理该请求。

负载均衡器在每次请求中选择不同的服务器,从而实现请求的均衡分发。

2.健康检测:负载均衡器会定期检测服务器的健康状态,通过发送心跳包或者检测服务器的端口是否可访问来判断服务器的可用性。

如果检测到台服务器不可用,负载均衡器会将其从可用服务器列表中移除,不再将请求分发给该服务器。

3. 会话保持: 在一些场景下,用户发送的请求需要保持一致的会话状态。

负载均衡器可以通过一些手段(如Cookie、URL重写)将用户的请求转发给同一台服务器,从而保持会话的一致性,提高用户体验。

4.动态负载调整:如果负载均衡器检测到一些服务器的负载过高或者过低,可以根据配置的策略对其进行动态调整。

负载均衡器可以将请求重新分配到负载较低的服务器上,或者增加负载较高服务器的权重,从而实现负载的平衡。

5.故障恢复:如果一些服务器出现故障,负载均衡器可以自动将请求分发给其他正常工作的服务器,从而实现故障的快速恢复。

当该服务器恢复正常后,负载均衡器可以重新将请求分发给该服务器,提高整个系统的可用性和容错性。

6.安全保护:负载均衡器可以在传输层或应用层对请求进行检查和过滤,提供防火墙和DDoS防护等安全功能。

负载均衡器可以通过访问控制策略、SSL加密和反向代理等手段,保护和隔离后端服务器。

总结起来,F5服务器负载均衡的基本原理是通过请求分发、健康检测、会话保持、动态负载调整、故障恢复和安全保护等技术手段,将传入的网络请求均衡地分发到多台服务器上,从而确保服务器的负载均衡和网络服务的可用性。

服务器负载均衡

服务器负载均衡

服务器负载均衡服务器负载均衡是一种用于提高网络性能和可靠性的关键技术。

它的基本原理是将网络流量分配到多个服务器上,以均衡每台服务器的负载,从而提高整个系统的响应速度和可用性。

在本文中,我们将介绍服务器负载均衡的原理、常见的负载均衡算法以及其在企业中的应用。

一、服务器负载均衡的原理服务器负载均衡的原理是通过在网络前端引入一台或多台负载均衡设备,将外部请求分发到多个服务器上,从而均衡服务器的负载。

当一个服务器出现故障或性能下降时,负载均衡设备会自动将请求转发到其他正常运行的服务器上,保证整个系统的稳定性和可用性。

为了实现负载均衡,负载均衡设备通常会采用两种主要的分发策略:基于连接的负载均衡和基于内容的负载均衡。

基于连接的负载均衡是根据请求的源IP地址或目标IP地址进行分发,从而保证同一用户的请求始终由同一台服务器处理。

基于内容的负载均衡则是根据请求的内容特征进行匹配和分发,以实现更精确的负载均衡。

此外,服务器负载均衡还可以通过动态调整服务器的权重来实现更细粒度的负载均衡。

权重值越高的服务器将处理更多的请求,即分配更大的负载。

二、常见的负载均衡算法在服务器负载均衡中,常见的负载均衡算法包括轮询、最小连接数、源地址散列等。

1. 轮询算法轮询算法是最简单的负载均衡算法之一,它将请求依次分发给每台服务器。

当有新的请求到达时,请求将依次分配给下一台服务器,直到所有服务器都处理了同样数量的请求。

然后,这个过程重新开始,从第一台服务器开始分发。

轮询算法适用于负载均衡设备和服务器性能相似的场景。

2. 最小连接数算法最小连接数算法会优先将请求转发到当前连接数最少的服务器上。

通过实时监测服务器的连接数,并将请求发送到连接数最少的服务器,可以有效地将负载均衡到不同的服务器上,从而提高系统的整体性能和可用性。

3. 源地址散列算法源地址散列算法根据请求的源IP地址,通过散列算法计算出一个哈希值,并将请求转发到对应哈希值的服务器上。

软件开发中的负载均衡设计

软件开发中的负载均衡设计

软件开发中的负载均衡设计负载均衡是指将系统的工作负载分配到多个计算资源上,以使每台计算机的负载相对平衡,提高系统效率和可靠性。

在软件开发中,负载均衡是一个十分重要的设计问题,非常关乎软件系统的性能和可扩展性。

本文将介绍负载均衡的基本原理,以及在软件开发中如何设计一个有效的负载均衡系统。

一、负载均衡的基本原理负载均衡的基本原理是将请求分发到多个计算资源上,分摊系统的负载。

其目的是优化系统的性能,提高系统的可扩展性。

负载均衡可以分为两种类型:静态负载均衡和动态负载均衡。

静态负载均衡是指负载均衡器按照预先设定的规则分配请求,而动态负载均衡是指负载均衡器根据实时情况来分配请求。

在实际应用中,通常采用动态负载均衡。

在动态负载均衡中,负载均衡器需要监测每个计算资源的状态和负载情况,并根据策略来分配请求。

常用的负载均衡策略有轮询、加权轮询和最少连接数等。

轮询是最简单的策略,它会依次将请求分配到每个计算资源上。

而加权轮询则会按照权重来分配,即负载更轻的计算资源获得更多的请求。

最少连接数策略则会将请求分配到当前连接数最少的计算资源上。

这些策略可以根据实际应用需要进行选择。

二、负载均衡在软件开发中的应用负载均衡在软件开发中是一个非常重要的课题。

在开发大规模的分布式系统时,负载均衡是必不可少的。

在云计算、大数据、在线游戏等领域,更是离不开负载均衡。

在软件开发中,负载均衡的应用有以下几个方面。

(一)Web应用在Web应用中,负载均衡是一项很重要的技术,它可以平衡Web服务器的负载,提高Web系统的性能和可靠性。

通常,将Web服务器集群放在同一台负载均衡器后面,用户的请求会被负载均衡器分配到每个Web服务器上,从而分摊系统的负载。

在设计Web应用负载均衡时,需要考虑如何合理地设置策略、监测各个Web服务器的状态。

(二)数据库在数据库应用中,负载均衡可以提高查询效率和数据可用性。

可以通过将数据库集群放在同一台负载均衡器后面,并采用合适的策略来分摊数据库的负载。

数据中心网络负载均衡

数据中心网络负载均衡

数据中心网络负载均衡随着云计算和大数据时代的到来,数据中心网络的规模和负载都得到了极大的增长。

为了保证网络的可靠性和性能,数据中心网络负载均衡成为了一个非常重要的技术。

本文将从负载均衡的定义、原理、算法和应用等方面进行介绍。

一、负载均衡的定义数据中心网络负载均衡(Data Center Network Load Balancing),简称DCNLB,是指将网络流量均匀地分配到多个服务器或者多个网络路径上的一项技术。

通过负载均衡技术,可以避免个别服务器或者网络路径负载过载的问题,提高整个数据中心网络的性能和可靠性。

二、负载均衡的原理负载均衡的原理可以归结为两个主要方面:流量分发和流量监测。

1. 流量分发流量分发是负载均衡的核心。

在数据中心网络中,负载均衡器(Load Balancer)通过运行特定的算法,将客户端请求均匀地分发到多个服务器上。

常用的算法有轮询算法、加权轮询算法、最少连接算法等。

这些算法根据服务器的性能、负载情况等因素进行动态调整,以保证负载的均衡和优化用户的访问体验。

2. 流量监测流量监测是负载均衡的基础。

负载均衡器需要实时监测服务器的负载情况、网络路径的拥塞情况等,以便做出合适的负载均衡决策。

流量监测可以通过心跳检测、端口监听等方式进行,以保证系统能够及时发现问题并做出调整。

三、负载均衡的算法负载均衡的算法有多种,不同的算法适用于不同的应用场景。

在数据中心网络中,常用的负载均衡算法包括轮询算法、加权轮询算法、最少连接算法和一致性哈希算法等。

1. 轮询算法轮询算法是最简单的负载均衡算法之一。

负载均衡器按照服务器列表的顺序逐个分发请求,直到循环完整个列表。

轮询算法的优点是实现简单,公平地分配负载,缺点是无法考虑服务器的实际负载情况。

2. 加权轮询算法加权轮询算法在轮询算法的基础上增加了权重的概念。

服务器的权重可以根据其性能、配置等因素进行设置,负载均衡器按照权重比例来分发请求。

加权轮询算法的优点是可以根据服务器的实际负载情况进行动态调整,缺点是配置复杂度较高。

F5负载均衡基本原理

F5负载均衡基本原理

F5负载均衡基本原理1.健康检查:负载均衡设备会定期对所有服务器进行健康检查,以确保它们能够正常工作。

这些健康检查会检查服务器的可用性、响应时间和负载情况等。

如果一些服务器无法正常工作,负载均衡设备会从服务器池中删除该服务器,并将流量路由到其他可用的服务器。

2.转发算法:负载均衡设备使用不同的转发算法来决定将流量发送到哪个服务器。

常见的转发算法有轮询、加权轮询、最少连接和源IP散列等。

轮询算法是最简单的算法,它按照服务器列表的顺序将每个请求发送给下一个服务器。

加权轮询算法根据服务器的性能配置权重,将请求发送给性能更好的服务器。

最少连接算法将请求发送给当前连接数最少的服务器,以实现动态负载均衡。

源IP散列算法根据请求的源IP地址将请求分配给服务器,以确保具有相同源IP地址的请求始终被发送到同一个服务器。

3. 会话保持:一些应用程序要求客户端在一定时间内保持与同一服务器的连接。

负载均衡设备使用会话保持技术来将特定客户端的请求路由到相同的服务器。

常见的会话保持技术有基于Cookie的会话保持和IP散列的会话保持。

基于Cookie的会话保持通过在客户端的浏览器中设置Cookie来标识会话,以便将请求发送到同一服务器。

IP散列的会话保持使用客户端的IP地址来标识会话。

4.SSL卸载:负载均衡设备可以用于卸载传入和传出流量中的SSL加密。

这样可以减轻服务器的负担,提高性能。

负载均衡设备将SSL流量解密,并将未加密的流量转发给服务器处理。

然后再将服务器返回的响应重新加密,并将加密的响应发送回客户端。

5.缓存:负载均衡设备可以在其内部维护一个缓存,用于存储经常访问的静态资源,以提高响应速度和降低服务器负载。

当请求到达负载均衡设备时,它会首先检查缓存中是否存在所请求的资源。

如果存在,它会直接将缓存中的资源返回给客户端,而不需要访问服务器。

总的来说,F5负载均衡技术通过健康检查、转发算法、会话保持、SSL卸载和缓存等多种技术手段实现对流量的分发和管理,以提高应用程序的性能、可伸缩性和可用性。

负载均衡的作用和原理(一)

负载均衡的作用和原理(一)

负载均衡的作用和原理在现代互联网时代,负载均衡是一项至关重要的技术。

它的作用是分摊网络流量,提高系统的可用性、稳定性和性能。

本文将介绍负载均衡的作用和原理,并探讨其对网络系统的重要性。

一、负载均衡的作用负载均衡的目标是有效地将网络流量分发到不同的服务器上,以实现高效的资源利用和提高系统性能。

它可以做到以下几个方面的作用:1. 提高系统的可用性:通过将流量分发到多个服务器上,负载均衡可以实现多台服务器之间的冗余,一台服务器出现故障时,其他服务器可以接管流量,保证系统的正常运行。

2. 提高系统的稳定性:负载均衡可以根据服务器的负载情况,动态地调整流量分发策略,使得每台服务器都能平均地处理流量,避免因某台服务器负载过高而导致系统的不稳定。

3. 提高系统的性能:负载均衡可以根据服务器的处理能力和负载情况,智能地分发流量。

当系统负载较低时,可以将流量集中分发给少数几台服务器,提高处理速度;而当系统负载较高时,可以将流量均匀分发给多台服务器,减轻单台服务器的压力,提高整体性能。

二、负载均衡的原理负载均衡的核心原理是通过一系列的算法和机制来实现流量分发。

以下是几种常见的负载均衡原理:1. 轮询调度算法:该算法是最简单的负载均衡算法之一,它按照固定的顺序将流量分发给每台服务器,依次循环。

这样可以保证每台服务器都能平均地处理流量,但是无法根据服务器的负载情况来进行动态调整。

2. 加权轮询调度算法:该算法在轮询调度算法的基础上,给不同的服务器设置不同的权重。

服务器的权重越高,分配到的流量越多,反之亦然。

通过设置合理的权重,可以根据服务器的性能和负载情况来分配流量,提升负载均衡的效果。

3. IP散列算法:该算法根据源IP或目标IP计算哈希值,将流量分发给对应的服务器。

相同的IP地址将始终分发到同一台服务器,这样可以确保一定的连续性和一致性,对于一些需要维持状态的应用来说,非常有用。

4. 最少连接数调度算法:该算法基于服务器的当前连接数选择最少的服务器来处理流量。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

大家都知道一台服务器的处理能力,主要受限于服务器自身的可扩展硬件能力。

所以,在需要处理大量用户请求的时候,通常都会引入负载均衡器,将多台普通服务器组成一个系统,来完成高并发的请求处理任务。

之前负载均衡只能通过DNS来实现,1996年之后,出现了新的网络负载均衡技术。

通过设置虚拟服务地址(IP),将位于同一地域(Region)的多台服务器虚拟成一个高性能、高可用的应用服务池;再根据应用指定的方式,将来自客户端的网络请求分发到服务器池中。

网络负载均衡会检查服务器池中后端服务器的健康状态,自动隔离异常状态的后端服务器,从而解决了单台后端服务器的单点问题,同时提高了应用的整体服务能力。

网络负载均衡主要有硬件与软件两种实现方式,主流负载均衡解决方案中,硬件厂商以F5为代表目前市场占有率超过50%,软件主要为NGINX与LVS。

但是,无论硬件或软件实现,都逃不出基于四层交互技术的“转发”或基于七层协议的“代理”这两种方式。

四层的转发模式通常性能会更好,但七层的代理模式可以根据更多的信息做到更智能地分发流量。

一般大规模应用中,这两种方式会同时存在。

2007年F5提出了ADC(Application delivery controller)的概念为传统的负载均衡器增加了大量的功能,常用的有:SSL卸载、压缩优化和TCP连接优化。

NGINX也支持很多ADC的特性,但F5的中高端型号会通过硬件加速卡来实现SSL卸载、压缩优化这一类CPU密集型的操作,从而可以提供更好的性能。

F5推出ADC以后,各种各样的功能有很多,但其实我们最常用的也就几种。

这里我也简单的总结了一下,并和LVS、Nginx对比了一下。

SSL卸载和压缩优化,主要是将CPU密集型的加解密和压缩操作移到负载均衡器上进行;TCP连接优化主要指的是用户和负载均衡器短连接的同时,负载均衡器和后端服务器建立长连接。

不过我们本次主要介绍四层负载均衡,所以这些高级ADC功能不会涉及到。

F5的硬件负载均衡产品又分单机Big IP系列和集群VISRION系列,都是X86架构,配合自研的TMOS(Traffic Management Operating System),再加上硬件加速卡(Cavium提供)处理SSL和压缩等CPU密集型操作。

L4 CPS:四层每秒新建连接数。

测试的时候一般采用TCP短连接,每次请求128字节。

体现CPU性能,最重要的性能指标,没有之一。

L4最大并发连接数:体现内存大小L7 RPS:七层每秒请求数。

测试时每连接10个128字节HTTP请求。

主要体现HTTP 协议栈性能这些性能指标实际上就是一个负载均衡器最关键的指标了。

大家如有采购硬件负载均衡器一定要看这个。

有很多小牌子的硬件负载均衡器经常不标注L4 CPS,只是笼统地说10G负载均衡,其实差别很大的。

硬件负载均衡在功能、易用性和可扩展性上都做得不错,但是也有不少缺点。

从商业角度来说,硬件负载均衡产品过于昂贵,高端产品动辄五十万甚至数百万的价格对于用户是几乎不可承受的负担。

从使用角度来说,硬件负载均衡是黑盒,有BUG需要联系厂商等待解决,时间不可控、新特性迭代缓慢且需资深人员维护升级,也是变相增加昂贵的人力成本。

相信除了很多不差钱的公司,大家还是用软件负载均衡比较多。

软件四层负载均衡最常见的就是LVS了。

LVS最常用的有NAT、DR以及新的FULL NAT模式。

上图比较了几种常见转发模式的优缺点。

我们认为LVS的每种转发模式都有其优点和缺点,但最大的问题还是其复杂性。

我第一次看到这三种转发方式、还有F5的单臂模式、双臂模式都会有云里雾里的感觉。

雪上加霜的是咱们还需要考虑LVS的性能扩展和容灾方法,这使得整个方案更加的复杂。

常见的有基于Keepalived的主备方式和ECMP两种。

Keepalived主备模式设备利用率低;不能横向扩展;VRRP协议,有脑裂的风险。

而ECMP的方式需要了解动态路由协议,LVS和交换机均需要较复杂配置;交换机的HASH算法一般比较简单,增加删除节点会造成HASH重分布,可能导致当前TCP连接全部中断;部分交换机的ECMP在处理分片包时会有Bug,说起来心中满满的都是血泪呀。

如图:UCloud Vortex负载均衡器的设计理念用户使用负载均衡器最重要的需求是“High Availability”和“Scalability”,Vortex 的架构设计重心就是满足用户需求,提供极致的“可靠性”和“可收缩性”,而在这两者之间我们又把“可靠性”放在更重要的位置。

值得一提的是今年3月举办的第十三届网络系统设计与实现USENIX研讨会(NSDI '16)上,来自谷歌、加州大学洛杉矶分校、SpaceX公司的工程师们分享了《Maglev:快速、可靠的软件网络负载均衡器》,介绍了从2008年开始在生产环境投入使用的软件负载均衡器。

其设计理念和我们非常相似,同样是ECMP + 一致性哈希;同样是Kernel Bypass模式;单机性能也和我们的Vortex非常接近。

关于Vortex的High Availability实现四层负载均衡器的主要功能是将收到的数据包转发给不同的后端服务器,但必须保证将五元组相同的数据包发送到同一台后端服务器,否则后端服务器将无法正确处理该数据包。

以常见的HTTP连接为例,如果报文没有被发送到同一台后端服务器,操作系统的TCP 协议栈无法找到对应的TCP连接或者是验证TCP序列号错误将会无声无息的丢弃报文,发送端不会得到任何的通知。

如果应用层没有超时机制的话,服务将会长期不可用。

Vortex的可靠性设计面临的最大问题就是如何在任何情况下避免该情况发生。

Vortex 通过ECMP集群和一致性哈希来实现极致程度的可靠性。

首先,我们来考察一下负载均衡服务器变化场景。

这种场景下,可能由于负载均衡服务器故障被动触发,也可能由于运维需要主动增加或者减少负载均衡服务器。

此时交换机会通过动态路由协议检测负载均衡服务器集群的变化,但除思科的某些型号外大多数交换机都采用简单的取模算法,导致大多数数据包被发送到不同的负载均衡服务器。

Vortex服务器的一致性哈希算法能够保证即使是不同的Vortex服务器收到了数据包,仍然能够将该数据包转发到同一台后端服务器,从而保证客户应用对此类变化无感知,业务不受任何影响。

这种场景下,如果负载均衡器是LVS且采用RR (Round Robin)算法的话,该数据包会被送到错误的后端服务器,且上层应用无法得到任何通知。

如果LVS配置了SH(Source Hash)算法的话,该数据包会被送到正确的后端服务器,上层应用对此类变化无感知,业务不受任何影响;如果负载均衡器是NGINX的话,该数据包会被TCP协议栈无声无息地丢弃,上层应用不会得到任何通知。

其次,来考察后端服务器变化的场景。

这种场景下,可能由于后端服务器故障由健康检查机制检查出来,也可能由于运维需要主动增加或者减少后端服务器。

此时,Vortex服务器会通过连接追踪机制保证当前活动连接的数据包被送往之前选择的服务器,而所有新建连接则会在变化后的服务器集群中进行负载分担。

同时,Vortex一致性哈希算法能保证大部分新建连接与后端服务器的映射关系保持不变,只有最少数量的映射关系发生变化,从而最大限度地减小了对客户端到端的应用层面的影响。

这种场景下,如果负载均衡器是LVS且SH算法的话,大部分新建连接与后端服务器的映射关系会发生变化。

某些应用,例如缓存服务器,如果发生映射关系的突变,将造成大量的cache miss,从而需要从数据源重新读取内容,由此导致性能的大幅下降。

而NGINX在该场景下如果配置了一致性哈希的话可以达到和Vortex一样的效果。

最后,让我们来看一下负载均衡服务器和后端服务器集群同时变化的场景。

在这种场景下,Vortex能够保证大多数活动连接不受影响,少数活动连接被送往错误的后端服务器且上层应用不会得到任何通知。

并且大多数新建连接与后端服务器的映射关系保持不变,只有最少数量的映射关系发生变化。

如果负载均衡器是LVS且SH算法的话几乎所有活动连接都会被送往错误的后端服务器且上层应用不会得到任何通知。

大多数新建连接与后端服务器的映射关系同样也会发生变化。

如果是NGINX的话因为交换机将数据包送往不同的NGINX服务器,几乎所有数据包会被无声无息的丢弃,上层应用不会得到任何通知。

可收缩性的设计是基于ECMP集群的Scaling Out设计Vortex采用动态路由的方式通过路由器ECMP(Equal-cost multi-path routing)来实现Vortex集群的负载均衡。

一般路由机支持至少16或32路ECMP集群,特殊的SDN交换机支持多达256路ECMP 集群。

而一致性哈希的使用是的ECMP集群的变化对上层应用基本无感知,用户业务不受影响。

虽然ECMP提供了良好的Scaling Out的能力,但是考虑到网络设备的价格仍然希望单机性能够尽可能的强。

例如,转发能力最好是能够达到10G甚至40G的线速,同时能够支持尽可能高的每秒新建连接数。

内核不是解决方案,而是问题所在!从上图可以看到随着高速网络的发展64字节小包线速的要求越来越高,对10G网络来说平均67ns,对40G网络来说只有17ns。

而于此同时CPU、内存的速度提升却没有那么多。

以2G主频的CPU为例,每次命中L3缓存的读取操作需要约40个CPU周期,而一旦没有命中缓存从主存读取则需要140个CPU周期。

为了达到线速就必须采用多核并发处理、批量数据包处理的方式来摊销单个数据包处理所需要的CPU周期数。

此外,即使采用上述方式,如果没有得到充分的优化,发生多次cache miss或者是memory copy都无法达到10G线速的目标。

像NGINX这样的代理模式,转发程序因为需要TCP协议栈的处理以及至少一次内存复制性能要远低于LVS。

而LVS又因为通用Kernel的限制,会考虑节省内存等设计策略,而不会向Vortex一样在一开始就特别注重转发性能。

例如LVS缺省的连接追踪HASH表大小为4K,而Vortex直接使用了50%以上的内存作为连接追踪表。

Vortex通过DPDK提供函数库充分利用CPU和网卡的能力从而达到了单机10G线速的转发性能。

•用户空间驱动,完全Zero-Copy•采用批处理摊销单个报文处理的成本•充分利用硬件特性•Intel DataDirect I/O Technology (Intel DDIO)•NUMA•Huge Pages,Cache Alignment,Memory channel useVortex直接采用多队列10G网卡,通过RSS直接将网卡队列和CPU Core绑定,消除线程的上下文切换带来的开销。

相关文档
最新文档