本发明实施例涉及但不限于智能终端技术,尤指一种实现会话(Session)共享的系统、方法、服务器和集群设备。
背景技术:
随着互联网的日益壮大,网站的页面浏览量(PV,Page View)和独立访客(UV,Unique Visitor)成线性或者指数倍的增加,因此,单服务器单数据库早已经不能满足实际需求。目前,大多数大型网站的服务器都采用了分布式服务的部署方式,解决大并发、大数据量造成的瓶颈问题。目前,有关于分布式Session数据的共享基本上都是基于Memcached服务器的,其中,Memcached本质上是一个内存缓存系统。因此,如果发生网络故障或是Memcached服务器宕机,则存储在这台Memcached服务器上的所有Session数据都将不可访问,并且由于Session数据是存储在内存中的,一旦重启Memcached服务器,就会导致Session数据全部丢失。
技术实现要素:
本申请提供了一种实现会话(Session)共享的系统、方法、服务器和集群设备,能够提升Session数据的安全性。
为了达到本申请目的,本发明实施例提供了一种实现会话Session共享的系统,包括:一个或多个服务器和集群设备;集群设备包括一个主用处理器和多个辅助处理器;其中,
服务器,用于接收到客户端发送的用户请求,判断该用户请求携带的cookie中是否存在第一会话标识SessionID;当判断出用户请求携带的cookie中存在第一SessionID时,在本地内存区域中查找与该第一SessionID对应的第一Session数据;判断查找到的第一Session数据是否是有效数据;当判断出查找到的第一Session数据是无效数据时,则向主用处理器发送第一通知;接收到主用处理器发送的通知,为与所述用户请求对应的Session创建第二SessionID,并向主用处理器发送第二通知;
主用处理器,用于接收到服务器发送的第一通知,根据第一通知删除自身、本地内存区域以及每个辅助处理器中预先对应存储的该第一SessionID和与该第一SessionID对应的第一Session数据;通知服务器创建与用户请求对应的第二SessionID;接收到服务器发送的第二通知,根据第二通知在本地第一存储单元中对应存储与用户请求对应的第二Session数据和第二SessionID,并且将对应存储的第二Session数据和第二SessionID同步至多个辅助处理器中;
辅助处理器,用于预先对应存储第一SessionID和与第一SessionID对应的第一Session数据;对应存储主用处理器同步过来的第二Session数据和第二SessionID。
可选地,所述服务器,还用于当判断出所述用户请求携带的cookie中不存在所述第一SessionID时,为与所述用户请求对应的Session创建第三SessionID作为所述第一SessionID;向所述主用处理器发送第三通知;相应地,
所述主用处理器,还用于接收到服务器发送的所述第三通知,在所述本地第一存储单元中对应存储与所述用户请求对应的第三Session数据和所述第一SessionID,并且将对应存储的所述第三Session数据和所述第一SessionID同步至多个辅助处理器中;相应地,
所述辅助处理器,还用于对应存储所述主用处理器同步过来的所述第三Session数据和所述第一SessionID。
可选地,所述服务器中用于在本地内存区域中查找与该第一SessionID对应的第一Session数据包括:根据所述第一SessionID判断本地内存区域中是否有所述第一Session数据;当判断出所述本地内存区域中有所述第一Session数据,从所述本地内存区域中读取所述第一Session数据;当判断出所述本地内存区域中没有所述第一Session数据,向所述主用处理器发送第四通知;从所述本地内存区域中读取所述第一Session数据;相应地,
所述主用处理器,还用于接收到所述服务器发送的所述第四通知,查找与所述第一SessionID对应的Session数据;将查找到的Session数据同步至所述本地内存区域中。
可选地,所述主用处理器中用于查找与所述第一SessionID对应存储的Session数据包括:在所述多个辅助处理器中确定满足预设条件的一个辅助处理器并通知满足所述预设条件的一个辅助处理器;接收来自所述满足所述预设条件的一个辅助处理器发送的查找到的与所述第一SessionID对应存储的Session数据并将接收到的所述Session数据作为与所述第一SessionID对应的Session数据;相应地,
所述满足所述预设条件的一个辅助处理器,用于在本地第二存储单元中查找与所述第一SessionID对应存储的Session数据;将查找到的与所述第一SessionID对应存储的Session数据发送给所述主用处理器。
可选地,所述服务器,还用于当判断出查找到的所述第一Session数据是有效数据时,向所述主用处理器发送第五通知;相应地,
所述主用处理器,还用于接收到所述服务器发送的所述第五通知,更新自身、所述本地内存区域以及每个辅助处理器中存储的所述第一Session数据中的最后访问时间。
可选地,所述服务器中用于判断查找到的第一Session数据是否是有效数据包括:
获取当前时间;
计算获得的当前时间和所述第一Session数据中的最后访问时间之间的差值;
判断所述差值是否大于预设时长阈值;
当判断出所述差值大于预设时长阈值,判断出所述第一Session数据是无效数据;
当判断出所述差值小于或等于预设时长阈值,判断出所述第一Session数据是有效数据。
可选地,所述服务器,还用于在所述为与所述用户请求对应的Session创建第二SessionID之后,将创建的所述第二SessionID作为所述第一SessionID存储至所述cookie中并将存储了所述第一SessionID的cookie返回给用户。
本发明实施例还提供了一种实现会话Session共享的方法,包括:
主用处理器接收到服务器发送的第一通知,根据所述第一通知删除自身、本地内存区域以及每个辅助处理器中预先对应存储的该第一会话标识SessionID和与该第一SessionID对应的第一Session数据,并通知服务器创建与用户请求对应的第二SessionID;
主用处理器接收到服务器发送的第二通知,根据所述第二通知在本地第一存储单元中对应存储与用户请求对应的第二Session数据和第二SessionID,并且将对应存储的第二Session数据和第二SessionID同步至多个辅助处理器中。
可选地,在所述主用处理器接收到服务器发送的第一通知之前,该方法还包括:
所述服务器接收到客户端发送的用户请求,判断该用户请求携带的cookie中是存在所述第一SessionID;
当判断出用户请求携带的cookie中存在第一SessionID时,所述服务器在本地内存区域中查找与该第一SessionID对应的第一Session数据;
所述服务器判断查找到的第一Session数据是否是有效数据;当判断出查找到的第一Session数据是无效数据时,则向主用处理器发送所述第一通知;
所述服务器接收到主用处理器发送的通知,为与该用户请求对应的Session创建第二SessionID,并向主用处理器发送所述第二通知。
可选地,当所述服务器判断出所述用户请求携带的cookie中不存在所述第一SessionID时,该方法还包括:
所述服务器为与所述用户请求对应的Session创建第三SessionID作为所述第一SessionID;向所述主用处理器发送第三通知;
所述主用处理器接收到服务器发送的所述第三通知,在所述本地第一存储单元中对应存储与所述用户请求对应的第三Session数据和所述第一SessionID,并且将对应存储的所述第三Session数据和所述第一SessionID同步至多个辅助处理器中。
可选地,所述服务器在本地内存区域中查找与该第一SessionID对应的第一Session数据包括:
所述服务器根据所述第一SessionID判断本地内存区域中是否有所述第一Session数据;当判断出所述本地内存区域中有所述第一Session数据,所述服务器从所述本地内存区域中读取所述第一Session数据;
当判断出所述本地内存区域中没有所述第一Session数据,所述服务器向所述主用处理器发送第四通知;从所述本地内存区域中读取所述第一Session数据;所述主用处理器接收到所述服务器发送的所述第四通知,查找与所述第一SessionID对应的Session数据;将查找到的Session数据同步至所述本地内存区域中;所述服务器从所述本地内存区域中读取同步过来的所述Session数据。
可选地,所述主用处理器查找与所述第一SessionID对应存储的Session数据包括:
所述主用处理器在所述多个辅助处理器中确定满足预设条件的一个辅助处理器并通知满足所述预设条件的一个辅助处理器;
所述满足所述预设条件的一个辅助处理器在本地第二存储单元中查找与所述第一SessionID对应存储的Session数据;将查找到的与所述第一SessionID对应存储的Session数据发送给所述主用处理器;
所述主用处理器接收来自所述满足所述预设条件的一个辅助处理器发送的查找到的与所述第一SessionID对应存储的Session数据并将接收到的所述Session数据作为与所述第一SessionID对应的Session数据。
可选地,当所述服务器判断出查找到的所述第一Session数据是有效数据时,该方法还包括:所述服务器向所述主用处理器发送第五通知;所述主用处理器接收到所述服务器发送的所述第五通知,更新自身、所述本地内存区域以及每个辅助处理器中存储的所述第一Session数据中的最后访问时间。
可选地,所述服务器判断查找到的第一Session数据是否是有效数据包括:
所述服务器获取当前时间;
所述服务器计算获得的当前时间和所述第一Session数据中的最后访问时间之间的差值;
所述服务器判断所述差值是否大于预设时长阈值;
当判断出所述差值大于预设时长阈值,所述服务器判断出所述第一Session数据是无效数据;
当判断出所述差值小于或等于预设时长阈值,所述服务器判断出所述第一Session数据是有效数据。
可选地,在所述为与所述用户请求对应的Session创建第二SessionID之后,该方法还包括:所述服务器将创建的所述第二SessionID作为所述第一SessionID存储至所述cookie中并将存储了所述第一SessionID的cookie返回给用户。
本发明实施例还提供了一种服务器,包括:收发模块、判断模块、查找模块和创建模块;其中,
收发模块,用于接收到客户端发送的用户请求;接收到判断模块发送的通知,则向主用处理器发送第一通知;接收来自主用处理器的通知,通知创建模块;接收到创建模块发送的通知,向主用处理器发送第二通知;
判断模块,用于判断该用户请求携带的cookie中是否存在第一会话标识SessionID;当判断出用户请求携带的cookie中存在第一SessionID时,通知查找模块;判断查找到的第一Session数据是否是有效数据;当判断出查找到的第一Session数据是无效数据时,通知收发模块;
查找模块,用于在本地内存区域中查找与该第一SessionID对应的第一Session数据;
创建模块,用于接收到收发模块发送的通知,为与该用户请求对应的Session创建第二SessionID;通知收发模块向主用处理器发送第二通知。
可选地,所述判断模块,还用于当判断出所述用户请求携带的cookie中不存在所述第一SessionID时,通知所述创建模块;相应地,
所述创建模块,还用于接收到所述判断模块发送的通知,为与所述用户请求对应的Session创建第三SessionID作为所述第一SessionID;通知所述收发模块向所述主用处理器发送第三通知;相应地,
所述收发模块,还用于向所述主用处理器发送所述第三通知。
可选地,所述查找模块具体用于:根据所述第一SessionID判断本地内存区域中是否有所述第一Session数据;当判断出所述本地内存区域中有所述第一Session数据,从所述本地内存区域中读取所述第一Session数据;当判断出所述本地内存区域中没有所述第一Session数据,通知所述收发模块向所述主用处理器发送第四通知;从所述本地内存区域中读取所述第一Session数据。
可选地,所述判断模块,还用于当判断出查找到的所述第一Session数据是有效数据时,通知所述收发模块向所述主用处理器发送第五通知;相应地,
所述收发模块,还用于接收到所述判断模块发送的通知,向所述主用处理器发送第五通知。
可选地,所述判断模块中用于判断查找到的第一Session数据是否是有效数据包括:
获取当前时间;
计算获得的当前时间和所述第一Session数据中的最后访问时间之间的差值;
判断所述差值是否大于预设时长阈值;
当判断出所述差值大于预设时长阈值,判断出所述第一Session数据是无效数据;
当判断出所述差值小于或等于预设时长阈值,判断出所述第一Session数据是有效数据。
可选地,所述收发模块,还用于将创建的所述第二SessionID作为所述第一SessionID存储至所述cookie中并将存储了所述第一SessionID的cookie返回给用户。
本发明实施例还提供了一种集群设备,包括:一个主用处理器和多个辅助处理器;其中,
主用处理器,用于接收到服务器发送的第一通知,删除自身、本地内存区域以及每个辅助处理器中预先对应存储的该第一会话标识SessionID和与该第一SessionID对应的第一Session数据;通知服务器;接收到服务器发送的第二通知,在本地第一存储单元中对应存储与该用户请求对应的第二Session数据和该第二SessionID,并且将对应存储的第二Session数据和第二SessionID同步至多个辅助处理器中;
辅助处理器,用于预先对应存储该第一SessionID和与该第一SessionID对应的第一Session数据;对应存储主用处理器同步过来的第二Session数据和第二SessionID。
可选地,所述主用处理器,还用于接收到服务器发送的所述第三通知,在本地第一存储单元中对应存储与所述用户请求对应的第三Session数据和所述第一SessionID,并且将对应存储的所述第三Session数据和所述第一SessionID同步至多个辅助处理器中;相应地,
所述辅助处理器,还用于对应存储所述主用处理器同步过来的所述第三Session数据和所述第一SessionID。
可选地,所述主用处理器,还用于接收到所述服务器发送的所述第四通知,查找与所述第一SessionID对应的Session数据;将查找到的Session数据同步至所述本地内存区域中。
可选地,所述主用处理器中用于查找与所述第一SessionID对应存储的Session数据包括:在所述多个辅助处理器中确定满足预设条件的一个辅助处理器并通知满足所述预设条件的一个辅助处理器;接收来自所述满足所述预设条件的一个辅助处理器发送的查找到的与所述第一SessionID对应存储的Session数据并将接收到的所述Session数据作为与所述第一SessionID对应的Session数据;相应地,
所述满足所述预设条件的一个辅助处理器,用于在本地第二存储单元中查找与所述第一SessionID对应存储的Session数据;将查找到的与所述第一SessionID对应存储的Session数据发送给所述主用处理器。
可选地,所述主用处理器,还用于接收到所述服务器发送的所述第五通知,更新自身、所述本地内存区域以及每个辅助处理器中存储的所述第一Session数据中的最后访问时间。
本发明实施例包括:主用处理器接收到服务器发送的第一通知,根据所述第一通知删除自身、本地内存区域以及每个辅助处理器中预先对应存储的第一会话标识SessionID和与该第一SessionID对应的第一Session数据,并通知服务器创建与用户请求对应的第二SessionID;主用处理器接收到所述服务器发送的第二通知,根据所述第二通知在本地第一存储单元中对应存储与用户请求对应的第二Session数据和第二SessionID,并且将对应存储的第二Session数据和第二SessionID同步至多个辅助处理器中。本发明实施例提升了Session数据的安全性。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为本申请实现Session共享的系统的架构图;
图2为本申请实现Session共享的方法的流程图;
图3为本申请实现Session共享的方法的实施例的流程图;
图4为本申请服务器的结构示意图;
图5为本申请集群设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
图1为本申请实现Session共享的系统的架构图,如图1所示,包括:一个或多个服务器和集群设备;集群设备包括一个主用处理器和多个辅助处理器。其中,
服务器,用于接收到客户端发送的用户请求,判断该用户请求携带的cookie中是否存在第一会话标识(SessionID);当判断出用户请求携带的cookie中存在第一SessionID时,在本地内存区域中查找与该第一SessionID对应的第一Session数据;判断查找到的第一Session数据是否是有效数据;当判断出查找到的第一Session数据是无效数据时,则向主用处理器发送第一通知;接收到主用处理器发送的通知,为与该用户请求对应的Session创建第二SessionID,并向主用处理器发送第二通知。
其中,cookie是指某些网站为了辨别用户身份、进行Session跟踪而储存在用户本地终端上的数据(通常经过加密)。
主用处理器,用于接收到服务器发送的第一通知,根据第一通知删除自身、本地内存区域以及每个辅助处理器中预先对应存储的该第一SessionID和与该第一SessionID对应的第一Session数据;通知服务器创建与用户请求对应的第二SessionID;接收到服务器发送的第二通知,根据第二通知在本地第一存储单元中对应存储与该用户请求对应的第二Session数据和该第二SessionID,并且将对应存储的第二Session数据和第二SessionID同步至多个辅助处理器中。
其中,本地第一存储单元可以是主用处理器的自身的硬盘。
辅助处理器,用于预先对应存储该第一SessionID和与该第一SessionID对应的第一Session数据;对应存储主用处理器同步过来的第二Session数据和第二SessionID。
其中,辅助处理器中预先对应存储的该第一SessionID和与该第一SessionID对应的第一Session数据是由主用处理器同步过来的数据。
可选地,服务器,还用于当判断出用户请求携带的cookie中不存在第一SessionID时,为与用户请求对应的Session创建第三SessionID作为第一SessionID;向主用处理器发送第三通知;相应地,
主用处理器,还用于接收到服务器发送的第三通知,在本地第一存储单元中对应存储与用户请求对应的第三Session数据和第一SessionID,并且将对应存储的第三Session数据和第一SessionID同步至多个辅助处理器中;相应地,
辅助处理器,还用于对应存储主用处理器同步过来的第三Session数据和第一SessionID。
其中,服务器中用于在本地内存区域中查找与该第一SessionID对应的第一Session数据包括:根据第一SessionID判断本地内存区域中是否有第一Session数据;当判断出本地内存区域中有第一Session数据,从本地内存区域中读取第一Session数据;当判断出本地内存区域中没有第一Session数据,向主用处理器发送第四通知;从本地内存区域中读取第一Session数据;相应地,
主用处理器,还用于接收到服务器发送的第四通知,查找与第一SessionID对应的Session数据;将查找到的Session数据同步至本地内存区域中。
其中,主用处理器中用于查找与第一SessionID对应存储的Session数据包括:在多个辅助处理器中确定满足预设条件的一个辅助处理器并通知满足预设条件的一个辅助处理器;接收来自满足预设条件的一个辅助处理器发送的查找到的与第一SessionID对应存储的Session数据并将接收到的Session数据作为与第一SessionID对应的Session数据;相应地,
满足预设条件的一个辅助处理器,用于在本地第二存储单元中查找与第一SessionID对应存储的Session数据;将查找到的与第一SessionID对应存储的Session数据发送给主用处理器。
其中,本地第二存储单元可以是满足预设条件的一个辅助处理器的自身的硬盘。
其中,预设条件包括:当前处理的进程数最少,或者配置最高,或者资源利用率最低等等。
可选地,服务器,还用于当判断出查找到的第一Session数据是有效数据时,向主用处理器发送第五通知;相应地,
主用处理器,还用于接收到服务器发送的第五通知,更新自身、本地内存区域以及每个辅助处理器中存储的第一Session数据中的最后访问时间。
其中,服务器中用于判断查找到的第一Session数据是否是有效数据包括:
获取当前时间;
计算获得的当前时间和第一Session数据中的最后访问时间之间的差值;
判断差值是否大于预设时长阈值;
当判断出差值大于预设时长阈值,判断出第一Session数据是无效数据;
当判断出差值小于或等于预设时长阈值,判断出第一Session数据是有效数据。
可选地,服务器,还用于在为与用户请求对应的Session创建第二SessionID之后,将创建的第二SessionID作为第一SessionID存储至cookie中并将存储了第一SessionID的cookie返回给用户。
需要说明的是,将SessionID存储至cookie中属于本领域技术人员所熟知的惯用技术手段,此处不再赘述,并不用来限制本申请。
可选地,辅助处理器,还用于当主用处理器宕机时,通过选举算法在自身及其它辅助处理器中选取一个辅助处理器作为主用处理器。
可选地,主用处理器和多个辅助处理器的总数量是奇数。
需要说明的是,集群设备中的每一个处理器(主用处理器或辅助处理器)都相当于一个节点,也即相当于一个选民,它们都有自己的推荐人(自己或其它处理器),比如,最开始它们都推荐自己,而谁更适合成为Leader(领导者或主用处理器)有一个简单的规则,例如配置足够大、持有的数据够新等等;每个选民都告诉其它选民自己目前的推荐人是谁,当选民发现有比自己更适合的选民时就转而推荐这个更适合的选民;最后,大部选民意见一致时,就可以结束选举,从而确定出主用处理器。
可选地,上述多个服务器可以是Memcached服务器,其中,Memcached是一套分布式的高速缓存系统。
图2为本申请实现会话(Session)共享的方法的流程图,如图2所示,包括:
步骤201:主用处理器接收到服务器发送的第一通知,根据第一通知删除自身、本地内存区域以及每个辅助处理器中预先对应存储的该第一会话标识(SessionID)和与该第一SessionID对应的第一Session数据,并通知服务器创建与用户请求对应的第二SessionID。
可选地,在主用处理器接收到服务器发送的第一通知之前,该方法还包括:
服务器接收到客户端发送的用户请求,判断该用户请求携带的cookie中是否存在第一SessionID;
当判断出用户请求携带的cookie中存在第一SessionID时,服务器在本地内存区域中查找与该第一SessionID对应的第一Session数据;
服务器判断查找到的第一Session数据是否是有效数据;当判断出查找到的第一Session数据是无效数据时,则向主用处理器发送第一通知;相应地,
服务器接收到主用处理器发送的通知,为与该用户请求对应的Session创建第二SessionID,并向主用处理器发送第二通知。可选地,在服务器为与用户请求对应的Session创建第二SessionID之后,该方法还包括:服务器将创建的第二SessionID作为第一SessionID存储至cookie中并将存储了第一SessionID的cookie返回给用户。
其中,服务器在本地内存区域中查找与该第一SessionID对应的第一Session数据包括:
服务器根据第一SessionID判断本地内存区域中是否有第一Session数据;当判断出本地内存区域中有第一Session数据,服务器从本地内存区域中读取第一Session数据;
当判断出本地内存区域中没有第一Session数据,服务器向主用处理器发送第四通知;从本地内存区域中读取第一Session数据;主用处理器接收到服务器发送的第四通知,查找与第一SessionID对应的Session数据;将查找到的Session数据同步至本地内存区域中;服务器从本地内存区域中读取同步过来的Session数据。
可选地,当服务器判断出用户请求携带的cookie中不存在第一SessionID时,该方法还包括:
服务器为与用户请求对应的Session创建第三SessionID作为第一SessionID;向主用处理器发送第三通知;
主用处理器接收到服务器发送的第三通知,在本地第一存储单元中对应存储与用户请求对应的第三Session数据和第一SessionID,并且将对应存储的第三Session数据和第一SessionID同步至多个辅助处理器中。
其中,辅助处理器中对应存储有主用处理器同步过来的第三Session数据和第一SessionID。
其中,主用处理器查找与第一SessionID对应存储的Session数据包括:
主用处理器在多个辅助处理器中确定满足预设条件的一个辅助处理器并通知满足预设条件的一个辅助处理器;
满足预设条件的一个辅助处理器在本地第二存储单元中查找与第一SessionID对应存储的Session数据;将查找到的与第一SessionID对应存储的Session数据发送给主用处理器;
主用处理器接收来自满足预设条件的一个辅助处理器发送的查找到的与第一SessionID对应存储的Session数据并将接收到的Session数据作为与第一SessionID对应的Session数据。
其中,本地第二存储单元是指辅助处理器自身的硬盘。其中,一个辅助处理器有一个硬盘。
其中,预设条件包括:当前处理的进程数最少,或者配置最高,或者资源利用率最低等等。
可选地,当服务器判断出查找到的第一Session数据是有效数据时,该方法还包括:服务器向主用处理器发送第五通知;主用处理器接收到服务器发送的第五通知,更新自身、本地内存区域以及每个辅助处理器中存储的第一Session数据中的最后访问时间。
其中,服务器判断查找到的第一Session数据是否是有效数据包括:
服务器获取当前时间;
服务器计算获得的当前时间和第一Session数据中的最后访问时间之间的差值;
服务器判断差值是否大于预设时长阈值;
当判断出差值大于预设时长阈值,服务器判断出第一Session数据是无效数据;
当判断出差值小于或等于预设时长阈值,服务器判断出第一Session数据是有效数据。
步骤202:主用处理器接收到服务器发送的第二通知,根据第二通知在本地第一存储单元中对应存储与该用户请求对应的第二Session数据和该第二SessionID,并且将对应存储的第二Session数据和第二SessionID同步至多个辅助处理器中。
其中,本地第一存储单元是指主用处理器自身的硬盘。
可选地,当主用处理器宕机时,该方法还包括:多个辅助处理器通过选举算法在自身及其它辅助处理器中选取一个辅助处理器作为主用处理器。
需要说明的是,每一个处理器(主用处理器或辅助处理器)都相当于一个节点,也即相当于一个选民,它们都有自己的推荐人(自己或其它处理器),比如,最开始它们都推荐自己,而谁更适合成为Leader(领导者或主用处理器)有一个简单的规则,例如配置足够大、持有的数据够新等等;每个选民都告诉其它选民自己目前的推荐人是谁,当选民发现有比自己更适合的选民时就转而推荐这个更适合的选民;最后,大部选民意见一致时,就可以结束选举,从而确定出主用处理器。
可选地,主用处理器和多个辅助处理器的总数量是奇数。
可选地,上述多个服务器可以是Memcached服务器,其中,Memcached是一套分布式的高速缓存系统。
可选地,该方法之后还包括:服务器根据读取的与用户请求对应的第一Session数据对该用户请求进行处理。
需要说明的是,如何根据读取的Session数据对用户请求进行处理属于本领域技术人员所熟知的惯用技术手段,此处不再赘述,并不用来限制本申请。
需要说明的是,上述中的第一SessionID、第二SessionID和第三SessionID均是可以唯一标识一个会话的身份的,对于同一用户(或客户端)而言,第一SessionID、第二SessionID和第三SessionID是在不同时刻或场景标识同一用户的会话的身份的,因此,在某种意义上,第一SessionID、第二SessionID和第三SessionID是相同的。
需要说明的是,本申请的上述技术方案中,服务器仅仅是对应保存一份SessionID和Session数据,并不对Session数据进行生命周期的管理(如Session数据是无效数据时,删除与该Session数据相关的一切数据;又如,当Session由新数据产生时,也是将新数据更新至对应的Session数据中),而是有集群设备中的主用处理器进行生命周期的管理,从而可以提升服务器读取Session数据和对用户请求进行处理的效率,从而提升了整个系统的系统。
本申请实施方式中,通过主用处理器在本地第一存储单元中对应存储与该用户请求对应的第二Session数据和该第二SessionID,并且将对应存储的第二Session数据和第二SessionID同步至多个辅助处理器中,从而提升了Session数据的安全性。通过服务器在本地内存区域中读取Session数据对用户请求进行操作,从而提升了整个系统的性能。
图3为本申请实现Session共享的方法的实施例的流程图,如图3所示,包括:
步骤301:服务器接收到客户端发送的用户请求。
步骤302:服务器判断该用户请求携带的cookie中是否存在第一会话标识(SessionID)。当判断出用户请求携带的cookie中存在第一SessionID时,转入步骤303;否则,转入步骤309。
步骤303:服务器在本地内存区域中查找与该第一SessionID对应的第一Session数据。
其中,步骤303具体包括:
服务器根据第一SessionID判断本地内存区域中是否有第一Session数据;当判断出本地内存区域中有第一Session数据,服务器从本地内存区域中读取第一Session数据;
当判断出本地内存区域中没有第一Session数据,服务器向主用处理器发送第四通知;从本地内存区域中读取第一Session数据;主用处理器接收到服务器发送的第四通知,查找与第一SessionID对应的Session数据;将查找到的Session数据同步至本地内存区域中;服务器从本地内存区域中读取同步过来的Session数据。
其中,主用处理器查找与第一SessionID对应存储的Session数据包括:
主用处理器在多个辅助处理器中确定满足预设条件的一个辅助处理器并通知满足预设条件的一个辅助处理器;
满足预设条件的一个辅助处理器在本地第二存储单元中查找与第一SessionID对应存储的Session数据;将查找到的与第一SessionID对应存储的Session数据发送给主用处理器;
主用处理器接收来自满足预设条件的一个辅助处理器发送的查找到的与第一SessionID对应存储的Session数据并将接收到的Session数据作为与第一SessionID对应的Session数据。
其中,本地第二存储单元是指辅助处理器自身的硬盘。不同的辅助处理器有不同的本地第二存储单元,也即一个辅助处理器对应一个本地第二存储单元。
其中,预设条件包括:当前处理的进程数最少,或者配置最高,或者资源利用率最低等等。
步骤304:服务器判断查找到的第一Session数据是否是有效数据。当判断出查找到的第一Session数据是无效数据时,转入步骤305;否则,转入步骤311。
其中,步骤304具体包括:
服务器获取当前时间;
服务器计算获得的当前时间和第一Session数据中的最后访问时间之间的差值;
服务器判断差值是否大于预设时长阈值;
当判断出差值大于预设时长阈值,服务器判断出第一Session数据是无效数据;
当判断出差值小于或等于预设时长阈值,服务器判断出第一Session数据是有效数据。
步骤305:服务器向主用处理器发送第一通知。
步骤306:主用处理器接收到服务器发送的第一通知,根据第一通知删除自身、本地内存区域以及每个辅助处理器中预先对应存储的该第一SessionID和与该第一SessionID对应的第一Session数据,并通知服务器建与用户请求对应的第二SessionID。
步骤307:服务器接收到主用处理器发送的通知,为与该用户请求对应的Session创建第二SessionID;服务器将创建的第二SessionID作为第一SessionID存储至cookie中并将存储了第一SessionID的cookie返回给用户;向主用处理器发送第二通知。
步骤308:主用处理器接收到服务器发送的第二通知,根据第二通知在本地第一存储单元中对应存储与该用户请求对应的第二Session数据和该第二SessionID,并且将对应存储的第二Session数据和第二SessionID同步至多个辅助处理器中。
其中,本地第一存储单元是指主用处理器自身的硬盘。
步骤309:服务器为与用户请求对应的Session创建第三SessionID作为第一SessionID;向主用处理器发送第三通知。
步骤310:主用处理器接收到服务器发送的第三通知,在本地第一存储单元中对应存储与用户请求对应的第三Session数据和第一SessionID,并且将对应存储的第三Session数据和第一SessionID同步至多个辅助处理器中。
其中,辅助处理器中对应存储有主用处理器同步过来的第三Session数据和第一SessionID。
步骤311:服务器向主用处理器发送第五通知;主用处理器接收到服务器发送的第五通知,更新自身、本地内存区域以及每个辅助处理器中存储的第一Session数据中的最后访问时间。转入步骤312。
步骤312:服务器根据读取的与用户请求对应的第一Session数据对该用户请求进行处理。
可选地,当主用处理器宕机时,该方法还包括:多个辅助处理器通过选举算法在自身及其它辅助处理器中选取一个辅助处理器作为主用处理器。
需要说明的是,每一个处理器(主用处理器或辅助处理器)都相当于一个节点,也即相当于一个选民,它们都有自己的推荐人(自己或其它处理器),比如,最开始它们都推荐自己,而谁更适合成为Leader(领导者或主用处理器)有一个简单的规则,例如配置足够大、持有的数据够新等等;每个选民都告诉其它选民自己目前的推荐人是谁,当选民发现有比自己更适合的选民时就转而推荐这个更适合的选民;最后,大部选民意见一致时,就可以结束选举,从而确定出主用处理器。
可选地,主用处理器和多个辅助处理器的总数量是奇数。
可选地,上述多个服务器可以是Memcached服务器,其中,Memcached是一套分布式的高速缓存系统。
可选地,该方法之后还包括:服务器根据读取的与用户请求对应的第一Session数据对该用户请求进行处理。
需要说明的是,如何根据读取的Session数据对用户请求进行处理属于本领域技术人员所熟知的惯用技术手段,此处不再赘述,并不用来限制本申请。
图4为本申请服务器的结构示意图,如图4所示,包括:收发模块、判断模块、查找模块和创建模块。其中,
收发模块,用于接收到用户请求;接收到判断模块发送的通知,则向主用处理器发送第一通知;接收来自主用处理器的通知,通知创建模块;接收到创建模块发送的通知,向主用处理器发送第二通知。
判断模块,用于判断该用户请求携带的cookie中是否存在第一会话标识(SessionID);当判断出用户请求携带的cookie中存在第一SessionID时,通知查找模块;判断查找到的第一Session数据是否是有效数据;当判断出查找到的第一Session数据是无效数据时,通知收发模块。
查找模块,用于在本地内存区域中查找与该第一SessionID对应的第一Session数据。
其中,查找模块具体用于:根据第一SessionID判断本地内存区域中是否有第一Session数据;当判断出本地内存区域中有第一Session数据,从本地内存区域中读取第一Session数据;当判断出本地内存区域中没有第一Session数据,通知收发模块向主用处理器发送第四通知;从本地内存区域中读取第一Session数据。
创建模块,用于接收到收发模块发送的通知,为与该用户请求对应的Session创建第二SessionID;通知收发模块向主用处理器发送第二通知。
可选地,判断模块,还用于当判断出用户请求携带的cookie中不存在第一SessionID时,通知创建模块;相应地,
创建模块,还用于接收到判断模块发送的通知,为与用户请求对应的Session创建第三SessionID作为第一SessionID;通知收发模块向主用处理器发送第三通知;相应地,
收发模块,还用于向主用处理器发送第三通知。
可选地,判断模块,还用于当判断出查找到的第一Session数据是有效数据时,通知收发模块向主用处理器发送第五通知;相应地,
收发模块,还用于接收到判断模块发送的通知,向主用处理器发送第五通知。
其中,判断模块中用于判断查找到的第一Session数据是否是有效数据包括:
获取当前时间;
计算获得的当前时间和第一Session数据中的最后访问时间之间的差值;
判断差值是否大于预设时长阈值;
当判断出差值大于预设时长阈值,判断出第一Session数据是无效数据;
当判断出差值小于或等于预设时长阈值,判断出第一Session数据是有效数据。
可选地,收发模块,还用于将创建的第二SessionID作为第一SessionID存储至cookie中并将存储了第一SessionID的cookie返回给用户。
图5为本申请集群设备的结构示意图,如图5所示,包括:一个主用处理器和多个辅助处理器。其中,
主用处理器,用于接收到服务器发送的第一通知,根据第一通知删除自身、本地内存区域以及每个辅助处理器中预先对应存储的该第一SessionID和与该第一SessionID对应的第一Session数据,并通知服务器建与用户请求对应的第二SessionID;接收到服务器发送的第二通知,根据第二通知在本地第一存储单元中对应存储与该用户请求对应的第二Session数据和该第二SessionID,并且将对应存储的第二Session数据和第二SessionID同步至多个辅助处理器中。
辅助处理器,用于预先对应存储该第一SessionID和与该第一SessionID对应的第一Session数据;对应存储主用处理器同步过来的第二Session数据和第二SessionID。
可选地,主用处理器,还用于接收到服务器发送的第三通知,在本地第一存储单元中对应存储与用户请求对应的第三Session数据和第一SessionID,并且将对应存储的第三Session数据和第一SessionID同步至多个辅助处理器中;相应地,
辅助处理器,还用于对应存储主用处理器同步过来的第三Session数据和第一SessionID。
可选地,主用处理器,还用于接收到服务器发送的第四通知,查找与第一SessionID对应的Session数据;将查找到的Session数据同步至本地内存区域中。
其中,主用处理器中用于查找与第一SessionID对应存储的Session数据包括:在多个辅助处理器中确定满足预设条件的一个辅助处理器并通知满足预设条件的一个辅助处理器;接收来自满足预设条件的一个辅助处理器发送的查找到的与第一SessionID对应存储的Session数据并将接收到的Session数据作为与第一SessionID对应的Session数据;相应地,
满足预设条件的一个辅助处理器,用于在本地第二存储单元中查找与第一SessionID对应存储的Session数据;将查找到的与第一SessionID对应存储的Session数据发送给主用处理器。
其中,预设条件包括:当前处理的进程数最少,或者配置最高,或者资源利用率最低等等。
可选地,主用处理器,还用于接收到服务器发送的第五通知,更新自身、本地内存区域以及每个辅助处理器中存储的第一Session数据中的最后访问时间。
可选地,辅助处理器,还用于当主用处理器宕机时,通过选举算法在自身及其它辅助处理器中选取一个辅助处理器作为主用处理器。
可选地,主用处理器和多个辅助处理器的总数量是奇数。
需要说明的是,每一个处理器(主用处理器或辅助处理器)都相当于一个节点,也即相当于一个选民,它们都有自己的推荐人(自己或其它处理器),比如,最开始它们都推荐自己,而谁更适合成为Leader(领导者或主用处理器)有一个简单的规则,例如配置足够大、持有的数据够新等等;每个选民都告诉其它选民自己目前的推荐人是谁,当选民发现有比自己更适合的选民时就转而推荐这个更适合的选民;最后,大部选民意见一致时,就可以结束选举,从而确定出主用处理器。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件(例如处理器)完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,例如通过集成电路来实现其相应功能,也可以采用软件功能模块的形式实现,例如通过处理器执行存储于存储器中的程序/指令来实现其相应功能。本发明不限制于任何特定形式的硬件和软件的结合。
以上仅为本申请的优选实施例,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。