数据查询方法、装置、设备及介质转让专利

申请号 : CN202210778274.8

文献号 : CN114860782B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 苏珂任亚军

申请人 : 北京世纪好未来教育科技有限公司

摘要 :

本公开提供一种数据查询方法、装置、设备及介质,该方法包括:定期检测存储中间件的状态,状态包括正常态或异常态;在检测到存储中间件为正常态的情况下,令存储中间件的数据同步至请求处理容器的本地缓存;在当前检测到存储中间件为异常态,且上一次检测到所述存储中间件为正常态的情况下,将当前查询逻辑从正常态查询逻辑切换至异常态查询逻辑;在当前检测到存储中间件为正常态,且上一次检测到所述存储中间件为异常态的情况下,将当前查询逻辑从异常态查询逻辑切换至正常态查询逻辑;在接收到业务请求时,基于所述当前查询逻辑执行数据查询操作。本公开可有效提升业务服务的稳定性和可靠性。

权利要求 :

1.一种数据查询方法,包括:

定期检测存储中间件的状态,其中所述状态包括正常态或异常态;

在检测到所述存储中间件为正常态的情况下,将所述存储中间件的数据同步至请求处理容器的本地缓存;

在当前检测到所述存储中间件为异常态,且上一次检测到所述存储中间件为正常态的情况下,将当前查询逻辑从正常态查询逻辑切换至异常态查询逻辑;以及,在当前检测到所述存储中间件为正常态,且上一次检测到所述存储中间件为异常态的情况下,将当前查询逻辑从异常态查询逻辑切换至正常态查询逻辑;

在接收到业务请求时,基于所述当前查询逻辑执行数据查询操作;

其中,所述正常态查询逻辑为:所述请求处理容器通过所述存储中间件查询处理所述业务请求所需的目标数据;所述异常态查询逻辑为:所述请求处理容器通过所述本地缓存查询所述目标数据;

所述存储中间件包括内存存储介质和持久化存储介质,将所述存储中间件的数据同步至请求处理容器的本地缓存的步骤,包括:从持久化存储介质中获取待同步的原始数据,并将所述原始数据存储至所述内存存储介质,以使所述内存存储介质将所述原始数据同步至请求处理容器的本地缓存,其中:为获取的所述原始数据进行前缀新增处理,得到携带有前缀的原始数据;所述前缀用于作为所述原始数据的关键索引;前缀结构基于业务类型、同步时间以及数据序号构建;

将所述携带有前缀的原始数据存储至所述内存存储介质;

向所述请求处理容器发送所述原始数据对应的前缀信息,以使所述请求处理容器基于所述前缀信息从所述内存存储介质中获取所述原始数据;其中,所述请求处理容器基于所述前缀信息构造所述原始数据的关键索引,基于所述关键索引从所述内存存储介质中获取所述原始数据;且所述前缀信息包括:业务类型、同步时间以及所述同步时间对应的原始数据总量。

2.如权利要求1所述的数据查询方法,其中,为获取的所述原始数据进行前缀新增处理的步骤,包括:按照指定的前缀结构生成所述原始数据的前缀,并将构建的所述前缀添加至所述原始数据的首端。

3.如权利要求1所述的数据查询方法,其中,令存储中间件与请求处理容器的本地缓存之间进行数据同步的步骤,包括:令存储中间件与请求处理容器的本地缓存之间按照预设时间间隔进行数据同步;

和/或,

在监测到所述存储中间件的数据与上一次监测到所述存储中间件的数据不一致的情况下,获取所述存储中间件的变更数据,并将所述变更数据同步更新至所述请求处理容器的本地缓存。

4.如权利要求1所述的数据查询方法,其中,所述方法还包括:

删除所述本地缓存和/或所述存储中间件中的过期数据;其中,所述过期数据的同步时间位于指定时间之前,或者,所述过期数据的同步时间与当前时间的间隔超过指定时长。

5.如权利要求1所述的数据查询方法,其中,所述方法还包括:

通过所述请求处理容器采用查询到的所述目标数据对业务请求进行校验;

在确认所述业务请求合法的情况下,通过所述请求处理容器将所述业务请求发送至业务处理容器,以使所述业务处理容器处理所述业务请求对应的业务。

6.一种数据查询装置,包括:

状态检测模块,用于定期检测存储中间件的状态,其中所述状态包括正常态或异常态;

数据同步模块,用于在检测到所述存储中间件为正常态的情况下,将所述存储中间件的数据同步至请求处理容器的本地缓存;

逻辑切换模块,用于在当前检测到所述存储中间件为异常态,且上一次检测到所述存储中间件为正常态的情况下,将当前查询逻辑从正常态查询逻辑切换至异常态查询逻辑;

以及,在当前检测到所述存储中间件为正常态,且上一次检测到所述存储中间件为异常态的情况下,将当前查询逻辑从异常态查询逻辑切换至正常态查询逻辑;

数据查询模块,用于在接收到业务请求时,基于所述当前查询逻辑执行数据查询操作;

其中,所述正常态查询逻辑为:所述请求处理容器通过所述存储中间件查询处理所述业务请求所需的目标数据;所述异常态查询逻辑为:所述请求处理容器通过所述本地缓存查询所述目标数据;

数据同步模块具体用于:从持久化存储介质中获取待同步的原始数据,并将所述原始数据存储至内存存储介质,以使所述内存存储介质将所述原始数据同步至请求处理容器的本地缓存;

数据同步模块具体用于:为获取的所述原始数据进行前缀新增处理,得到携带有前缀的原始数据;所述前缀用于作为所述原始数据的关键索引;将所述携带有前缀的原始数据存储至所述内存存储介质;向所述请求处理容器发送所述原始数据对应的前缀信息,以使所述请求处理容器基于所述前缀信息从所述内存存储介质中获取所述原始数据;其中,前缀结构基于业务类型、同步时间以及数据序号构建;所述请求处理容器基于所述前缀信息构造所述原始数据的关键索引,基于所述关键索引从所述内存存储介质中获取所述原始数据;且所述前缀信息包括:业务类型、同步时间以及所述同步时间对应的原始数据总量。

7.一种电子设备,包括:

处理器;以及

存储程序的存储器,

其中,所述程序包括指令,所述指令在由所述处理器执行时使所述处理器执行根据权利要求1‑5中任一项所述的数据查询方法。

8.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序用于执行上述权利要求1‑5中任一项所述的数据查询方法。

说明书 :

数据查询方法、装置、设备及介质

技术领域

[0001] 本公开涉及数据处理技术领域,尤其涉及数据查询方法、装置、设备及介质。

背景技术

[0002] 诸如Redis、Memcache等存储中间件是分布式系统或者微服务容器系统中重要的组成部分,很多系统都需要借助存储中间件的内存高吞吐特性实现诸如临时信息存储、限流、分布式锁、业务数据统计等多种核心业务服务,系统在提供大多业务服务时都需要依赖存储中间件,一旦出现存储中间件自身问题不可用的情况或者出现网络问题导致存储中间件不可用的情况,系统无法通过存储中间件查询实现业务服务所需的数据,诸如,无法利用存储中间件中的数据对业务请求进行校验/鉴权等处理,在后续也无法正常提供所需的业务服务,致使业务服务的稳定性及可靠性较差。

发明内容

[0003] 为了解决上述技术问题或者至少部分地解决上述技术问题,本公开提供了一种数据查询方法、装置、设备及介质。
[0004] 根据本公开的一方面,提供了一种数据查询方法,包括:定期检测存储中间件的状态,其中所述状态包括正常态或异常态;在检测到所述存储中间件为正常态的情况下,将所述存储中间件的数据同步至请求处理容器的本地缓存;在当前检测到所述存储中间件为异常态,且上一次检测到所述存储中间件为正常态的情况下,将当前查询逻辑从正常态查询逻辑切换至异常态查询逻辑;以及,在当前检测到所述存储中间件为正常态,且上一次检测到所述存储中间件为异常态的情况下,将当前查询逻辑从异常态查询逻辑切换至正常态查询逻辑;在接收到业务请求时,基于所述当前查询逻辑执行数据查询操作;其中,所述正常态查询逻辑为:所述请求处理容器通过所述存储中间件查询处理所述业务请求所需的目标数据;所述异常态查询逻辑为:所述请求处理容器通过所述本地缓存查询所述目标数据。
[0005] 根据本公开的另一方面,提供了一种数据查询装置,包括:状态检测模块,用于定期检测存储中间件的状态,其中所述状态包括正常态或异常态;数据同步模块,用于在检测到所述存储中间件为正常态的情况下,将所述存储中间件的数据同步至请求处理容器的本地缓存;逻辑切换模块,用于在当前检测到所述存储中间件为异常态,且上一次检测到所述存储中间件为正常态的情况下,将当前查询逻辑从正常态查询逻辑切换至异常态查询逻辑;以及,在当前检测到所述存储中间件为正常态,且上一次检测到所述存储中间件为异常态的情况下,将当前查询逻辑从异常态查询逻辑切换至正常态查询逻辑;数据查询模块,用于在接收到业务请求时,基于所述当前查询逻辑执行数据查询操作;其中,所述正常态查询逻辑为:所述请求处理容器通过所述存储中间件查询处理所述业务请求所需的目标数据;所述异常态查询逻辑为:所述请求处理容器通过所述本地缓存查询所述目标数据。
[0006] 根据本公开的另一方面,提供了一种电子设备,包括:处理器;以及存储程序的存储器,其中,所述程序包括指令,所述指令在由所述处理器执行时使所述处理器执行上述数据查询方法。
[0007] 根据本公开的另一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序用于执行上述数据查询方法。
[0008] 本公开实施例中提供的上述技术方案,可以定期检测存储中间件的状态,在存储中间件正常的情况下可将存储中间件的数据同步至请求处理容器的本地缓存,以便于存储中间件异常时可直接通过本地缓存查询数据,在当前检测到存储中间件的状态与上一次检测到的状态不同时,自动切换至相应的查询逻辑来查询处理业务请求所需的数据,在接收到业务请求时,便可直接基于当前查询逻辑执行数据查询操作。其中,存储中间件处于正常态对应的查询逻辑为请求处理容器通过存储中间件查询数据,存储中间件处于异常态对应的查询逻辑为请求处理容器通过本地缓存查询数据。以上方式可有效避免因存储中间件异常而导致无法正常提供业务服务的情况发生,进一步提升了业务服务的稳定性和可靠性。
[0009] 应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。

附图说明

[0010] 此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
[0011] 为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0012] 图1为本公开实施例提供的一种数据查询方法的流程示意图;
[0013] 图2为本公开实施例提供的一种存储中间件处于正常态的处理流程示意图;
[0014] 图3为本公开实施例提供的一种存储中间件处于异常态的处理流程示意图;
[0015] 图4为本公开实施例提供的一种数据同步示意图;
[0016] 图5为本公开实施例提供的一种数据同步示意图;
[0017] 图6为本公开实施例提供的一种数据查询装置的结构示意图;
[0018] 图7为本公开实施例提供的一种电子设备的结构示意图。

具体实施方式

[0019] 下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。
[0020] 应当理解,本公开的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本公开的范围在此方面不受限制。
[0021] 本公开使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。需要注意,本公开中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。
[0022] 需要注意,本公开中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。
[0023] 为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
[0024] 诸如全局缓存中间件等存储中间件的稳定性和可用性在整个系统(诸如业务系统)的正常运行中占据重要位置,也即其会直接影响到系统能否稳定可靠地对外提供业务服务。现有的很多系统虽然都是分布式架构或者基于容器的微服务架构,其中一个服务的宕机不会影响系统整体的可用性,但是在众多业务服务都需要依赖存储中间件进行数据缓存的情况下,一旦存储中间件因自身问题或者网络问题出现不可用的情况,则会导致众多业务服务不可用,使得系统整体运行出现问题。另外,虽然Redis(Remote Dictionary Server,远程数据服务)、Memcache等存储中间件都对应配置有诸如主从、集群、哨兵模式等高可用架构,虽然一定程度上提升了自身可用性,但可以理解的是,存储中间件作为独立的服务实例个体,与业务服务实例之间的通讯避免不了网络之间的联系,即便存储中间件自身没有故障,但是一旦出现网络中断等现象,仍旧会导致存储中间件不可用。在此情况下仍旧存在系统无法将需要依赖存储中间件的业务服务正常提供给用户。
[0025] 图1为本公开实施例提供的一种数据查询方法的流程示意图,该方法可以由数据查询装置执行,其中该装置可以采用软件和/或硬件实现,一般可集成在电子设备中。如图2所示,该方法主要包括如下步骤S102 步骤S108:~
[0026] 步骤S102,定期检测存储中间件的状态,其中状态包括正常态或异常态。
[0027] 存储中间件主要用于存储数据或缓存数据,可以包括内存存储介质和/或持久化存储介质等。其中,内存存储介质可用于缓存存储数据,诸如可以是Redis(一种内存高速缓存数据库)或Memcache(一种分布式高速缓存系统)等。持久化存储介质可用于持久化存储数据,诸如可以是MySQL(关系型数据库管理系统)。
[0028] 在本公开实施例中,可以定期(按照预设的时间间隔)检测存储中间件的状态,其中,时间间隔可根据需求而设置,诸如设置为每间隔1分钟检测一次,或者,设置为每间隔10分钟检测一次等,在此不进行限制。上述正常态即为存储中间件可用,异常态即为存储中间件不可用。存储中间件的异常态可能是因为存储中间件自身故障导致,也可能是因为网络问题导致,在此对存储中间件的异常原因不进行限制。
[0029] 在一些实施方式中,可以只要检测到存储中间件当前不可用,即认为存储中间件处于异常态,在另一些实施方式中,可以在检测到存储中间件不可用的连续检测次数超过预设阈值,则认为存储中间件处于异常态,诸如,预设阈值为2,如果连续3次检测到存储中间件不可用,则认为存储中间件处于异常态。另外,在存储中间件同时包括内存存储介质和持久化存储介质,且需要内存存储介质和持久化存储介质配合使用的情况下,只要其中一个不可用,即可视为存储中间件不可用。
[0030] 本公开实施例充分考虑到了存储中间件的重要性,通过定期检测存储中间件的状态,有助于后续基于存储中间件的状态进行相应处理。
[0031] 步骤S104,在检测到存储中间件为正常态的情况下,将存储中间件的数据同步至请求处理容器的本地缓存。存储中间件可以存储有多条数据,在实际应用中,可以将存储中间件的至少部分数据同步至请求处理容器的本地缓存,且同步的数据可根据需求预先设定,在此不进行限制。
[0032] 上述请求处理容器可以是处理业务请求的容器,诸如,可以是API(Application Programming Interface,应用程序接口)网关(API Gateway),也可以是鉴权容器(Auth容器)等,在此不进行限制。通常情况下,外部发来的业务请求需要经过请求处理容器进行处理,诸如请求处理容器需要获取业务请求相应的接口信息或鉴权信息等,并对业务请求的接口权限进行校验,只有在校验通过的情况下,才会将业务请求向后转发至业务处理容器,以便于业务处理容器针对业务请求进行相应的业务处理。
[0033] 常规情况下,请求处理容器处理业务请求所需的数据(诸如校验请求是否合法所需的数据)存储在存储中间件中,请求处理容器在处理业务请求时需要通过存储中间件去查找所需数据,本公开实施例充分考虑到存储中间件可能出现不可用的情况而影响相关业务服务的稳定性和可用性,因此预先在存储中间件处于正常态的期间,就将存储中间件的数据同步至请求处理容器的本地缓存,使请求处理容器提前在本地缓存中进行数据备份,以便于在存储中间件不可用时,请求处理容器可以从自身的本地缓存中获取所需数据,从而保障业务服务稳定性和可用性。
[0034] 在实际应用中,可以令存储中间件与请求处理容器的本地缓存之间按照预设时间间隔进行数据同步;诸如,可以每30s同步一次,也可以每1分钟同步一次等,可根据需求灵活设置预设时间间隔。和/或,在监测到存储中间件的数据与上一次监测到存储中间件的数据不一致的情况下(也即监测到存储中间件出现数据变更的情况),获取存储中间件的变更数据,并将变更数据同步更新至请求处理容器的本地缓存。诸如,通过监听机制及时监测数据更新情况,以保障更新后的数据可及时同步。无论是定期同步方式还是更新触发同步的方式,均可有效保障存储中间件与请求处理容器的本地缓存之间数据同步的可靠性,使请求处理容器可以及时获取到存储中间件的最新存储数据,以保障请求处理容器的本地缓存在存储中间件异常时的可用性。
[0035] 步骤S106,在当前检测到存储中间件为异常态,且上一次检测到存储中间件为正常态的情况下,将当前查询逻辑从正常态查询逻辑切换至异常态查询逻辑;以及,在当前检测到存储中间件为正常态,且上一次检测到存储中间件为异常态的情况下,将当前查询逻辑从异常态查询逻辑切换至正常态查询逻辑。
[0036] 也即,在检测到存储中间件的状态发生转变时,自动切换至相应的逻辑查询逻辑来查询处理业务请求所需的数据,其中,正常态查询逻辑(也即,存储中间件处于正常态时对应的查询逻辑)为:请求处理容器通过存储中间件查询处理业务请求所需的目标数据;异常态查询逻辑(也即,存储中间件处于异常态时对应的查询逻辑)为:请求处理容器通过本地缓存查询目标数据。该方式即为在检测到存储中间件异常时将存储中间件降级,也即不再通过存储中间件查询所需数据,而是通过请求处理容器的本地缓存查询所需数据。可以理解的是,由于存储中间件处于正常态期间,存储中间件与请求处理容器的本地缓存之间已进行数据同步,因此即便存储中间件异常,仍旧可通过请求处理容器的本地缓存查询所需数据,从而保障业务服务的稳定性和可用性。
[0037] 步骤S108,在接收到业务请求时,基于当前查询逻辑执行数据查询操作。
[0038] 在实际应用中可响应业务请求,直接调用当前查询逻辑执行相应的数据查询操作,以查询处理业务请求所需的目标数据。如果存储中间件当前为正常态,则当前查询逻辑为正常态查询逻辑,如果存储中间件当前为异常态,则当前查询逻辑为异常态查询逻辑,而存储中间件的状态发生改变,当前查询逻辑也会相应改变,以使当前查询逻辑是最适用于当前情况的逻辑,从而确保数据查询的可靠性。综上,本公开实施例中提供的上述技术方案,可以定期检测存储中间件的状态,在存储中间件正常的情况下可将存储中间件的数据同步至请求处理容器的本地缓存,以便于存储中间件异常时可直接通过本地缓存查询数据,在当前检测到存储中间件的状态与上一次检测到的状态不同时,自动切换至相应的查询逻辑来查询处理业务请求所需的数据,在接收到业务请求时,便可直接基于当前查询逻辑执行数据查询操作。其中,存储中间件处于正常态对应的查询逻辑为请求处理容器通过存储中间件查询数据,存储中间件处于异常态对应的查询逻辑为请求处理容器通过本地缓存查询数据。以上方式可有效避免因存储中间件异常而导致无法正常提供业务服务的情况发生,进一步提升了业务服务的稳定性和可靠性。
[0039] 在一些具体的实施示例中,存储中间件可以包括内存存储介质和持久化存储介质。在此基础上,将存储中间件的数据同步至请求处理容器的本地缓存的步骤,包括:从持久化存储介质中获取待同步的原始数据,并将原始数据存储至内存存储介质,以使内存存储介质将原始数据同步至请求处理容器的本地缓存。在实际应用中,可以设置缓存同步服务模块,利用缓存同步服务模块从持久化存储介质中获取待同步的原始数据,并将原始数据存储至内存存储介质,以使内存存储介质将原始数据同步至请求处理容器的本地缓存。以内存存储介质是Redis,持久化存储介质是MySQL为例,缓存同步服务模块可以从MySQL获取原始数据,并可以进一步对获取的原始数据进行处理,基于处理后的数据将内存存储介质的数据同步至请求处理容器的本地缓存。
[0040] 本公开实施例提供了将原始数据存储至内存存储介质,以使内存存储介质将原始数据同步至请求处理容器的本地缓存的实施示例,可参照如下步骤A C实现:~
[0041] 步骤A,为获取的原始数据进行前缀新增处理,得到携带有前缀的原始数据。也即,为原始数据新增前缀,通过前缀对原始数据进行包装。可以根据需求设置前缀的形式,在此不进行限制,该前缀可作为原始数据的关键索引(key),以便于后期请求处理容器可基于关键索引从存储中间件中获取原始数据,以此实现数据同步。
[0042] 示例性地,按照指定的前缀结构生成原始数据的前缀,并将构建的前缀添加至原始数据的首端。诸如,前缀结构可以基于指定信息构成,在此情况下,前缀不仅可作为关键索引,而且还可携带指定的有用信息。在一些具体的实施示例中,上述指定信息包括业务类型和/或同步时间,在一些具体的实施示例中,前缀结构基于业务类型、同步时间以及数据序号构建,也即,前缀结构可以为:业务类型标识‑同步时间的时间戳‑数据序号。通过业务类型可以清楚体现待同步数据所属业务,通过同步时间可以清楚体现数据在何时同步,也可以将属于同一业务类型但在不同时间同步/更新的数据进行区分,不仅便于获知哪些数据是最新同步的,能够基于同步时间获取最新数据,而且还可以基于同步时间对已同步的数据进行管理,诸如将过期数据删除等。另外,在同一时间通常会同步多条数据,每条数据都可为其分配数据序号,以此区分在同一时间同步的同一批业务类型下的不同数据,诸如在某时需要同步同一业务类型的100条数据,则数据序号为1 100。~
[0043] 示例性地,缓存同步服务模块在time1从MySQL获取的原始数据(假设所属的业务类型为b1)为k1:v1、k2:v2、k3:v3、…kn:vn等,则缓存同步服务模块对原始数据进行前缀新增处理,得到携带有前缀的原始数据为:b1‑time1‑1:k1v1、b1‑time1‑2: k2v2、b1‑ time1‑3: k3v3、…b1‑time1‑n:knvn。在这种方式中,将新增的前缀作为原始数据的key(可称为键或关键索引),将原始数据整体作为value(值)。
[0044] 步骤B,将携带有前缀的原始数据存储至内存存储介质。
[0045] 步骤C,向请求处理容器发送原始数据对应的前缀信息,以使请求处理容器基于前缀信息从内存存储介质中获取原始数据。具体实现时,请求处理容器在获取到前缀信息后,请求处理容器可以首先基于前缀信息构造原始数据的关键索引;然后基于关键索引从内存存储介质中获取原始数据。
[0046] 缓存同步服务模块不仅会对原始数据进行前缀包装,而且还会同时给请求处理容器发送前缀信息,以便于请求处理容器基于前缀信息可进一步构造出所需同步的每条原始数据对应的前缀,并将前缀作为原始数据的关键索引,基于关键索引便可方便快捷地直接查询到所需同步的原始数据。
[0047] 在一些具体的实施示例中,前缀信息包括:业务类型、同步时间以及同步时间对应的原始数据总量。请求处理容器基于业务类型、同步时间以及同步时间对应的原始数据总量,便可按序还原得到每条所需同步的原始数据对应的前缀。假设业务类型为b1、同步时间为time1、原始数据总量为n,则请求处理容器基于前缀信息可进一步构造出所需同步的原始数据的关键索引为:b1‑time1‑1、b1‑time1‑2、b1‑ time1‑3、… b1‑ time1‑n。之后采用该关键索引去内存存储介质中便可直接查找到相应的原始数据k1v1、k2v2、k3v3等,实现存储中间件与请求处理容器的本地缓存之间的精准数据同步。
[0048] 上述方式可以将待同步的原始数据(以key‑value形式存储)整体作为value,重新根据需求构造相应的key(前缀),无需获知原始数据自身的结构或者自身的key(诸如无需获知本身的k1、k2、k3等),而是直接将原始数据自身的key和value作为一个整体(诸如上述k1v1、k2v2等),在其基础上再外包装一个前缀(诸如上述b1‑time1‑1等)作为原始数据整体的key,从而构成诸如b1‑time1‑1:k1v1、b1‑time1‑2: k2v2等携带有前缀的数据,并将其存储在诸如Redis等内存存储介质中,与此同时请求处理容器可基于待同步的原始数据的前缀信息构造还原出原始数据的前缀,也即获取到b1‑time1‑1、b1‑time1‑2、b1‑ time1‑3等前缀,将前缀作为关键索引,即可方便快捷地从内存存储介质中获取到k1v1、k2v2等原始数据,并将获取到的原始数据存储在本地缓存中,准确可靠地实现存储中间件与请求处理容器的本地缓存之间的数据同步。
[0049] 在实际应用中,考虑到请求处理容器或者存储中间件中存储的数据通常会越来越多,为了避免请求处理容器或者存储中间件出现内存溢出或泄露的情况,上述方法还包括:删除本地缓存和/或存储中间件中的过期数据;其中,过期数据的同步时间位于指定时间之前,或者,过期数据的同步时间与当前时间的间隔超过指定时长。诸如,统一将位于X年X月X日X时之前同步的数据作为过期数据删除掉,或者,将同步时间距当前时间超过预设时长(诸如1年、3个月、2周等,可根据需求设定)的数据作为过期数据删除掉,以此来保障请求处理容器的本地缓存以及存储中间件的内存可用性,防止出现数据外溢等问题。
[0050] 在采用本公开实施例提供的上述方式查询到所需的目标数据之后,本公开实施例提供的方法还包括:通过请求处理容器采用查询到的目标数据对业务请求进行校验;在确认业务请求合法的情况下,通过请求处理容器将业务请求发送至业务处理容器,以使业务处理容器处理业务请求对应的业务。其中,业务处理容器诸如可以为业务服务器等。
[0051] 为便于理解本公开实施例提供的上述内容,本公开实施例进一步给出了一种具体的应用示例,在该示例中,请求处理容器为API网关和Auth容器,内存存储介质为Redis,持久化存储介质为MySQL;首先可参见图2所示的一种存储中间件处于正常态的处理流程示意图,外部的各种业务请求基于HTTP(超文本传输协议)发送给DNS(Domain Name System,域名系统)进行解析,然后API网关和Auth容器可从Redis和MySQL中获取所需数据对业务请求进行校验,只有在校验通过,也即确认业务请求合法后才会将业务请求继续转发给业务处理容器中。其中,从DNS域名解析、API网关和业务处理容器之间的黑色加粗线条即为处理业务请求的主链路。API网关指向Redis的箭头表示API网关从Redis获取数据,同理,Auth容器指向Redis的箭头表示Auth容器从Redis获取数据;API网关指向业务处理容器的箭头表示API网关将经校验处理后的业务请求发送给业务处理容器,以供业务处理容器进一步基于业务请求进行相应的业务处理。图中的箭头方向仅作为交互示意,不应当被视为限制。
[0052] 在图2的基础上,再参见图3所示的一种存储中间件处于异常态的处理流程示意图,与图2相比,图3清楚地示意出在存储中间件异常的情况下,API网关、Auth容器不会再通过redis和MySQL查询数据,而是直接调用各自的本地缓存(LocalCache)实现数据查询,上述方式也可称为存储中间件的降级方案。应当说明的是,API网关和Auth容器分别可视为请求处理容器,各自都有自身的本地缓存,API网关和Auth容器各自的本地缓存中存储的数据可以不同。API网关的本地缓存以及Auth容器的本地缓存都在存储中间件处于正常态期间与存储中间件进行了数据同步,因此存储有相关数据,可供API网关及Auth容器在处理业务请求时查询使用,有效避免因存储中间件异常而导致无法正常提供业务服务的情况发生。
[0053] 进一步,参见图4所示的一种数据同步示意图,示意出存储中间件处于正常态的情况下,将存储中间件的数据同步至请求处理容器的本地缓存的示意图,如图4所示,可通过缓存同步服务模块(在实际应用中也可简称为CacheSync)从MySQL中获取待同步的原始数据,并基于获取的原始数据实现Redis与API网关的本地缓存及Auth容器的本地缓存之间的数据同步。另外,应当说明的是,LocalCache(本地缓存)指向Redis的箭头表示本地缓存从Redis中获取数据进行同步,相应的,Redis(本地缓存)指向MySQL的箭头表示Redis通过缓存同步服务模块可同步得到MySQL的数据。另外,上述同步的操作均可借助缓存同步服务模块实现,也即,缓存同步服务模块实现MySQL至Redis、Redis至各个LocalCache的数据同步,缓存同步服务模块即为本公开实施例创新性提出的功能模块,可采用软件实现。
[0054] 为了便于了解数据同步的具体方式,参见图5所示的一种数据同步示意图,主要示意出API网关与存储中间件之间进行数据同步的具体方式,缓存同步服务模块可以从MySQL中获取业务类型为b1的一批待同步的原始数据,假设为k1:v1、k2:v2和k3:v3。其中k即为key的缩写,用以表示原始数据自身的键,v即为value的缩写,用以表示原始数据自身的值。缓存同步服务模块可以为原始数据进行前缀包装,诸如以业务类型‑同步时间‑数据序号的格式为原始数据增加三级前缀,得到携带有前缀的原始数据为b1‑time1‑1:k1v1、b1‑time1‑2: k2v2、b1‑ time1‑3: k3v3等整体同步更新至Redis,在图5中同时示意出在不同时间time1和time2分别同步(更新)的两批数据。其中,b1表示待同步数据的业务类型,time表示同步时间(或更新时间),也可称为时间戳;诸如1、2、3等表示数据序号。此外,缓存同步服务模块还会进一步将每批同步数据的前缀信息告知API网关的监听器(Watcher),前缀信息包括业务类型(b1)、同步时间(time1或time2,不同批次同步的数据对应的同步时间不同),原始数据总量size1等,缓存同步服务模块可执行RedisQueue Push操作,也即将Redis中不同批次同步的数据对应的前缀信息以队列形式推至API网关,API网关获取到前缀信息后可以按照业务类型‑同步时间‑数据序号的格式构造每个数据的前缀,诸如得到b1‑time1‑1、b1‑time1‑2、b1‑ time1‑size1等,并将构造所得的前缀作为关键索引(key)从Redis中拉取(pull)相应的数据(诸如k1v1、k2v2等),从而将存储中间件的数据精准同步至网关的本地缓存。将存储中间件的数据同步至鉴权容器的本地缓存的数据同步方式也是类似,在此不再赘述。
[0055] 在实际应用中,本公开实施例提供的上述方法可应用于基于云原生容器部署的系统,诸如请求处理容器、业务处理容器等均可为云原生容器,以此保证服务宕机之后的快速重启,进一步保障系统的可靠性。
[0056] 综上所述,本公开实施例提供的上述方式,通过定期检测存储中间件的状态,因此可以及时探测到存储中间件的不可用情况并能够有效应对。在存储中间件正常的情况下可将存储中间件的数据同步至请求处理容器的本地缓存,以便于存储中间件异常时可直接通过本地缓存查询数据,在当前检测到存储中间件的状态与上一次检测到的状态不同时,能够灵活切换至相应的查询逻辑来查询处理业务请求所需的数据,有效避免因存储中间件异常而导致无法正常提供业务服务的情况发生,进一步提升了业务服务的稳定性和可靠性。另外,在存储中间件异常,采用异常态查询逻辑(也即直接通过请求处理容器的本地缓存查询)的期间,不仅能够继续支持业务服务的正常提供,保障系统正常运行,而且还给存储中间件的问题排查及恢复提供了时间,进一步保障了系统的可靠性。另外,上述方式不会限制存储中间件的不可用原因,无论存储中间件是因为自身原因还是网络原因导致不可用,均可采用上述方式进行处理,从而有效保障业务服务的稳定性和可用性,极大降低了存储中间件不可用而给系统带来的不良影响。
[0057] 此外,本公开实施例中提供的将存储中间件的数据同步至请求处理容器的本地缓存的方式无需关注待同步数据(原始数据)本身的数据结构,而是直接在原始数据整体的基础上新增前缀,将新增的前缀作为关键索引key,并且请求处理容器可以清楚获知各原始数据的前缀信息,因此请求处理容器的本地缓存可基于前缀信息构造关键索引,从而直接从存储中间件中拉取相应的原始数据,实现精准的数据同步效果,且所需性能消耗较低,非常高效便捷。另外,数据前缀基于业务类型标识‑同步时间‑数据序号的方式构建,不仅可用于标识原始数据并作为原始数据的关键索引,而且还可以提供诸如所属业务类型、同步时间等有用信息,便于后续处理,诸如后续可直接基于业务类型和同步时间而快速获取所需数据,也可以基于同步时间对数据进行管理,诸如将过期数据删除,从而保障请求处理容器的本地缓存和存储中间件的可用性,避免出现内存溢出、泄露等情况。
[0058] 本公开实施例提供的上述方式可适用于各种包含有请求处理容器及存储中间件的系统,对于集中式的路由网关、请求调用量大的场景也能够较好的应用本公开实施例提供的上述方式,可极大提升服务稳定性和可靠性。
[0059] 对应于前述数据查询方法,本公开实施例还提供了一种数据查询装置,图6为本公开实施例提供的一种数据查询装置的结构示意图,该装置可由软件和/或硬件实现,一般可集成在电子设备中。如图6所示,数据查询装置600包括:
[0060] 状态检测模块602,用于定期检测存储中间件的状态,其中状态包括正常态或异常态;
[0061] 数据同步模块604,用于在检测到存储中间件为正常态的情况下,将存储中间件的数据同步至请求处理容器的本地缓存;
[0062] 逻辑切换模块606,用于在当前检测到存储中间件为异常态,且上一次检测到所述存储中间件为正常态的情况下,将当前查询逻辑从正常态查询逻辑切换至异常态查询逻辑;以及,在当前检测到存储中间件为正常态,且上一次检测到所述存储中间件为异常态的情况下,将当前查询逻辑从异常态查询逻辑切换至正常态查询逻辑;
[0063] 其中,正常态查询逻辑为:请求处理容器通过存储中间件查询处理业务请求所需的目标数据;异常态查询逻辑为:请求处理容器通过本地缓存查询目标数据。
[0064] 数据查询模块608,用于在接收到业务请求时,基于所述当前查询逻辑执行数据查询操作;
[0065] 本公开实施例中提供的上述技术方案,可以定期检测存储中间件的状态,在存储中间件正常的情况下可将存储中间件的数据同步至请求处理容器的本地缓存,以便于存储中间件异常时可直接通过本地缓存查询数据,在当前检测到存储中间件的状态与上一次检测到的状态不同时,自动切换至相应的查询逻辑来查询处理业务请求所需的数据,在接收到业务请求时,便可直接基于当前查询逻辑执行数据查询操作。其中,存储中间件处于正常态对应的查询逻辑为请求处理容器通过存储中间件查询数据,存储中间件处于异常态对应的查询逻辑为请求处理容器通过本地缓存查询数据。以上方式可有效避免因存储中间件异常而导致无法正常提供业务服务的情况发生,进一步提升了业务服务的稳定性和可靠性。
[0066] 在一些实施方式中,所述存储中间件包括内存存储介质和持久化存储介质,数据同步模块604具体用于:从持久化存储介质中获取待同步的原始数据,并将所述原始数据存储至所述内存存储介质,以使所述内存存储介质将所述原始数据同步至请求处理容器的本地缓存。。
[0067] 在一些实施方式中,数据同步模块604具体用于:为获取的所述原始数据进行前缀新增处理,得到携带有前缀的原始数据;将所述携带有前缀的原始数据存储至所述内存存储介质;向所述请求处理容器发送所述原始数据对应的前缀信息,以使所述请求处理容器基于所述前缀信息从所述内存存储介质中获取所述原始数据。
[0068] 在一些实施方式中,数据同步模块604具体用于:按照指定的前缀结构生成所述原始数据的前缀,并将构建的所述前缀添加至所述原始数据的首端。
[0069] 在一些实施方式中,所述前缀结构基于业务类型、同步时间以及数据序号构建。
[0070] 在一些实施方式中,所述前缀信息包括:业务类型、同步时间以及所述同步时间对应的原始数据总量。
[0071] 在一些实施方式中,数据同步模块604具体用于:基于所述前缀信息构造所述原始数据的关键索引;基于所述关键索引从所述内存存储介质中获取所述原始数据。
[0072] 在一些实施方式中,数据同步模块604具体用于:令存储中间件与请求处理容器的本地缓存之间按照预设时间间隔进行数据同步;和/或,在监测到所述存储中间件的数据与上一次监测到所述存储中间件的数据不一致的情况下,获取所述存储中间件的变更数据,并将所述变更数据同步更新至所述请求处理容器的本地缓存。
[0073] 在一些实施方式中,所述装置还包括数据删除模块,具体用于:删除所述本地缓存和/或所述存储中间件中的过期数据;其中,所述过期数据的同步时间位于指定时间之前,或者,所述过期数据的同步时间与当前时间的间隔超过指定时长。
[0074] 在一些实施方式中,所述装置还包括业务处理模块,用于通过所述请求处理容器采用查询到的所述目标数据对业务请求进行校验;在确认所述业务请求合法的情况下,通过所述请求处理容器将所述业务请求发送至业务处理容器,以使所述业务处理容器处理所述业务请求对应的业务。
[0075] 本公开实施例所提供的数据查询装置可执行本公开任意实施例所提供的数据查询方法,具备执行方法相应的功能模块和有益效果。
[0076] 所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置实施例的具体工作过程,可以参考方法实施例中的对应过程,在此不再赘述。
[0077] 本公开实施方式中的多个装置之间所交互的消息或者信息的名称仅用于说明性的目的,而并不是用于对这些消息或信息的范围进行限制。
[0078] 本公开示例性实施例还提供了一种电子设备,包括:至少一个处理器;以及与至少一个处理器通信连接的存储器。所述存储器存储有能够被所述至少一个处理器执行的计算机程序,所述计算机程序在被所述至少一个处理器执行时用于使所述电子设备执行根据本公开实施例的方法。
[0079] 本公开示例性实施例还提供一种存储有计算机程序的非瞬时计算机可读存储介质,其中,所述计算机程序在被计算机的处理器执行时用于使所述计算机执行根据本公开实施例的方法。
[0080] 本公开示例性实施例还提供一种计算机程序产品,包括计算机程序,其中,所述计算机程序在被计算机的处理器执行时用于使所述计算机执行根据本公开实施例的方法。
[0081] 所述计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例操作的程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如Java、C++等,还包括常规的过程式程序设计语言,诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。
[0082] 此外,本公开的实施例还可以是计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本公开实施例所提供的数据查询方法。所述计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD‑ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
[0083] 参考图7,现将描述可以作为本公开的服务器或客户端的电子设备700的结构框图,其是可以应用于本公开的各方面的硬件设备的示例。电子设备旨在表示各种形式的数字电子的计算机设备,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
[0084] 如图7所示,电子设备700包括计算单元701,其可以根据存储在只读存储器(ROM)702中的计算机程序或者从存储单元708加载到随机访问存储器(RAM)703中的计算机程序,来执行各种适当的动作和处理。在RAM 703中,还可存储设备700操作所需的各种程序和数据。计算单元701、ROM 702以及RAM 703通过总线704彼此相连。输入/输出(I/O)接口705也连接至总线704。
[0085] 电子设备700中的多个部件连接至I/O接口705,包括:输入单元706、输出单元707、存储单元708以及通信单元709。输入单元706可以是能向电子设备700输入信息的任何类型的设备,输入单元706可以接收输入的数字或字符信息,以及产生与电子设备的用户设置和/或功能控制有关的键信号输入。输出单元707可以是能呈现信息的任何类型的设备,并且可以包括但不限于显示器、扬声器、视频/音频输出终端、振动器和/或打印机。存储单元708可以包括但不限于磁盘、光盘。通信单元709允许电子设备700通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据,并且可以包括但不限于调制解调器、网卡、红外通信设备、无线通信收发机和/或芯片组,例如蓝牙TM设备、WiFi设备、WiMax设备、蜂窝通信设备和/或类似物。
[0086] 计算单元701可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元701的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元701执行上文所描述的各个方法和处理。例如,在一些实施例中,数据查询方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元708。在一些实施例中,计算机程序的部分或者全部可以经由ROM 
702和/或通信单元709而被载入和/或安装到电子设备700上。在一些实施例中,计算单元
701可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行数据查询方法。
[0087] 用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据查询装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
[0088] 在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD‑ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
[0089] 如本公开使用的,术语“机器可读介质”和“计算机可读介质”指的是用于将机器指令和/或数据提供给可编程处理器的任何计算机程序产品、设备、和/或装置(例如,磁盘、光盘、存储器、可编程逻辑装置(PLD)),包括,接收作为机器可读信号的机器指令的机器可读介质。术语“机器可读信号”指的是用于将机器指令和/或数据提供给可编程处理器的任何信号。
[0090] 为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
[0091] 可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
[0092] 计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端‑服务器关系的计算机程序来产生客户端和服务器的关系。
[0093] 需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0094] 以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。