具体实施方式
下面结合附图及具体实施例对本发明进行更加详细与完整的说明。可以理解的是,此处所描述的具体实施例仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。
图1是本发明第一实施例提供的一种负载均衡的方法的实现流程图。本发明实施例提供的方法可以由本发明实施例提供的提供信息装置来执行,该装置可以由软件和/或硬件来实现。如图1所示,本发明实施例提供的方法包括:
步骤101、接收客户端发送的第一请求信息。
负载均衡服务器接收客户端发送的第一请求信息,即接收客户端发送的HTTP请求报文。负载均衡服务器用于连接客户端和服务端,以将客户端的请求信息分配到待响应请求信息的服务器中。例如,Nginx为轻量级的负载均衡服务,它能够按照轮询、IP哈希、URL哈希或权重等多种方式对后端服务器做负载均衡。
步骤102、当所述第一请求信息不包括服务器信息时,为所述客户端分配响应服务器,以用于执行所述第一请求信息。
服务端为集群,其中集群中的各个服务器为并行服务器,它们可以为使用同一组应用程序的大量用户提供服务。集群中每个服务器都可以承担一定的处理负载,并且负载均衡服务器可以实现处理负载在集群中服务器之间的动态分配,以实现负载均衡。当第一请求信息中不包括服务器信息时,即发送所述第一请求信息的客户端没有连接的服务器时,负载均衡服务器采用调度算法在集群中为第一请求信息分配一个服务器作为所述客户端的响应服务器,以响应第一请求信息。例如,第一请求信息对应的HTTP请求报文首部中不包括服务器信息时,负载均衡服务器使用轮叫调度算法计算出集群中待响应第一请求信息的响应服务器的标号(Identity,ID),并将该响应服务器的ID添加到第一请求信息对应的HTTP请求报文首部,使得第一请求信息能够发送到响应服务器中。
响应服务器接收第一请求信息后,处理所述第一请求信息,并且将第一请求信息的响应结果同步到响应服务器所属集群中除响应服务器以外的其他服务器中。例如,响应服务器在执行第一请求信息时,修改了数据库的内容,相对应的位于响应服务器的缓存中也进行了修改,然而响应服务器所属集群中除响应服务器以外的其他服务器的缓存没有进行相应的修改,即其他服务器的缓存与数据库内容不一致。为了使得其他服务器的缓存与数据库内容一致,其他服务器均需同步所述第一请求信息的响应结果。具体的,事件监听器将监听到的响应服务器中的缓存内容变化事件保存到事件队列中,并且保存时从当前线程变量中取出所述客户端的ID作为关键字。定时的从事件队列中将待同步的事件取出并通知其他节点。优选的,将同一客户端的所有待同步事件同时打包取出,以同时完成同一客户端的待同步事件。
步骤103、当所述响应服务器返回所述第一请求信息的响应信息时,若所述响应服务器所属的集群中除所述响应服务器以外的其他服务器中至少有一个服务器没有完成同步,则设置所述响应服务器为所述客户端的指定服务器。
当响应服务器完成第一请求信息之后,响应服务器向客户端返回第一请求信息的响应信息,此时需要判断响应服务器所属集群中除响应服务器外的其他节点是否均完成同步,如果其他服务器中所有服务器均完成同步则集群中每个服务器均与第一请求信息的响应结果一致,客户端后续向集群发送HTTP请求报文时,集群中任意一个服务器均能够执行HTTP请求报文,此时不需要建立客户端与响应服务器的连接;如果其他服务器中至少有一个服务器没有完成同步,则客户端后续向集群发送请求信息时,集群中其他节点不能够执行HTTP请求报文,即客户端的后续请求仍然需要响应服务器执行,故需要设置响应服务器为客户端的指定服务器。
设置响应服务器为所述客户端的指定服务器,即建立客户端与响应服务器的连接,使得该客户端后续的请求信息均发送到响应服务器执行。设置所述响应服务器为所述客户端的指定服务器,包括:向所述客户端发送连接信息,以连接所述客户端和所述响应服务器。可选的,第一实施例中所述连接信息为cookie。例如,响应服务器返回第一请求信息的响应信息且其他服务器没有全部完成同步时,从待返回客户端的HTTP响应报文首部取出响应服务器的ID,并将响应服务器的ID设置到cookie中。若客户端后续向负载均衡服务器发送请求时会同时发送cookie。
所述设置所述响应服务器为所述客户端的指定服务器之后,还包括:接收所述客户端发送的第二请求信息;将所述第二请求信息转发给所述指定服务器,以使所述指定服务器执行所述第二请求信息;当所述指定服务器返回第二请求信息的响应信息时,若所述指定服务器所属的集群中除所述指定服务器以外的其他服务器每个服务器均完成同步,则删除所述客户端的所述指定服务器。
负载均衡服务器接收第二请求信息时,能够检查到cookie,由于cookie中包括服务器的ID,故会优先将第二请求信息发送到cookie中指定的服务器,即步骤103中为客户端设置的指定服务器中,而无需用调度算法为第二请求信息分配服务器。指定服务器接收第二请求信息后处理第二请求信息,并且指定服务器所属集群中除指定服务器以外的其他服务器均同步所述第二请求信息的响应结果。
进一步的,当所述指定服务器返回第二请求信息的响应信息时,若所述其他服务器每个服务器均完成同步,删除所述客户端的指定服务器。
当指定服务器返回第二请求信息的响应信息时,判断其他服务器是否完成了同步,如果所有服务器均完成了同步,则需解除客户端与指定服务器的粘连,即删除客户端的指定服务器。这样所述客户端的后续请求信息又会被负载均衡服务器通过步骤102中的方法,根据调度算法被分配到相应的服务器中,重新实现负载平衡。
进一步的,删除所述客户端的所述指定服务器,包括:删除所述第二请求信息的响应信息中的连接信息。
删除客户端的指定服务器,即当指定服务器返回第二请求信息的响应信息时,将第二请求信息的HTTP响应报文首部中指定服务器的ID删除,从而向客户端返回无状态的HTTP响应报文。
本发明实施例中提出的负载均衡的方法,当集群中服务器没有完成客户端请求信息的响应结果的同步时,建立客户端与服务器的连接,随后,当集群中服务器完成响应结果的同步时,解除客户端与服务器的连接,以减少客户端与服务器的连接时间,从而提高负载均衡的效果。
图2是本发明第二实施例中提供的一种负载均衡的装置的结构效果图。本发明实施例和本发明中方法实施例处于统一构思,如图2所示,本发明实施例提供的装置,包括:
第一请求信息接收单元201,用于接收客户端发送的第一请求信息;
响应服务器分配单元202,当所述第一请求信息不包括服务器信息时,用于为所述客户端分配响应服务器,以用于执行所述第一请求信息;
指定服务器设置单元203,当所述响应服务器返回所述第一请求信息的响应信息时,若所述响应服务器所属的集群中除所述响应服务器以外的其他服务器中至少有一个服务器没有完成同步,则用于设置所述响应服务器为所述客户端的指定服务器。
所述指定服务器设置单元203包括:连接信息发送单元,用于向所述客户端发送连接信息,以连接所述客户端和所述响应服务器。
所述装置还包括:第二请求信息接收单元,用于接收所述客户端发送的第二请求信息;第二请求信息转发单元,用于将所述第二请求信息转发给所述指定服务器,以使所述指定服务器执行所述第二请求信息;指定服务器删除单元,当所述指定服务器返回第二请求信息的响应信息时,若所述指定服务器所属的集群中除所述指定服务器以外的其他服务器每个服务器均完成同步,则用于删除所述客户端的所述指定服务器。
所述指定服务器删除单元包括:连接信息删除单元,用于删除所述第二请求信息的响应信息中的连接信息。
进一步的,第二实施例中所述连接信息为cookie。
示例性的,图3和图4均是本发明第二实施例中的负载均衡装置的各个部分之间的交互过程示意图,如图3所示,当HTTP请求报文中不包括服务器信息时,所述交互过程包括:
步骤301和步骤302、负载均衡服务器接收客户端的HTTP请求报文并且根据轮叫调度算法计算出准备响应所述HTTP请求报文的响应服务器,以及将响应服务器的ID添加到HTTP请求报文首部;
步骤303、响应服务器接收HTTP请求报文;
步骤304-步骤307、响应服务器处理HTTP请求报文,若响应服务器中修改了缓存内容,则Ehcache事件监听器将监听到的缓存内容变化事件保存到事件队列中,并且保存时会从当前线程中取出当前登录用户的ID作为关键字;
步骤308、后端服务器的同步线程定时的扫描事件队列,将事件批量取出并通知集群中的除响应服务器以外的其他服务器。取出事件时优先地将同一用户的所有事件打包取出通知其他服务器。
步骤313-步骤315、过滤器拦截HTTP响应报文,并检查同步线程是否已经将该用户的缓存事件同步到其他服务器。如果其他服务器没有完成同步,将HTTP响应报文首部的响应服务器ID取出并设置到cookie中。
步骤316、过滤器将HTTP响应报文返回至负载均衡服务器。
步骤317、负载均衡服务器将HTTP响应报文返回至客户端。
如图4所示,当HTTP请求报文中包括服务器信息时,所述交互过程包括:
步骤401、负载均衡服务器检查到cookie,将HTTP请求报文发送到cookie中的指定服务器;
步骤402-步骤405、指定服务器处理HTTP请求报文;
步骤406-步骤408、HTTP响应报文的响应信息被过滤器拦截时,如果检查到事件队列中不存在该用户的事件了,则表明缓存复制已经完成。于是删除保存服务器ID的cookie,即解除了该用户请求与当前服务器的粘连。
步骤409、过滤器将HTTP响应报文返回至负载均衡服务器。
步骤410、负载均衡服务器将HTTP响应报文返回至客户端。
本发明实施例中提出的负载均衡的装置,通过建立客户端与服务器的连接以及当集群中服务器完成同步时立即解除客户端与指定服务器的连接,以减小客户端与指定服务器的连接时间,从而提高负载均衡效果。
本实施例提出的负载均衡的装置用于执行本发明任意实施例提供的负载均衡的方法,具备相应的功能模块,达到相同的技术效果。
上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。