一种缓存方法、设备及缓存服务系统与流程

文档序号:13520942阅读:268来源:国知局

本申请涉及缓存技术,尤其涉及一种缓存方法、设备及缓存服务系统。



背景技术:

微服务架构是一项在云中部署应用和服务的架构风格。微服务的基本思想在于考虑围绕着业务领域组件来创建应用,这些就应用可独立地进行开发、管理和加速。在分散的组件中使用微服务云架构和平台使部署、管理和服务功能交付变得更加简单。微服务架构流行后,越来越多的web(worldwideweb,全球广域网)服务开始采用rest(representationalstatetransfer,表述性状态传递)风格设计和实现。每个微服务的业务开发,都依赖于第三方微服务提供的rset接口。

在现有技术中,许多网站通常会使用分布式高速缓存系统(例如:memcache)技术来提升网站的访问速度。memcache是一套分布式的高速缓存系统,其是一种开放源代码软件,以bsdlicense(berkeleysoftwaredistributionlicense,伯克利软件发行版许可证)授权发布。对于一些大型的、需要频繁访问数据库的网站,通过使用memcache缓存系统,访问速度提升效果十分显著。

在使用memcache缓存系统为微服务设备上运行的微服务提供缓存服务时,如图1所示,在memcache缓存系统中包括由多个缓存节点(node)组成的缓存集群,微服务设备使用memcache提供的客户端开发包,通过tcp(transmissioncontrolprotocol,传输控制协议)协议和memcache缓存集群进行通讯并获取缓存数据。若获取缓存失败,则由微服务设备直接调用其他微服务设备提供的rest接口获取数据,之后再利用获取的数据对memcache缓存集群中的缓存数据进行定时更新。

在上述过程中,发明人发现现有技术中至少存在以下技术问题:当服务需求方微服务设备调用服务提供方微服务设备提供的rest接口获取数据时,memcache缓存系统需要从服务需求方微服务设备定时获取数据,以对memcache缓存系统中的缓存数据进行更新。这样就存在缓存数据不能及时更新的问题,进而当微服务设备从memcache缓存系统中获取缓存数据时,就无法保证所获取的缓存数据是最新数据。另外,因为memcache缓存系统只对从服务提供方微服务设备获取的数据更新缓存数据,因此,当服务需求方微服务设备需要对服务提供方微服务设备中的数据进行其他修改操作(例如新建、更新、删除)时,memcache缓存系统无法根据修改操作更新memcache缓存系统中的缓存数据。



技术实现要素:

本申请的实施例提供一种缓存方法、设备及缓存服务系统,能够在微服务设备发送的数据操作请求需要通过其他微服务设备执行时,通过由缓存服务器来向另一微服务设备转发数据操作请求,使缓存服务器能够根据该数据操作请求以及从另一微服务设备返回的执行结果,对缓存服务器中的缓存数据及时进行更新或清除,进而确保了缓存服务器中的缓存数据始终为最新数据。为达到上述目的,本申请的实施例采用如下技术方案:

第一方面,本申请实施例提供了一种缓存方法,包括:缓存服务器接收微服务设备发送的数据操作请求。当缓存服务器确定数据操作请求需要通过其他微服务设备执行时,则缓存服务器向其他微服务设备转发数据操作请求。其他微服务设备根据数据操作请求执行相应操作,并向缓存服务器发送执行结果。缓存服务器将执行结果转发至微服务设备,并根据执行结果修改缓存服务器中数据操作请求对应的缓存数据。在本申请实施例提供的缓存方法中,能够在微服务设备发送的数据操作请求需要通过其他微服务设备执行时,根据其他微服务设备发送的执行结果对缓存服务器中的缓存数据及时进行相应的修改,进而保证了缓存服务器中的缓存数据始终为最新数据。避免了现有技术中因缓存服务器无法直接根据微服务设备对其他微服务设备中的数据的获取/修改操作对缓存服务器中的缓存数据进行及时更新,进而无法保证缓存服务器中的缓存数据是最新数据的问题。另外,本申请实施例中通过由缓存服务器来接收微服务设备的数据操作请求,再根据需要由缓存服务器将数据操作请求转发给其他微服务设备,进而避免了在需要通过其他微服务设备执行数据操作请求时,微服务设备所发送的数据操作请求的并发请求能力以及单位时间内请求数需要依赖于其他微服务设备的接收请求的能力的问题。

在第一种可能的设计中,结合第一方面,上述缓存服务器可以为分布式缓存服务器集群中的主缓存服务器,该分布式缓存服务器集群包括主缓存服务器,至少一个从缓存服务器以及缓存集群管理设备。其中,该分布式缓存服务器集群可以为zookeeper集群。进而,本申请实施例所述方法还包括,主缓存服务器接收微服务设备通过负载均衡发送的数据操作请求。缓存服务器接收其他微服务设备发送的执行结果之后,所述方法还包括主缓存服务器向缓存集群管理设备发送缓存修改通知,以便缓存集群管理设备对从缓存服务器中数据操作请求对应的缓存数据进行修改。本设计中,当主缓存服务器接收到其他微服务设备发送的执行结果后,缓存集群管理设备则根据主缓存服务器向发送的缓存修改通知,对从缓存服务器中数据操作请求对应的缓存数据进行修改,进而保证了从缓存服务器中缓存数据的及时更新。另外,本设计中在向缓存服务器发送数据操作请求之前,先通过负载均衡确定主缓存服务器,进而可以均衡各缓存服务器的访问量,保证了缓存服务器的可靠性。另外,当分布式缓存服务器集群为zookeeper集群时,从缓存服务器可以通过注册的zookeeperwatcher获取缓存修改通知,进而可以更便捷的对从缓存服务器中的缓存数据进行更新。

在第二种可能的设计中,结合上述第一方面或者第一种可能的设计,当缓存服务器确定数据操作请求需要通过其他微服务设备执行时,则缓存服务器向其他微服务设备转发数据操作请求,包括:缓存服务器确定数据操作请求为获取get请求,并且缓存服务器确定在缓存服务器中无法查询到get请求对应的缓存数据时,则缓存服务器向其他微服务设备转发get请求。根据执行结果修改缓存服务器中数据操作请求对应的缓存数据,包括:根据执行结果更新缓存服务器中数据操作请求对应的缓存数据。本设计中,当缓存服务器中无法查询到get请求对应的缓存数据时,通过由缓存服务器向其他微服务设备转发get请求并且由缓存服务器根据其他微服务设备发送的执行结果及时对缓存数据进行更新,避免了由微服务设备直接调用其他微服务设备提供的get接口获取数据时,缓存服务器不能直接根据get请求的操作更新缓存数据,进而导致缓存数据更新不及时的问题。

在第三种可能的设计中,结合上述第一方面或者第一种可能的设计,当缓存服务器确定数据操作请求需要通过其他微服务设备执行时,则缓存服务器向其他微服务设备转发数据操作请求,包括:缓存服务器确定数据操作请求为数据修改请求,具体的数据修改请求可以是新建post请求或者更新put请求或者删除delete请求,所述数据修改请求用于对所述其他微服务设备中的数据进行相应修改。则缓存服务器向其他微服务设备转发数据修改请求。缓存服务器根据执行结果修改缓存服务器中数据操作请求对应的缓存数据,包括:缓存服务器根据执行结果清除缓存服务器中数据操作请求对应的缓存数据。本设计中,当微服务设备需要调用其他微服务设备的post或者put或者delete接口更新数据时,采用由缓存服务器接收post请求或者put请求或者delete请求并将请求转发给其他微服务,并根据其他微服务设备的执行结果对缓存数据中对应的数据进行清除,进而使缓存服务器能够根据微服务调用其他微服务设备的post或者put或者delete接口所更新的数据,对缓存服务器中对应的缓存数据同步进行清除,保证了缓存服务器中数据为最新数据。避免了当微服务设备调用其他微服务设备的post或者put或者delete接口对数据进行修改后,缓存服务器不能根据修改请求同步更新缓存数据的问题。

在第四种可能的设计中,结合上述第一方面或者上述三种可能的设计,本设计中,缓存服务器与微服务设备之间使用表述性状态传递rest接口进行通讯。同时,缓存服务器中采用js对象标记json格式来存储缓存数据。本设计中,缓存服务器可以与微服务设备之间用rest接口通讯,并关联rest接口的数据操作请求,具体包括get请求或者post请求或者put请求或者delete请求,实现在有get或者post或者put或者delete操作情况下及时更新缓存服务器中缓存数据的效果。并且由于本设计中的缓存服务器利用了rest接口和微服务设备进行通讯,进而使缓存服务器支持各种微服务开发框架,扩大了缓存服务器的使用范围。另外,本设计中缓存服务器采用了与微服务设备的rest接口传输数据相同的json格式数据,进而解决了微服务设备从缓存服务器中获取数据后还需要对缓存数据进行文本解析的问题,提升处理性能。同时,采用json格式来存储数据,还解决了现有技术中因为memcache缓存系统对缓存数据的key、value的限制而导致对缓存数据大小的约束的问题。

第二方面,本申请实施例提供了另一种缓存方法,包括:微服务设备通过表述性状态传递rest接口向缓存服务器发送数据操作请求,以便缓存服务器在确定数据操作请求需要通过其他微服务设备执行后,通过rest接口向其他微服务设备转发数据操作请求;微服务设备通过rest接口接收缓存服务器发送的执行结果。其中,数据操作请求包括:get请求、post请求、put请求或者delete请求中的任一种。本申请实施例提供的缓存方法中,当微服务设备需要对数据进行操作时,先将数据操作请求发送至缓存服务器,再由缓存服务器确定该数据操作请求若需要通过其他微服务设备执行,则由缓存服务器向其他微服务设备转发数据操作请求。进而使微服务设备调用其他微服务设备的get或者post或者put或者delete接口进行数据操作时,缓存服务器可以感知到该数据操作请求并根据数据操作请求及时对缓存数据进行相应的更新。另外,本申请实施例中通过由缓存服务器来接收微服务设备的数据操作请求,再根据需要由缓存服务器将数据操作请求转发给其他微服务设备,进而避免了在需要通过其他微服务设备执行数据操作请求时,微服务设备所发送的数据操作请求的并发请求能力以及单位时间内请求数依赖于其他微服务设备的接收请求的能力的问题。

第三方面,本申请实施例提供了一种缓存服务器,该缓存服务器包括:接收模块用于接收微服务设备发送的数据操作请求;发送模块用于当确定数据操作请求需要通过其他微服务设备执行时,向其他微服务设备转发数据操作请求;接收模块还用于接收其他微服务设备根据数据操作请求执行相应操作之后发送的执行结果;发送模块还用于将执行结果转发至微服务设备;修改模块用于根据执行结果修改缓存服务器中数据操作请求对应的缓存数据。本申请实施例提供的缓存服务器可以为分布式缓存服务器集群中的主缓存服务器,该分布式缓存服务器集群包括主缓存服务器、至少一个从缓存服务器以及缓存集群管理设备,该分布式缓存服务器集群可以是zookeeper集群;其中,接收模块具体用于接收微服务设备通过负载均衡发送的数据操作请求;发送模块还用于接收模块接收其他微服务设备发送的执行结果之后,向缓存集群管理设备发送缓存修改通知,以便缓存集群管理设备对从缓存服务器中数据操作请求对应的缓存数据进行修改。当数据操作请求为获取get请求时,发送模块具体用于当确定处理模块确定数据操作请求为获取get请求并且在缓存服务器中无法查询到get请求对应的缓存数据时,向其他微服务设备转发get请求;修改模块具体用于根据所述执行结果更新缓存服务器中数据操作请求对应的缓存数据。当数据操作请求为用于对所述其他微服务设备中的数据进行相应修改的数据修改请求时,具体的数据修改请求包括:post请求、put请求、delete请求中的任一种,发送模块具体用于当数据操作请求为数据修改请求时向其他微服务设备转发数据修改请求;修改模块具体用于根据执行结果清除缓存服务器中数据操作请求对应的缓存数据。另外,在本申请实施例中缓存服务器与微服务设备之间使用表述性状态传递rest接口进行通讯;缓存服务器中采用js对象标记json格式存储缓存数据。基于同一发明构思,由于该缓存服务器解决问题的原理以及有益效果可以参见上述第一方面和第一方面的各可能的方法实施方式以及所带来的有益效果,因此该缓存服务器的实施可以参见上述第一方面和第一方面的各可能的方法的实施方式,重复之处不再赘述。

第四方面,本申请实施例提供了一种微服务设备,该微服务设备包括:发送模块用于通过rest接口向缓存服务器发送数据操作请求,以便缓存服务器在确定数据操作请求需要通过其他微服务设备执行后,通过rest接口向其他微服务设备转发数据操作请求;接收模块用于发送模块向缓存服务器发送数据操作请求后,通过rest接口接收缓存服务器发送的执行结果。其中,数据操作请求包括:get请求、post请求、put请求和delete请求中的任一种。基于同一发明构思,由于该微服务设备解决问题的原理以及有益效果可以参见上述第二方面和第二方面的各可能的方法实施方式以及所带来的有益效果,因此该微服务设备的实施可以参见上述第二方面和第二方面的各可能的方法的实施方式,重复之处不再赘述。

第五方面,本申请实施例提供一种缓存服务器,包括:处理器、存储器、总线和通信接口;该存储器用于存储计算机执行指令,该处理器与该存储器通过该总线连接,当缓存服务器运行时,该处理器执行该存储器存储的该计算机执行指令,以使该缓存服务器执行上述第一方面中任意一项的缓存方法;基于同一发明构思,所述处理器调用存储在所述存储器中的指令以实现上述第一方面的方法设计中的方案,由于该缓存服务器解决问题的实施方式以及有益效果可以参见上述第一方面和第一方面的各可能的方法的实施方式以及有益效果,因此该缓存服务器的实施可以参见方法的实施,重复之处不再赘述。

第六方面,本申请实施例提供了一种计算机存储介质,包括指令,当其在计算机上运行时,使得计算机执行如第一方面的缓存方法。

第七方面,本申请实施例提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得该计算机执行如第一方面所述的缓存方法。

第八方面,本申请实施例提供一种微服务设备,包括:处理器、存储器、总线和通信接口;该存储器用于存储计算机执行指令,该处理器与该存储器通过该总线连接,当微服务设备运行时,该处理器执行该存储器存储的该计算机执行指令,以使该微服务设备执行上述第二方面中任意一项的缓存方法;基于同一发明构思,所述处理器调用存储在所述存储器中的指令以实现上述第二方面的方法设计中的方案,由于该微服务设备解决问题的实施方式以及有益效果可以参见上述第二方面和第二方面的各可能的方法的实施方式以及有益效果,因此该装置的实施可以参见方法的实施,重复之处不再赘述。

第九方面,本申请实施例提供了一种计算机存储介质,包括指令,当其在计算机上运行时,使得计算机执行如第二方面的缓存方法。

第十方面,本申请实施例提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得该计算机执行如第二方面所述的缓存方法。

第十一方面,本申请实施例提供一种分布式缓存服务器集群,包括上述第三方面的缓存服务器、至少一个从缓存服务器以及缓存集群管理设备。

第十二方面,本申请实施例提供一种缓存服务系统,该缓存服务系统包括上述第三方面的缓存服务器以及第四方面的微服务设备,或者包括上述第十一方面的分布式缓存服务器集群以及第四方面的微服务设备。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。

图1为现有技术中所采用的一种缓存服务系统架构示意图;

图2为zookeeper架构的系统架构示意图;

图3为本申请的实施例提供的一种缓存服务系统的结构示意图;

图4为本申请的实施例提供的一种缓存服务系统的结构示意图;

图5为本申请的实施例提供的一种缓存服务系统的结构示意图;

图6为本申请的实施例提供的一种缓存方法的流程示意图;

图7为本申请的实施例提供的一种缓存方法的流程示意图;

图8为本申请的实施例提供的一种缓存方法的流程示意图;

图9为本申请的实施例提供的一种缓存服务器的结构示意图;

图10为本申请的实施例提供的一种缓存服务器的结构示意图;

图11为本申请的实施例提供的一种缓存服务器的结构示意图;

图12为本申请的实施例提供的一种微服务设备的结构示意图;

图13为本申请的实施例提供的一种微服务设备的结构示意图;

图14为本申请的实施例提供的一种微服务设备的结构示意图。

具体实施方式

下面结合附图,对本申请的实施例进行描述。

针对本申请的实施例用到的技术数据描述如下:

rest(representationalstatetransfer,表述性状态传递):一种软件架构风格。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。rest包括了一组结构约束条件和原则,满足这些约束条件和原则的应用程序或设计就是restful。restful使用轻量级web服务,url(uniformresourcelocator,统一资源定位符)定位资源,用http(hypertexttransferprotocol,超文本传输协议)动词(get,post,delete,put)描述操作。其中,get用来获取资源,post用来新建资源(也可以用于更新资源),put用来更新资源,delete用来删除资源。微服务架构流行后,越来越多的web服务开始采用rest风格设计和实现。每个微服务的业务开发,都依赖于第三方微服务提供的rset接口。rest接口传输数据通常使用json(javascriptobjectnotation,js对象标记)格式。但是在使用第三方微服务的rset接口时,会遇到以下问题:1.并发请求能力、单位时间内请求数依赖第三方微服务,不能根据需求方微服务的需要无限扩展。2.浏览器、后台服务可以对第三方微服务的get请求数据进行缓存,但是无法控制缓存的更新。在执行post/put/delete(其中,“a/b”表示a或者b)等操作后,无法保证从缓存中获取的是最新数据。

zookeeper是一种分布式的、开放源码的分布式应用程序协调服务软件,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。其系统结构如图2所示,其中利用zookeeper建立的集群中包括多个服务节点,客户端可以选择接入其中的一个服务节点接收服务。zookeeper集群具有集群管理能力,可以在多个服务节点中选出主节点,保证高可靠性。zookeeper客户端可以用于配置数据同步,比如客户端配置/app1路径,并且实现回调方法watcher,那么在zookeeper上/app1路径数据发生变化的时候,每个客户端都会收到通知。

nodejs是一个基于chromev8引擎的javascript运行环境。nodejs使用了一个事件驱动、非阻塞式i/o(input/output,输入/输出端口)的模型,使其轻量又高效。json格式数据可以当作nodejs的原生对象在内存存储并进行程序处理,无需额外转换。express是一个基于nodejs平台的极简、灵活的web应用开发框架。可以配置对特定url的get/post/delete/put的javascript处理脚本。

key-value是一种分布式存储系统,其中将键(key)与值(value)对应存储,在进行查询时,可以通过键key快速查询到对应的值value,具有查询速度快、存放数据量大、支持高并发的优点,是一种非常适合通过主键进行查询的方式。

本申请的实施例应用于为微服务设备上运行的微服务提供缓存服务的场景下。如图3所示,为本申请实施例提供的一种缓存服务系统的结构示意图,该缓存服务系统包括一个作为服务需求方的微服务设备101,缓存服务器1021,至少一个作为服务提供方的微服务设备103。

在具体实现中,作为一种实施例,如图4所示,缓存服务器1021可以是缓存服务器集群中的主缓存服务器,该缓存服务系统还包括缓存服务器集群,缓存服务器集群中包括多个缓存服务器(1021-102n)。例如图4中的缓存服务器集群102。其中,如图5所示,缓存服务器集群102可以是zookeeper集群,缓存服务器1021-102n可以是采用nodejs运行环境的express开发框架的缓存nodejs节点。在具体实现中,作为一种实施例,如图5所示,缓存服务器与微服务设备之间可以通过rest接口进行通讯。缓存服务器中可以采用js对象标记json格式存储缓存数据。

基于上述的缓存服务系统,本申请的实施例主要通过第一微服务设备将用于获取或修改数据的数据操作请求发送至缓存服务器,当缓存服务器确定该请求需要通过第二微服务设备执行时,通过缓存服务器来向第二微服务设备转发数据操作请求,使缓存服务器能够根据该数据操作请求以及从第二微服务设备返回的执行结果,对缓存服务器中的缓存数据及时进行更新或清除,进而确保了缓存服务器中的缓存数据始终为最新数据。

具体的,本申请实施例提供了一种缓存方法,参照图6所示,包括以下步骤:

s101、第一微服务设备向缓存服务器发送数据操作请求。

其中,缓存服务器可以为分布式缓存服务器集群中的主缓存服务器,分布式缓存服务器集群包括主缓存服务器、至少一个从缓存服务器以及缓存集群管理设备。进一步的,该分布式缓存服务器集群包括zookeeper集群。

具体的,步骤s101可以包括:主缓存服务器接收第一微服务设备通过负载均衡并通过rest接口发送的数据操作请求。在向缓存服务器发送数据操作请求之前,先通过负载均衡确定主缓存服务器,进而可以均衡各缓存服务器的访问量,保证了缓存服务器的可靠性。此外,本申请实施例中通过由缓存服务器来接收微服务设备的数据操作请求,再根据需要由缓存服务器将数据操作请求依次转发给其他微服务设备,由于缓存服务器可以暂时缓存该数据操作请求,因此当微服务设备发送多个数据操作请求或者多个微服务设备发送数据操作请求时,先由缓存服务器缓存然后再根据需要依次转发给其他微服务设备,进而避免了在需要通过其他微服务设备执行数据操作请求时,微服务设备所发送的数据操作请求的并发请求能力以及单位时间内请求数需要依赖于其他微服务设备的接收请求的能力的问题。

另外,在本申请实施例中缓存服务器可以与微服务设备之间用rest接口通讯,进而使缓存服务器可以关联rest接口的数据修改请求,即get/post/put/delete请求,实现当有post/put/delete操作情况下及时更新缓存服务器中缓存数据的效果。并且由于本设计中的缓存服务器利用了rest接口和微服务设备进行通讯,进而使缓存服务器支持各种微服务开发框架,扩大了缓存服务器的使用范围。

s102、缓存服务器接收第一微服务设备发送的数据操作请求后,当缓存服务器确定数据操作请求需要通过第二微服务设备执行时,缓存服务器向第二微服务设备转发数据操作请求。

具体的,当缓存服务器确定该数据操作请求不能通过缓存服务器中的缓存数据执行时,则缓存服务器向数据操作请求对应的第二微服务设备转发数据操作请求。

例如,当缓存服务器确定数据操作请求为获取get请求,并且缓存服务器确定在缓存服务器中无法查询到get请求对应的缓存数据时,则确定需要通过第二微服务设备获取数据,则缓存服务器通过rest接口向所述get请求对应的第二微服务设备转发get请求。或者,当缓存服务器确定数据操作请求为用于对所述第二微服务设备中的数据进行相应修改的数据修改请求时(如get/post/put/delete请求),则缓存服务器通过rest接口向其他微服务设备转发数据修改请求。

s103、缓存服务器接收第二微服务设备根据数据操作请求执行相应操作之后发送的执行结果。

s104、缓存服务器根据执行结果修改缓存服务器中数据操作请求对应的缓存数据。

具体的,所述缓存服务器中采用js对象标记json格式存储所述缓存数据。通过缓存服务器采用了与微服务设备的rest接口传输数据相同的json格式数据,解决了微服务设备从缓存服务器中获取数据后还需要对缓存数据进行文本解析的问题,提升处理性能。同时,采用json格式来存储数据,还解决了现有技术中因为memcache对缓存数据的key、value的限制而导致对缓存数据大小的约束的问题。

s105、缓存服务器将执行结果转发至第一微服务设备。

可选的,在本申请实施例中,当缓存服务器为分布式缓存服务器集群中的主缓存服务器时,在步骤s104后,所述缓存方法还包括:

s106、主缓存服务器向缓存集群管理设备发送缓存修改通知,以便缓存集群管理设备对从缓存服务器中数据操作请求对应的缓存数据进行修改。

其中,缓存修改通知中携带了主缓存服务器中已经修改的缓存数据的地址,即主缓存服务器中已经修改的数据操作请求对应的缓存数据的地址。具体的,在主缓存服务器向缓存集群管理设备发送缓存修改通知后,缓存集群管理设备会记录主缓存服务器中已经修改的缓存数据的地址,并向从缓存服务器发送缓存更新通知。从缓存服务器根据缓存更新通知,从主缓存服务器中对应的地址获取缓存数据,并对自己的缓存数据进行更新,进而使从缓存服务器中的缓存数据与主缓存服务器中的缓存数据保持同步更新,确保了当有微服务设备从从缓存服务器中获取缓存数据时,所获取的缓存数据为已经更新后的数据。例如,当分布式缓存服务器集群为zookeeper集群时,从缓存服务器可以根据注册的zookeeperwatcher,获取到缓存更新通知。本申请实施例中,当主缓存服务器接收到第二微服务设备发送的执行结果后,缓存集群管理设备则根据主缓存服务器向发送的缓存修改通知,对从缓存服务器中数据操作请求对应的缓存数据进行修改,进而保证了从缓存服务器中缓存数据的及时更新。

在本申请实施例提供的缓存方法中,能够在微服务设备发送的数据操作请求需要通过其他微服务设备执行时,根据其他微服务设备发送的执行结果对缓存服务器中的缓存数据及时进行相应的修改,进而保证了缓存服务器中的缓存数据始终为最新数据。避免了现有技术中因缓存服务器无法直接根据微服务设备对其他微服务设备中的数据的获取/修改操作对缓存服务器中的缓存数据进行及时更新,进而无法保证缓存服务器中的缓存数据是最新数据的问题。

当将本申请上述实施例应用于微服务设备需要调用其他微服务设备的get接口获取数据的场景时,本申请实施例提供另一种缓存方法,参照图7所示,包括以下步骤:

s201、第一微服务设备向缓存服务器发送get请求。

具体的,步骤s201可以包括:主缓存服务器接收第一微服务设备通过负载均衡发送的get请求。

s202、当缓存服务器确定数据操作请求为get请求,并且缓存服务器确定在缓存服务器中无法查询到get请求对应的缓存数据时,缓存服务器向第二微服务设备转发数据操作请求。

具体的,当缓存服务器接收到上述get请求后,用get请求中的url作为目标缓存数据的key,进而在缓存服务器中的缓存数据中查询对应的数据。若对应的数据存在,则直接向微服务设备返回目标缓存数据。若对应的缓存数据不存在,则缓存服务器通过rest接口向get请求对应的微服务设备转发get请求。

s203、缓存服务器接收第二微服务设备根据get请求执行相应操作之后发送的执行结果。

具体的,缓存服务器通过rest接口向第二微服务设备转发get请求之后,第二微服务设备根据get请求查询对应的目标数据,并将查询到的目标数据包含在执行结果中发送至缓存服务器。

s204、缓存服务器根据执行结果修改缓存服务器中数据操作请求对应的缓存数据。

具体的,当缓存服务器为采用nodejs运行环境的express开发框架的缓存服务器时,步骤s204具体可以包括:

s2041、将get请求的url在express中作为javascript处理脚本的入口。

s2042、将get请求的url作为缓存数据的key。

s2043、根据get请求的url,通过javascript处理脚本,在缓存服务器的内存中建立url和缓存json数据的映射表并存储数据缓存。

需要说明的是,在本实施例中,缓存数据默认使用缓存服务器的内存存储,更新缓存数据时,记录累计保存的缓存数据的大小;使用缓存数据时,记录访问时间。当累计缓存数据超过保存缓存数据的门限大小时,清除超过门限时长(例如1天)未使用缓存。若清除结束缓存服务器的内存的空间仍不足,则将缓存数据存储在缓存服务器的本地文件中,根据缓存数据对应的url生成文件名。

s205、缓存服务器将执行结果转发至第一微服务设备。

具体的,缓存服务器向第一微服务设备返回其他微服务设备查询到的目标数据。

需要说明的是,在本实施例中,当get请求为带url参数的请求时,则不执行步骤s204,直接根据步骤s205将查询到的目标数据发送至微服务设备。

可选的,在本实施例中,当缓存服务器为分布式缓存服务器集群中的主缓存服务器时,在步骤s204后,所述缓存方法还包括:

s206、主缓存服务器向缓存集群管理设备发送缓存修改通知,以便缓存集群管理设备对从缓存服务器中数据操作请求对应的缓存数据进行修改。具体包括:

s2061、主缓存服务器向缓存集群管理设备发送缓存修改通知。

s2062、缓存集群管理设备修改对应url的数据,并记录主缓存服务器中已经修改的数据操作请求对应的缓存数据的地址,并向从缓存服务器发送缓存更新通知。

s2063、从缓存服务器获取到缓存更新通知,进而从主缓存服务器中对应的地址获取缓存数据并对自己的缓存数据进行更新。

当分布式缓存服务器集群为zookeeper集群时,修改zookeeper集群管理设备中相应url的路径配置,记录主缓存服务器中已经修改的数据操作请求对应的缓存数据的地址,并触发zookeeperwatcher。从缓存服务器根据zookeeperwatcher,获取到缓存更新通知,进而从主缓存服务器中对应的地址获取缓存数据并对自己的缓存数据进行更新。

在上述实施例所提供的缓存方法中,在微服务设备向缓存服务器发送数据操作请求后,当缓存服务器中无法查询到get请求对应的缓存数据时,通过由缓存服务器向其他微服务设备转发get请求并且由缓存服务器根据其他微服务设备发送的执行结果及时对缓存数据进行更新,避免了由微服务设备直接调用其他微服务设备提供的get接口获取数据时,缓存服务器不能直接根据get请求的操作更新缓存数据,进而导致缓存数据更新不及时的问题。另外,本申请上述方法实施例涉及的各步骤的所有相关内容均可以援引到第一种实施例中的相应描述,重复部分在此不再赘述。

当将本申请上述第一种实施例应用于调用其他微服务设备的数据修改接口修改数据的场景时,本申请实施例提供另一种缓存方法,参照图8所示,包括以下步骤:

s301、缓存服务器接收第一微服务设备发送的用于对所述第二微服务设备中的数据进行相应修改的数据修改请求。

具体的,数据修改请求包括:post请求、put请求和delete请求中的任一请求,其分别表示对数据修改请求对应的其他微服务设备中的数据进行相应修改。

s302、缓存服务器向第二微服务设备转发数据修改请求。

s303、缓存服务器接收第二微服务设备根据数据修改请求执行相应操作之后发送的执行结果。

具体的,缓存服务器通过rest接口向第二微服务设备转发post/put/delete请求之后,第二微服务设备根据post/put/delete请求查询对应的目标数据,并对查询到的目标数据执行相应的修改,并向缓存服务器返回执行结果。

s304、缓存服务器根据执行结果清除缓存服务器中数据操作请求对应的缓存数据。

具体的,当缓存服务器为采用nodejs运行环境的express开发框架的缓存服务器时,在express中,用数据修改请求携带的url作为待清除缓存数据的key,在缓存服务器中的缓存数据中查询到待清除缓存数据,并将该待清除缓存数据清除。

需要说明的是,在本实施例中,对于非url严格匹配场景中,因为同一份数据其对应的get请求所携带的url和修改请求(post/put/delete请求)所携带的url可能是不一样的。因此需要增加url配置规则,配置put/delete/post请求的url对应get请求的url,通过规则匹配保证在进行修改请求后,能够从缓存服务器查询到对应的缓存数据并进行清除。其中,当有url配置规则时,则优先使用匹配规则。例如,在非url严格匹配场景中,第一微服务设备需要对第二微服务设备中的数据a进行相应操作:当需要获取数据a时,则向第二微服务设备发送get请求,其中get请求所携带的用于指向数据a的url地址为“url1”;而当需要修改数据a时,(具体的例如需要更新数据a时)向第二微服务设备发送put请求,此时put请求中所携带的用于指向数据a的url地址为可能并不是“url1”而是“url2”。因此在非url严格匹配场景中,需要增加url配置规则,以使得在利用put请求中的“url2”地址对第二微服务中的数据a进行修改后,缓存服务器能够根据url匹配规则,将缓存数据中“url1”地址对应的缓存数据进行更新。

s305、缓存服务器将执行结果转发至第一微服务设备。

可选的,在本申请实施例中,当缓存服务器为分布式缓存服务器集群中的主缓存服务器时,在步骤s304后,所述缓存方法还包括:

s306、主缓存服务器向缓存集群管理设备发送缓存清除通知,以便缓存集群管理设备对从缓存服务器中数据操作请求对应的缓存数据进行清除。

s3061、主缓存服务器向缓存集群管理设备发送缓存清除通知。

s3062、缓存集群管理设备修改对应url的缓存数据,并向从缓存服务器发送缓存清除通知。

s3063、从缓存服务器获取到缓存清除通知,对从缓存服务器中对应的缓存数据进行清除。

当分布式缓存服务器集群为zookeeper集群时,则从缓存服务器根据注册的zookeeperwatcher,获取到缓存清除通知,对从缓存服务器中对应的缓存数据进行清除。

在本申请上述实施例所提供的缓存方法中,当微服务设备需要调用其他微服务设备的post/put/delete接口更新数据时,采用由缓存服务器接收post/put/delete请求并将请求转发给其他微服务,并根据其他微服务设备的执行结果对缓存数据中对应的数据进行清除,进而使缓存服务器能够根据微服务调用其他微服务设备的post/put/delete接口所更新的数据,对缓存服务器中对应的缓存数据同步进行清除,保证了缓存服务器中数据为最新数据。避免了当微服务设备调用其他微服务设备的post/put/delete接口对数据进行修改后,缓存服务器不能根据修改请求同步清除缓存数据的问题。另外,本申请上述方法实施例涉及的各步骤的所有相关内容均可以援引到上文两个实施例中的相应描述,重复部分在此不再赘述。

本申请实施例提供一种缓存服务器,用于执行上述实施例所提供的缓存方法。本申请实施例可以根据上述方法实例对缓存服务器进行功能模块的划分。例如,可以对应各功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。

在采用对应各个功能划分各个功能模块的情况下,图9示出了上述实施例中所涉及的缓存服务器的一种可能的结构示意图,缓存服务器20包括:接收模块201、发送模块202、修改模块203。其中接收模块201用于执行图6中的步骤s101、s103,图7中的步骤s201、s203,图8中的步骤s301、s303;发送模块202用于执行图6中的步骤s102、s105、s106,图7中的步骤s202、s205、s206,图8中的s302、s305、s306;修改模块203用于执行图6中的步骤s104、图7中的步骤s204、图8中的步骤s304。其中,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。

在采用集成的单元的情况下,图10示出了上述实施例中所涉及的缓存服务器的一种可能的结构示意图。缓存服务器30包括:处理模块301、通信模块302和存储模块303。处理模块301用于对缓存服务器30的动作进行控制管理,例如,处理模块301用于支持缓存服务器10执行图6中的过程s101-s106、图7中的过程s201-s206、图8中的过程s301-306。通信模块302用于支持缓存服务器与其他实体的通信。存储模块303用于存储缓存服务器的程序代码和数据。

其中,处理模块301可以是处理器或控制器,例如可以是中央处理器(centralprocessingunit,cpu),通用处理器,数字信号处理器(digitalsignalprocessor,dsp),专用集成电路(application-specificintegratedcircuit,asic),现场可编程门阵列(fieldprogrammablegatearray,fpga)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。所述处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,dsp和微处理器的组合等等。通信模块302可以是收发器、收发电路或通信接口等。存储模块303可以是存储器。

当处理模块301为如图11所示的处理器,通信模块302为图11的收发器,存储模块303为图11的存储器时,本申请实施例所涉及的缓存服务器可以为如下所述的缓存服务器40。

参照图11所示,该缓存服务器40包括:处理器401、收发器402、存储器403和总线404。

其中,处理器401、收发器402、存储器403通过总线404相互连接;总线404可以是外设部件互连标准(peripheralcomponentinterconnect,pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,eisa)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

处理器401可以是一个通用中央处理器(centralprocessingunit,cpu),微处理器,特定应用集成电路(application-specificintegratedcircuit,asic),或一个或多个用于控制本申请方案程序执行的集成电路。

存储器403可以是只读存储器(read-onlymemory,rom)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(randomaccessmemory,ram)或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(electricallyerasableprogrammableread-onlymemory,eeprom)、只读光盘(compactdiscread-onlymemory,cd-rom)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器可以是独立存在,通过总线与处理器相连接。存储器也可以和处理器集成在一起。

其中,存储器402用于存储执行本申请方案的应用程序代码,并由处理器401来控制执行。收发器402用于接收外部设备输入的内容,处理器401用于执行存储器403中存储的应用程序代码,从而实现本申请实施例中所述的缓存方法。

本申请实施例提供一种微服务设备,用于执行上述实施例所提供的缓存方法。本申请实施例可以根据上述方法实例对微服务设备进行功能模块的划分。例如,可以对应各功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。

在采用对应各个功能划分各个功能模块的情况下,图12示出了上述实施例中所涉及的微服务设备的一种可能的结构示意图,微服务设备50包括:发送模块501、接收模块502。其中发送模块501用于执行图6中的步骤s101、图7中的步骤s201以及图8中的步骤s301,接收模块502用于执行图6中的步骤s105、图7中的步骤s205以及图8中的步骤s305。其中,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。

在采用集成的单元的情况下,图13示出了上述实施例中所涉及的微服务设备的一种可能的结构示意图。微服务设备60包括:处理模块601、通信模块602、存储模块603。处理模块601用于对微服务设备60的动作进行控制管理,例如,处理模块601用于支持微服务设备60执行图6中的步骤s101和s105、图7中的步骤s201和s205以及图8中的步骤s301和s305。通信模块602用于支持微服务设备与其他实体的通信。存储模块603用于存储微服务设备的程序代码和数据。

其中,处理模块601可以是处理器或控制器,例如可以是中央处理器(centralprocessingunit,cpu),通用处理器,数字信号处理器(digitalsignalprocessor,dsp),专用集成电路(application-specificintegratedcircuit,asic),现场可编程门阵列(fieldprogrammablegatearray,fpga)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。所述处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,dsp和微处理器的组合等等。通信模块602可以是收发器、收发电路或通信接口等。存储模块603可以是存储器。

当处理模块601为处理器,通信模块602为收发器,存储模块603为存储器时,本申请实施例所涉及的微服务设备70可以为如下所述的微服务设备70。

参照图14所示,该微服务设备70包括:处理器701、收发器702、存储器703、总线704。

其中,处理器701、收发器702、存储器703通过总线704相互连接;总线704可以是外设部件互连标准(peripheralcomponentinterconnect,pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,eisa)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

处理器701可以是一个通用中央处理器(centralprocessingunit,cpu),微处理器,特定应用集成电路(application-specificintegratedcircuit,asic),或一个或多个用于控制本申请方案程序执行的集成电路。

存储器703可以是只读存储器(read-onlymemory,rom)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(randomaccessmemory,ram)或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(electricallyerasableprogrammableread-onlymemory,eeprom)、只读光盘(compactdiscread-onlymemory,cd-rom)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器可以是独立存在,通过总线与处理器相连接。存储器也可以和处理器集成在一起。

其中,存储器703用于存储执行本申请方案的应用程序代码,并由处理器701来控制执行。收发器702用于接收外部设备输入的内容,处理器701用于执行存储器703中存储的应用程序代码,从而实现本申请实施例中所述的缓存方法。

应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式来实现。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或者数据中心通过有线(例如同轴电缆、光纤、数字用户线(digitalsubscriberline,dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可以用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带),光介质(例如,dvd)、或者半导体介质(例如固态硬盘(solidstatedisk,ssd))等。

以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1