一种长连接会话保持方法和装置与流程

文档序号:17180350发布日期:2019-03-22 20:50阅读:448来源:国知局
一种长连接会话保持方法和装置与流程
本申请涉及网络通信
技术领域
,特别涉及一种长连接会话保持方法和装置。
背景技术
:随着服务器集群技术的迅速发展,为了提高服务器的性能和负载能力,服务器负载均衡设备被广泛应用于服务器集群中,通过内置调度算法将访问流量均衡地分配至各服务器。同时,进行负载均衡时还需要识别客户端与服务器之间交互过程的关联性,保证同一用户相关联的访问请求会被分配到同一服务器上,这一机制通常被称为会话(session)保持。例如,在大多数电子商务的应用系统或者其他需要进行用户身份认证的在线系统中,一个用户与服务器经常需要经过多次交互过程才能完成一笔交易或者是完成一次请求,因为这几次交互过程是密切相关的,所以服务器在进行这些交互过程的某一个交互步骤时,往往需要了解上一次或上几步交互过程的处理结果,这就要求所有这些相关的交互过程都由同一个服务器完成,实现会话的保持,而不能被负载均衡器分散到不同的服务器上。会话保持是负载均衡最常见的问题之一,也是一个相对比较复杂的问题。对于目前的服务器负载均衡设备,基于源ip的会话保持中一个很重要的参数就是连接超时值,负载均衡器会为每一个处于保持状态的会话设定一个时间值作为超时值。若一个会话从上一次完成到下次再来之间的间隔时间小于超时值,则负载均衡器会将新来的连接进行会话保持;而如果这个间隔大于该超时值,则负载均衡器会将新来的连接认为是新的会话然后重新进行负载均衡调度。例如如下应用场景:某财务应用属于长连接,因为在客户端需要填写大量的表单数据,客户端与服务器建立连接后,客户端使用者将花费几分钟甚至几十分钟来填写表单相关信息。然而当使用者终于填好表单所需信息后,点击“提交”按钮,结果此时由于早已超过连接超时值,负载均衡设备其将重新进行负载均衡,分配到了另一个服务器,这就会造成该应用产生故障,导致客户端使用者所有的工作需要重新来,给使用者带来极大的不便和损失。技术实现要素:有鉴于此,本申请提供一种长连接会话保持方法和装置,以实现不局限于连接超时值的会话保持。具体地,本申请是通过如下技术方案实现的:一种长连接会话保持方法,所述方法用于负载均衡设备,所述方法包括:为客户端和第一服务器建立第一会话;为所述第一会话创建第一会话保持表项,其中所述第一会话保持表项记录了所述客户端与所述第一服务器的对应关系;当所述第一会话断开后,在所述第一会话保持表项老化之前,向所述客户端发送会话保持表项保活报文,其中所述会话保持表项保活报文用于探测所述客户端的连接状态;如果根据所述客户端对所述保活报文的回复确定所述客户端连接正常,则更新所述第一会话保持表项的老化时间。一种长连接会话保持装置,所述装置用于负载均衡设备,所述装置包括:会话管理单元,用于为客户端和第一服务器建立第一会话;会话保持表项管理单元,用于为所述第一会话创建第一会话保持表项,其中所述第一会话保持表项记录了所述客户端与所述第一服务器的对应关系;更新所述第一会话保持表项的老化时间;探测单元,用于当所述第一会话断开后,在所述第一会话保持表项老化之前,向所述客户端发送会话保持表项保活报文,其中所述会话保持表项保活报文用于探测所述客户端的连接状态;如果根据所述客户端对所述保活报文的回复确定所述客户端连接正常,则触发所述会话保持表项管理单元更新所述第一会话保持表项的老化时间。由以上本申请提供的技术方案可见,在本方案中负载均衡设备会在所述第一会话保持表项老化之前,向所述客户端发送用于探测所述客户端连接状态的会话保持表项保活报文,然后根据客户端对所述保活报文的回复来确定所述客户端是连接正常,如果客户端连接正常,则代表该长连接会话需要被继续保持,第一会话保持表项不可被老化,因此会更新第一会话保持表项老化时间。本方案建立了会话保持表项更新机制,通过对客户端的探测完成会话保持表项的更新,即使客户端发来的前后两次报文的间隔时间超过连接超时值,只要客户端连接正常,则该会话保持表项仍可存在,这样不但通过会话保持减少了客户端重复建立连接的过程,而且在客户端的连接是长连接的情况下,避免了超出会话保持老化时间后客户端再次访问服务器时因负载均衡器重新分配服务器而导致的业务错误,此外本方案中会话保持表项老化的机制仍存在,可避免因会话表项长时间不老化而占用设备资源导致负载均衡器性能不足的问题。附图说明图1为本申请示出的一种长连接会话保持方法的流程图;图2为本申请示出的一种长连接会话保持方法的流程图;图3为本申请示出的当接收到客户端发来的报文时的流程图;图4为本申请示出的当接收到客户端发来的报文时的流程图;图5为本申请示出的一种长连接会话保持装置的示意图。具体实施方式这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。请参见图1,图1为本申请示出的一种长连接会话保持方法的流程图。该方法可用于负载均衡设备。包括如下步骤:步骤s101,为客户端和第一服务器建立第一会话。第一会话为新会话。例如客户端c1访问虚拟服务,与负载均衡设备(或称负载均衡器)建立新会话,负载均衡设备通过负载均衡调度算法调度到一台真实服务器s1上。负载均衡调度算法的作用,就是根据不同的业务环境、服务器状况等,将业务流量合理分配到后端服务器,保障后端服务器的正常、稳定、高效的运行。作为示例,通用算法主要有:轮询、加权轮询、最小连接、加权最小连接等,此处不再赘述。步骤s102,为所述第一会话创建第一会话保持表项,其中所述第一会话保持表项记录了所述客户端与所述第一服务器的对应关系。下面以简单会话保持(也称作基于源地址的会话保持、基于ip的会话保持)为例进行说明。简单会话保持是指负载均衡器在作负载均衡时根据访问请求的源地址作为判断关联会话的依据,对来自同一ip地址的所有访问请求在作负载均衡时都会被保持到一台服务器上去。简单会话保持中一个很重要的参数就是连接超时值,负载均衡器会为每一个处于保持状态中的会话设定一个时间超时值。若一个会话从上一次完成到下次再来之间的间隔时间小于超时值时,负载均衡器将会将再次的连接进行会话保持;但如果这个间隔大于该超时值,负载均衡器会将新来的连接认为是新的会话然后进行负载平衡。负载均衡器是通过会话保持表项来实现会话保持的。负载均衡器将客户端与调度到的真实服务器信息保存为会话保持表项,以保证在会话保持表项老化时间内下次会话可以调度到相同的真实服务器上。作为示例,会话保持表项中可以包含客户端ip等以下5项内容,如表1所示:表1客户端ip客户端端口虚拟服务ip真实服务器ip真实服务器端口10.30.6.884500120.11.120.242.6.122.1004500步骤s103,当所述第一会话断开后,在所述第一会话保持表项老化之前,向所述客户端发送会话保持表项保活报文,其中所述会话保持表项保活报文用于探测所述客户端的连接状态。如果第一会话未断开,仍然存在,则会话保持表项并不起作用,或者说是无需启用,因为此时来了报文后会直接在会话中发送给服务器,而不涉及到会话的保持问题。会话保持表项保活报文类似于心跳机制。在第一会话断开后,也即客户端短暂处于不活跃状态时,负载均衡器可以发送会话保持表项保活报文来主动探测客户端的状态,从而决定是否应将会话保持表项老化删除。对于会话保持表项保活报文的具体形式本实施例并不进行限制,本领域技术人员可以根据不同需求\不同场景而自行选择、设计,可以在此处使用的这些选择和设计都没有背离本发明的精神和保护范围。作为示例,保活报文可以使用tcp协议中的keep_alive报文。作为示例,在本实施例或本发明其他某些实施例中,所述第一会话保持表项老化之前,具体可以为:在距离所述第一会话保持表项被删除时刻还剩第一预设时长时。例如,第一预设时长可以为1s,即可以在老化前1s时,向客户端发送保活报文。步骤s104,如果根据所述客户端对所述保活报文的回复确定所述客户端连接正常,则更新所述第一会话保持表项的老化时间。如果可以确定客户端连接正常,虽然当前不存在会话,则也不能将会话保持表项进行老化,否则就会影响正常的业务连接,所以要更新会话保持表项的老化时间。作为示例,在本实施例或本发明其他某些实施例中,所述更新所述第一会话保持表项的老化时间,具体可以包括:将所述第一会话保持表项的老化时间重置为第二预设时长并按所述第二预设时长重新开始老化倒计时。第二预设时长即超时值,本领域技术人员可以根据不同需求\不同场景而自行选择、设计,对此本发明实施例并不进行限制。请参见图2,在本实施例或本发明其他某些实施例中,向所述客户端发送会话保持表项保活报文之后,所述方法还可以包括:步骤s201,如果到所述第一会话保持表项老化时,或者在向所述客户端发送会话保持表项保活报文之后的第三预设时长内,仍未确定所述客户端连接正常,则删除所述第一会话保持表项。例如,负载均衡器可以将该条会话保持表项从老化时间队列中摘出,停止老化,并发送保活报文去探测,如果在第三预设时长内未收到客户端的有效回复从而确定所述客户端连接正常,则删除所述第一会话保持表项。或者,在发送保活报文后该条会话保持表项仍然继续进行之前的老化倒计时,当到达老化时间时仍未确定所述客户端连接正常,则删除所述第一会话保持表项。可见本发明并未废除老化机制,保持表项的老化机制仍存在,而是将会话保持表项更新后重新添加到老化队列中,以防止该会话保持表项永远存在,当确定客户端未正常连接时,保持表项就应被删除,否则会话保持表项长时间不老化将会占用设备资源,进而导致负载均衡器性能不足等问题。在本发明实施例中,负载均衡设备会在所述第一会话保持表项老化之前,向所述客户端发送用于探测所述客户端连接状态的会话保持表项保活报文,然后根据客户端对所述保活报文的回复来确定所述客户端是连接正常,如果客户端连接正常,则代表该长连接会话需要被继续保持,第一会话保持表项不可被老化,因此会更新第一会话保持表项老化时间。本方案建立了会话保持表项更新机制,通过对客户端的探测完成会话保持表项的更新,即使客户端发来的前后两次报文的间隔时间超过连接超时值,只要客户端连接正常,则该会话保持表项仍可存在,这样不但通过会话保持减少了客户端重复建立连接的过程,而且在客户端的连接是长连接的情况下,避免了超出会话保持老化时间后客户端再次访问服务器时因负载均衡器重新分配服务器而导致的业务错误,此外本方案中会话保持表项老化的机制仍存在,可避免因会话表项长时间不老化而占用设备资源导致负载均衡器性能不足的问题。以上主要描述的是负载均衡设备通过主动探测来更新会话保持表项老化时间的情形。下面再进一步描述客户端发来报文的情形。请参见图3,在本实施例或本发明其他某些实施例中,所述方法还可以包括以下步骤:步骤s301,当接收到所述客户端发来的报文时,查询第二会话是否存在,其中所述第二会话是与所述报文对应的会话。容易理解的是,第二会话可能就是第一会话,也可能不是,需要根据具体的报文来确定。步骤s302,如果所述第二会话存在,则更新所述第二会话的老化时间。除了会话保持表项有老化时间之外,会话本身也有老化时间,此处不再赘述。进一步的,如果所述第二会话存在,则判断所述客户端发来的报文是否是会话保持表项保活报文的回复报文;如果不是保活报文的回复报文,则将所述报文发送给第二服务器,其中所述第二服务器是与所述第二会话对应的服务器;如果是保活报文的回复报文,则无需将所述报文发送给第二服务器,因为易知该报文与业务无关。步骤s303,如果所述第二会话不存在,则建立所述第二会话。进一步的,建立所述第二会话之后,可以有:查询是否存在第二会话保持表项;如果不存在所述第二会话保持表项,则创建所述第二会话保持表项;如果已存在所述第二会话保持表项,则更新所述第二会话保持表项的老化时间。然后,将所述报文发送给第二服务器。作为示例,客户端发来报文的情形可参见图4所示,包括如下步骤:步骤s401,客户端发送报文。该报文可能是业务报文,也可能是保活报文的回复报文,如keep_alive报文。步骤s402,查询是否存在会话。可以根据报文的标识(如五元组),判断当前是否已存在与该报文对应的会话。如果存在会话,则进入步骤s403,如果不存在会话,则进入步骤s406。步骤s403,更新会话老化时间。步骤s404,判断是否是保活报文的回复报文。如果是保活报文的回复报文,则跳至步骤s407,如果不是保活报文的回复报文,则进入步骤s405。步骤s405,报文快传。可以通过报文快传方式将报文发送给对应的服务器,即进入步骤s410。步骤s406,建立会话。步骤s407,查询是否存在会话保持表项。如果已存在该新建会话的会话保持表项,则进入步骤s409;如果不存在该新建会话的会话保持表项,则进入步骤s408。步骤s408,建立会话保持表项。然后进入步骤s410。步骤s409,更新会话保持表项的老化时间。然后进入步骤s410。步骤s410,服务器接收报文。需要指出的是,如果报文是保活报文的回复报文,则实际上并不会有服务器接收报文的步骤。流程结束。在本发明实施例中,负载均衡设备会在所述第一会话保持表项老化之前,向所述客户端发送用于探测所述客户端连接状态的会话保持表项保活报文,然后根据客户端对所述保活报文的回复来确定所述客户端是连接正常,如果客户端连接正常,则代表该长连接会话需要被继续保持,第一会话保持表项不可被老化,因此会更新第一会话保持表项老化时间。本方案建立了会话保持表项更新机制,通过对客户端的探测完成会话保持表项的更新,即使客户端发来的前后两次报文的间隔时间超过连接超时值,只要客户端连接正常,则该会话保持表项仍可存在,这样不但通过会话保持减少了客户端重复建立连接的过程,而且在客户端的连接是长连接的情况下,避免了超出会话保持老化时间后客户端再次访问服务器时因负载均衡器重新分配服务器而导致的业务错误,此外本方案中会话保持表项老化的机制仍存在,可避免因会话表项长时间不老化而占用设备资源导致负载均衡器性能不足的问题。请参见图5,图5为本申请示出的一种长连接会话保持装置的示意图。该装置可以用于负载均衡设备。该装置可以包括:会话管理单元501,用于为客户端和第一服务器建立第一会话。会话保持表项管理单元502,用于为所述第一会话创建第一会话保持表项,其中所述第一会话保持表项记录了所述客户端与所述第一服务器的对应关系;更新所述第一会话保持表项的老化时间。探测单元503,用于当所述第一会话断开后,在所述第一会话保持表项老化之前,向所述客户端发送会话保持表项保活报文,其中所述会话保持表项保活报文用于探测所述客户端的连接状态;如果根据所述客户端对所述保活报文的回复确定所述客户端连接正常,则触发所述会话保持表项管理单元更新所述第一会话保持表项的老化时间。作为示例,在本实施例或本发明其他某些实施例中,在所述第一会话保持表项老化之前,具体为:在距离所述第一会话保持表项被删除时刻还剩第一预设时长时。作为示例,在本实施例或本发明其他某些实施例中,所述会话保持表项管理单元在更新所述第一会话保持表项的老化时间时,具体用于:将所述第一会话保持表项的老化时间重置为第二预设时长并按所述第二预设时长重新开始老化倒计时。作为示例,在本实施例或本发明其他某些实施例中,所述会话保持表项管理单元还用于:如果到所述第一会话保持表项老化时,或者在向所述客户端发送会话保持表项保活报文之后的第三预设时长内,仍未确定所述客户端连接正常,则删除所述第一会话保持表项。作为示例,在本实施例或本发明其他某些实施例中,所述会话管理单元还用于:当接收到所述客户端发来的报文时,查询第二会话是否存在,其中所述第二会话是与所述报文对应的会话;如果所述第二会话存在,则更新所述第二会话的老化时间;如果所述第二会话不存在,则建立所述第二会话。作为示例,在本实施例或本发明其他某些实施例中,所述会话管理单元还用于:如果所述第二会话存在,则判断所述客户端发来的报文是否是会话保持表项保活报文的回复报文;如果不是保活报文的回复报文,则将所述报文发送给第二服务器,其中所述第二服务器是与所述第二会话对应的服务器。作为示例,在本实施例或本发明其他某些实施例中,所述会话保持表项管理单元还用于:在所述会话管理单元建立所述第二会话之后,查询是否存在第二会话保持表项;如果不存在所述第二会话保持表项,则创建所述第二会话保持表项;如果已存在所述第二会话保持表项,则更新所述第二会话保持表项的老化时间。在本发明实施例中,负载均衡设备会在所述第一会话保持表项老化之前,向所述客户端发送用于探测所述客户端连接状态的会话保持表项保活报文,然后根据客户端对所述保活报文的回复来确定所述客户端是连接正常,如果客户端连接正常,则代表该长连接会话需要被继续保持,第一会话保持表项不可被老化,因此会更新第一会话保持表项老化时间。本方案建立了会话保持表项更新机制,通过对客户端的探测完成会话保持表项的更新,即使客户端发来的前后两次报文的间隔时间超过连接超时值,只要客户端连接正常,则该会话保持表项仍可存在,这样不但通过会话保持减少了客户端重复建立连接的过程,而且在客户端的连接是长连接的情况下,避免了超出会话保持老化时间后客户端再次访问服务器时因负载均衡器重新分配服务器而导致的业务错误,此外本方案中会话保持表项老化的机制仍存在,可避免因会话表项长时间不老化而占用设备资源导致负载均衡器性能不足的问题。上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1