发明内容
本申请的实施例旨在提供一种分布式session服务系统及方法,以解决现有技术中session服务方案存在的上述问题。
为实现上述目的,本申请的实施例提供了一种分布式session服务系统,用在基于用户终端的访问而提供网络页面服务的若干个web应用服务器一侧;该系统包括session客户端及session服务器,其中,
所述session客户端设置在各个所述web应用服务器中,用于在所述用户终端发起访问请求时受所述web应用服务器的调用,在所述session服务器和/或所述用户终端中进行session记录的读写操作;
所述session服务器包括:
配置推送装置,用于在所述web应用服务器启动服务时,将预设的session读写策略发送给所述session客户端;
数据层装置,用于存储由所述session客户端进行读写操作的session记录;以及
权限控制装置,用于在所述web应用服务器调用所述session客户端根据所述session读写策略对所述数据层装置存储的session记录进行读写操作时,控制与各个所述web应用服务器对应的session客户端对特定类型的session记录的读写权限。
本申请的实施例还提供一种分布式session服务方法,应用在基于用户终端的访问而提供网络页面服务的若干个web应用服务器一侧,且对应于所述web应用服务器设置有session客户端,以及对应于所述session客户端设置有session服务器;该方法包括以下步骤:
在所述web应用服务器启动服务时,由所述session服务器将预设的session读写策略发送给所述session客户端;
在所述用户终端发起访问请求时,由所述web应用服务器调用所述session客户端根据所述session读写策略,在所述session服务器中进行session记录的读写操作,并且由所述session服务器控制与各个所述web应用服务器对应的session客户端对特定类型的session记录的读写权限;以及
由所述session服务器存储所述session客户端进行读写操作的session记录。
由上述技术方案可知,本申请实施例提供的分布式session服务系统及方法,可以在实现将session记录集中存储到服务器侧的同时,通过读写权限控制实现session记录在不同类型web应用之间的共享;另外,可以实现session读写策略从服务器到客户端的推送,使得客户端的web应用无需再关心session记录的存储配置。
具体实施方式
下面将详细描述本申请的具体实施例。应当注意,这里描述的实施例只用于举例说明,并不用于限制本申请。
图1为本申请分布式session服务系统的实施例结构框图,如图所示,本实施例的分布式session服务系统包括session服务器11及session客户端12,且该系统布置在基于用户终端的访问而提供网络页面服务的若干个web应用服务器101~104(其上分别启用了三种web应用A~C)一侧。结合图1所示可知,在一个实施例中,web应用服务器可以是针对某个类型的web应用而分布式设置的服务器(例如,针对大业务量的web应用A提供的服务器101和102),也可以是分别针对某个类型的web应用而设置的服务器(例如,分别针对中小业务量的web应用B、C提供的服务器103、104),用户可以通过访问web应用服务器101~104来浏览网页。
进一步如图1所示,session客户端12一一对应地设置在各个web应用服务器101~104中,用于在用户终端发起访问web应用服务器的请求时受对应web应用服务器的调用,在session服务器11和/或用户终端中进行session记录的读写操作,此处提及的读写操作在本说明书中如无特别说明均是指读取和/或写入操作。在一个实施例中,对于session客户端12在用户终端中进行session记录的读写操作,可以是在用户终端浏览器的cookie中进行,此时与背景技术部分所提及利用cookie存储session的解决方案类似,本技术方案的重点不在于此,因此不再赘述。结合后文的描述可知,在一个实施例中,session客户端12的工作具体包括但不限于以下几项:第一,按一定频率从session服务器11处接收session读写策略的前期推送及后续更新;第二,在根据session读写策略确定将session记录写入session服务器11时,将所在web应用服务器根据用户终端的访问而生成的session信息经过序列化、压缩等处理后,发送到session服务器11进行存储,同时也根据其所在web应用服务器的调用对session服务器11所存储的session记录进行读取;以及第三,在根据session读写策略确定将session记录作为cookie写入用户终端时,按常规方法进行处理,例如,还包括根据session读写策略进行cookie中session记录的加密。
接续,在一个实施例中,上述分布式session服务系统的session服务器11进一步包括:配置推送装置111、数据层装置112、权限控制装置113、数据转换装置114、对象控制装置115及服务器监控装置116,下面将对以上各装置分别进行说明。
在一个实施例中,配置推送装置111用于在web应用服务器101~104启动各自的web应用A~C时,将针对各web应用A~C所预设的session读写策略发送给对应的session客户端12。具体来说,在一个实施例中,web应用服务器101~104在启动各自的web应用A~C时,session客户端12可以被配置为自动来读取配置推送装置111所要发送的session读写策略,并且配置推送装置111与session客户端12之间还可以约定是由前者按需向后者发送session读写策略的更新,或者是由后者按一定时间间隔去读取前者所存储的session读写策略。在一个实施例中,上述的session读写策略主要用于配置哪些类型的session记录应该写到session服务器、哪些类型的session记录应该写到用户终端的cookie中、以及session记录写到cookie时要使用的加密算法等等。
进一步,数据层装置112用于存储由session客户端进行读写操作的session记录。在一个实施例中,数据层装置112具体是存储session客户端12写入的根据用户终端对web应用服务器的访问而生成的session记录,以供web应用服务器101~104在用户终端的后续访问中调用session客户端12进行读取和/或写入(改写)操作。在一个实施例中,数据层装置112具体包括存储单元1121及数据读写单元1122,其中,存储单元1121单纯用于具体session记录数据的存储,在一个实施例中,其可以采用双机复制备份的方式并以一定的数据库格式对session客户端12写入的session记录进行存储;而数据读写单元1122则在存储单元1121的上层,其提供与存储单元1121的数据库格式对应的各种数据适配器,并配合session客户端12对存储单元1121存储的session记录进行读写操作。如此一来,本实施例的session服务系统在session服务器11中便实现了数据底层(即存储单元1121)与session应用的隔离,使得数据底层更易维护并且可以任意替换,数据底层可以有多种实现方式,例如数据库、BerkeleyDB、KV(Key-Value)存储等等。在一个实施例中,从性能角度考虑可以选择KV存储来提高存储单元1121的性能,因为KV存储的模式非常简单,只有key和value两个值,于是便能够通过一些较优的数据结构(例如B+Tree)来提高检索速度,并且由于KV存储所占用的空间非常小,从而可以通过一定的策略先将其放在内存中,所有这些都使得KV存储可以帮助存储单元1121获得很高的存储效率。对应于不同类型的数据底层实现方式,在一个实施例中,数据读写单元1122相应地也可以设置多种适配器来适应不同类型的数据层。
接续,在上述session服务器11中,权限控制装置113是在web应用服务器101~104调用session客户端12根据session读写策略来访问数据层装置112存储的session记录时,用于控制与各个web应用服务器101~104对应的session客户端12对特定类型session记录的读写权限。在将session记录集中存储于session服务器11时,针对基于同一个用户终端对集群设置的多个web应用服务器101~104的访问而产生的session记录,势必要产生在web应用服务器101~104之间进行共享的需求。本实施例的分布式session服务系统中,session共享的解决方案即由权限控制装置113控制不同web应用服务器101~104(也即不同类型的web应用A~C)对特定类型session记录的读写权限这一过程来实现,从而使得不同类型的web应用可以很好地维护session记录。例如,权限控制装置113可以控制登录应用(以图1中所示的web应用A为例)对记录登录状态信息的session记录具有读写权限,同时控制其他类型的应用对该session记录只能进行读取操作,这样,其他应用可以通过读取该session记录判断出用户的登录状态,但却不能改写该session记录而改变用户的登录状态。在一个实施例中,上述由权限控制装置113控制的不同web应用服务器对特定类型session记录的读写权限配置,也可以以配置文件的形式与前述session读写策略一起由配置推送装置111发送给web应用服务器101~104对应的session客户端12,由此与各web应用服务器对应的session客户端12在后续便可以根据该读写权限配置文件对特定类型的session记录进行读取/写入操作,从而与此处所述的权限控制装置113一起配合完成后者所要实现的session共享方案。
数据转换装置114用于对session客户端12经过格式转换处理后发送的session记录进行对应的格式反转处理,以便于进行session记录的存储。在一个实施例中,为了减少session客户端12与session服务器11之间的通信传输成本,session客户端12在写入session记录之前可以进行序列化、压缩等格式转换处理,相应地,session服务器11在收到session客户端12发来的数据后,便可以通过数据转换装置114对收到的数据进行反序列化、解压缩等格式反转处理,以便将session记录存储在数据层装置112中。在一个实施例中,对于session客户端12从session服务器11读取session记录的过程,可以不必像写入时那样反向地依次进行格式转换和反转换的处理,但如果session记录的数据非常大,也可以进行双向的序列化、压缩处理。
另外,上述分布式session服务系统实施中的以下装置也分别在承担着各自的功能。其中,对象控制装置115用于控制数据层装置112中所存储session对象的大小及读写频率,以最大限度保证session服务器11中session记录的存储安全;举例来说,如果web应用服务器101~104通过session客户端12写入了太大的session记录,则对象控制装置115可以有权删除该对象;又例如,如果针对某个用户的session记录写入操作非常频繁,则对象控制装置115可以怀疑是机器操作,从而作出拒绝写入的处理。再者,服务器监控装置116用于监测session服务器11中各装置的运行是否正常,并在捕获到异常时向系统维护人员发出警告,从而为上层应用的稳定性提供了保证,加强了session服务的健壮性。
本申请的技术方案还提出一种分布式session服务方法,应用在基于用户终端的访问而提供网络页面服务的若干个web应用服务器一侧,且一一对应于web应用服务器设置有session客户端,以及对应于所有session客户端设置有session服务器,图2为该方法的实施例流程图,如图所示,本实施例的分布式session服务方法,包括以下步骤S201~S205:
S201、在web应用服务器启动服务时,由session服务器将预设的session读写策略发送给session客户端;
S202、在用户终端发起访问请求时,由web应用服务器调用session客户端进行session记录的读写操作;并且,session客户端根据session服务器推送的session读写策略来确定是在用户终端还是在session服务器中进行session记录的读写操作,相应地跳转步骤S203和/或S204。
S203、在用户终端中进行session记录的读写操作;
如以上分布式session服务系统实施例中所述的,session客户端在用户终端中读写session记录的操作具体可以是在cookie中进行,其方案在背景技术部分已有提及,此处不再赘述。
S204、在session服务器中进行session记录的读写操作;
在一个实施例中,session服务器可以控制与各个web应用服务器对应的session客户端对特定类型的session记录的读写权限,以此来实现在多个web应用A~C之间共享session记录的目的。具体而言,上述的读写权限是用于限定web应用服务器对特定类型的session能够进行读取和写入操作,或只能进行读取操作。
另外,上述步骤S202中提及可以跳转到步骤S203和/或S204,也即session客户端可以在用户终端和session服务器中选择其一来写入session记录,也可以同时在用户终端和session服务器中写入session记录。在一个实施例中,对于例如网络支付密码等非常重要的信息,可以考虑加密且仅存储在用户终端的cookie中。在另一个实施例中,对于web应用服务在服务器之间进行迁移的过程,可以设置一个兼容状态,在此期间session记录可以既写到用户终端又写到session服务器中;而在迁移完毕后,就可以去掉写入到用户终端的选择而仅写入到session服务器中。可以理解的是,以上所有这些操作,都可以通过由session服务器向session客户端下发、更新session读写策略来灵活便利地实现。
S205、由session服务器存储session客户端进行读写操作的session记录;
在一个实施例中,在步骤S204中session客户端于session服务器中进行session记录的写入操作之前,可以包括由session客户端对session记录进行序列化、压缩等格式转换处理的步骤;对应的,此处在步骤S205中session服务器存储session客户端所写入session记录的步骤之前,便可以对session客户端发来的数据进行反序列化、解压缩等格式反转处理的步骤,以便进行session记录的存储。
在一个实施例中,该步骤S205中还包括由session服务器控制所存储session记录的大小及读写频率的步骤,以及监测session服务器中各装置是否运行正常并在捕获到异常时向维护人员发出警告的步骤。
以下将结合前述分布式session服务系统的实施例对本申请分布式session服务方法加以进一步描述。在一个实施例中,基于分布式session服务系统的session服务方法流程如下:
(1).首先,web应用服务器101~104启动各自的web应用服务A~C时,通过session客户端12读取session服务器11中配置的session读写策略,具体可以由配置推送装置111将预设的session读写策略反馈给web应用服务器101~104对应的session客户端12;
如之前系统实施例所述,在一个实施例中,配置推送装置111同时还可以将预设的不同web应用服务器(也即各不同类型的web应用A~C)对特定类型session的读写权限配置随session读写策略一起发送至session客户端12。结合参考图1所示,此处可以设置web应用A(对应web应用服务器101~102)对当前session记录有读取和写入的权限,而web应用B、C(分别对应web应用服务器103、104)对当前session记录仅有读取权限。
(2).接续,在用户终端通过访问web应用服务器101(即web应用服务A)来浏览网页的过程中产生某个类型的session记录时,先由session客户端12根据接收到的session读写策略来确定该session记录是写入用户终端的cookie中还是写入session服务器11中;
i).如果是写入用户终端的cookie,session客户端12便可以继续根据session读写策略中的加密方式将session记录加密后写入用户终端浏览器的cookie中,其方式已在背景技术部分有所提及,此处不再赘述;
ii).如果是写入session服务器11中,则session客户端12开始向session服务器11发起写入session记录的操作请求。
(3).之后,session服务器11在收到session客户端12的session写入请求时,先由权限控制装置113判断该web应用服务A是否有对该session记录进行写入操作的权限,再由对象控制装置115判断要写入的session记录大小是否符合预设的限制(同时也可以判断写入的频率是否符合预设的限制),如果前述两个判断都能顺利通过,则可以在数据转换装置114对session客户端12传送过来的所需要写入的数据进行数据转换之后,由数据读写单元1122写入到存储单元1121中。
(4).最后,可以理解,在session服务器11的数据层装置112中写入session记录后,web应用服务器101可以类似按照前述流程对相应session记录进行后续改写,而所有web应用服务器101~104都可以依照类似流程按需对该session记录进行读取。
综上所述,本申请的分布式session服务系统及方法实施例具有以下特点:
(1).session读写策略的自动推送:由session客户端和session服务器的配置推送装置协作完成session读写策略的自动推送,web应用服务器不需要对session方案进行具体配置,而是由session服务器统一进行session记录的配置管理;对于web应用服务器101~104所启用的web应用A~C来说,不需要关心session记录具体存放的位置,相应地,各web应用A~C的业务代码编写者也不需要得知session记录的存放位置,只需要按照固定格式的语句对session记录进行读写操作,例如,session记录的写入语句可以是:session.setAttribute(“key”,”value”),session记录的读取语句可以是:session.getAttribute(“key”);并且,session读写策略在session服务器中配置好后,可以由配置推送装置统一推送到session客户端所在的所有web应用服务器中去,不需要针对每一个web应用服务器进行session配置的替换操作,从而节省了人力,降低了系统风险。
(2).session的集中存储:session可以统一存放到session服务器,使得session更加安全;并且由于设置了专用的数据层装置,因此可以存储更大、内容更多的session;另外,由于session不是全部存放在用户终端的cookie中,如此一来,用户通过客户端访问服务器时,不必带上所有cookie提交到服务器,因此能够减小网络流量消耗,提升用户访问页面的速度。
(3).session的多应用共享:通过权限控制装置控制不同类型的web应用对特定类型session的读写权限,使得多个web应用之间可以很好地共享session。
(4).数据底层读写与应用隔离:数据层装置由单纯存储数据的存储单元及负责数据读写操作的数据读写单元分开配合实现,使得数据底层更易维护,实现方式也可以更加灵活。
(5).session服务层的健壮性保护:通过对象控制装置及服务器监控装置的设置,能够对存在风险的session读写操作进行预防,同时也能随时捕捉系统的任何异常,从而也为上层web应用的稳定性提供了保证。
虽然已参照几个典型实施例描述了本申请,但应当理解,所用的术语是说明和示例性、而非限制性的术语。由于本申请能够以多种形式具体实施而不脱离发明的精神或实质,所以应当理解,上述实施例不限于任何前述的细节,而应在随附权利要求所限定的精神和范围内广泛地解释,因此落入权利要求或其等效范围内的全部变化和改型都应为随附权利要求所涵盖。