数据处理方法、装置、设备、存储介质及产品与流程

文档序号:29355251发布日期:2022-03-22 23:45阅读:86来源:国知局
数据处理方法、装置、设备、存储介质及产品与流程

1.本技术涉及计算机技术领域,具体而言,涉及一种数据处理方法、装置、电子设备、计算机可读存储介质及计算机程序产品。


背景技术:

2.目前,针对海量数据的查询通常采用索引技术,可以理解的是,索引技术是通过采用键值对key-value的存储形式以快速查找到数据。其中,基于位的映射(bitmap)便是一种键值对key-value的存储形式,其是通过多个键元素key共用一个值元素value从而达到节省存储空间的目的。
3.相关技术中,一个单机设备上运行一个进程(通常包括多个线程),该运行在单机设备的进程会在进程内创建一个bitmap实例,即一个进程拥有一个bitmap实例,由于进程间通信不支持跨机通信,各个单机设备上存储在bitmap实例里的文件会面临着不同步的现象,从而导致数据处理出错等一系列问题。
4.可见,如何提升数据处理的准确率是亟待解决的问题。


技术实现要素:

5.为解决上述技术问题,本技术的实施例提供了数据处理方法、装置、电子设备、计算机可读存储介质及计算机程序产品,进而至少在一定程度上可以提升数据处理的准确率。
6.根据本技术实施例的一个方面,提供了一种数据处理方法,应用于微服务,所述微服务包括存储服务与共有缓存服务,所述方法包括:接收多个业务方分别发起的数据处理请求,所述数据处理请求包括读操作请求或者写操作请求;响应于接收到的至少一个读操作请求,若确定所述共有缓存服务中缓存有最新版本的原子变量,则根据所述至少一个读操作请求对所述共有缓存服务中缓存的最新版本的原子变量执行读操作;响应于接收到的至少一个写操作请求,依次对所述存储服务中存储的原子变量执行写操作,并对所述共有缓存服务中缓存的同一原子变量执行同步处理。
7.根据本技术实施例的一个方面,提供了一种数据处理装置,应用于微服务,所述微服务包括存储服务与共有缓存服务,所述装置包括:接收模块,配置为接收多个业务方分别发起的数据处理请求,所述数据处理请求包括读操作请求或者写操作请求;读模块,配置为响应于接收到的至少一个读操作请求,若确定所述共有缓存服务中缓存有最新版本的原子变量,则根据所述至少一个读操作请求对所述共有缓存服务中缓存的最新版本的原子变量执行读操作;写与同步模块,配置为响应于接收到的至少一个写操作请求,依次对所述存储服务中存储的原子变量执行写操作,并对所述共有缓存服务中缓存的同一原子变量执行同步处理。
8.根据本技术实施例的一个方面,提供了一种电子设备,包括一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述电子设备执行时,使得所
述电子设备实现如上所述的数据处理方法。
9.根据本技术实施例的一个方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的数据处理方法。
10.根据本技术实施例的一个方面,提供了一种计算机程序产品,该计算机程序产品包括计算机指令,该计算机指令被处理器执行时实现如上所述的数据处理方法。
11.在本技术的实施例提供的技术方案中,一方面,由于在微服务中创建了一个共有缓存服务,这样各个单机设备不用再各自单独创建缓存实例,从而在极大程度上节省了存储空间;另一方面,在接收到业务方发起的写操作请求时,在根据写操作请求对存储服务中存储的原子变量执行写操作之后都会对共有缓存服务中缓存的同一原子变量执行同步处理,这样使得共有缓存服务中所缓存的原子变量与存储服务中所存储的原子变量保持一致,业务方在发起读操作请求时,对共有缓存服务中所缓存的最新版本的原子变量执行读操作即可,即各个业务方都是读取的共有缓存服务中所缓存的最新版本的原子变量,从而保证了各个业务方所读取到的原子变量是一致的,避免了从各个单机设备所创建的缓存实例中获取到的原子变量不一致所导致的数据处理准确率低的现象。
12.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本技术。
附图说明
13.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本技术的实施例,并与说明书一起用于解释本技术的原理。显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术者来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
14.图1是相关技术中数据处理的示意图;
15.图2是可以应用本技术实施例的技术方案的示例性实施环境的示意图;
16.图3是可以应用本技术实施例的技术方案的示例性微服务的架构示意图;
17.图4是本技术的一示例性实施例示出的数据处理方法的流程图;
18.图5是本技术的一示例性实施例示出的数据处理方法的流程图;
19.图6是本技术的一示例性实施例示出的数据处理方法的流程图;
20.图7是本技术的一示例性实施例示出的读数据的示意图;
21.图8是图4所示实施例中的步骤s403在一示例性实施例中的流程图;
22.图9是图8所示实施例中的步骤s802在一示例性实施例中的流程图;
23.图10是图4所示实施例中的步骤s403在一示例性实施例中的流程图;
24.图11是本技术的一示例性实施例示出的写数据的示意图;
25.图12是本技术的一示例性实施例示出的数据处理方法的流程图;
26.图13是本技术的一示例性实施例示出的读数据和写数据的示意图;
27.图14是本技术的一示例性实施例示出的数据处理装置的框图;
28.图15是适于用来实现本技术实施例的电子设备的计算机系统的结构示意图。
具体实施方式
29.这里将详细地对示例性实施例执行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本技术相同的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本技术的一些方面相同的装置和方法的例子。
30.附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
31.附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
32.需要说明的是,在本技术中提及的“多个”是指两个或者两个以上。“和/或”描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
33.在介绍本技术实施例的技术方案之前,先对本技术实施例中涉及的名词和术语进行说明,本技术实施例中涉及的名词和术语适用于如下的解释。
34.微服务:将应用程序分割为多个独立的小服务,每个服务专注于自己的独立的功能,并运行在各自独立的进程中,服务与服务之间有比较明确的界限,服务之间是通过轻量级的通信机制进行通信,例如通过远程过程调用(remote procedure call,rpc)通信机制进行通信;其中,微服务非常适合当前需求变更频繁、迭代速度快、交付周期短的互联网应用。
35.bitmap:是用一个bit位来标记某个元素对应的value,而key即是该元素,由于采用了bit为单位来存储数据,因此可以大大节省存储空间。举例说明,例如设有一个在20亿个随机整数中找出某个数m是否存在的需求,同时设32位操作系统,4g内存,其中在java中,int占4字节,1字节=8位;因此,如果每个数字按int进行存储,那就是20亿个int,因而占用的空间约为(2000000000*4/1024/1024/1024)≈7.45g,而如果按位进行存储,20亿个数就是20亿位,占用空间约为(2000000000/8/1024/1024/1024)≈0.233g,可见,bitmap可以在极大程度上节省存储空间。
36.原子变量:共享的数据称之为原子变量,其对应一种解决并发情况下多个线程操作共享数据所引起安全问题的一种机制,即一个线程修改了原子变量,另外的线程立即就能看到,其作用类比于锁机制。
37.paxos:是一种基于消息传递的一致性算法,其解决的问题是一个分布式系统如何就某个值(决议)达成一致。一个典型的场景是,在一个分布式数据库系统中,如果各节点的初始状态一致,每个节点执行相同的操作序列,那么他们最后能得到一个一致的状态,为保证每个节点执行相同的命令序列,需要在每一条指令上执行一个“一致性算法”以保证每个节点看到的指令一致。paxos算法适用的几种情况:单机设备中多个进程/线程达成数据一致;分布式文件系统或者分布式数据库中多客户端并发读写数据;分布式存储中多个副本响应读写请求的一致性。
38.raft:是一种一致性算法,其解决问题同样是一个分布式系统如何就某个值(决
议)达成一致。相对于paxos算法而言,raft算法是将大量的计算问题分解成为了一些简单的相对独立的子问题。
39.相关技术中,一个单机设备上运行一个进程(通常包括多个线程),该运行在单机设备的进程会在进程内创建一个bitmap实例,其中,bitmap实例用于将存储服务中的数据拷贝一份缓存在bitmap实例中,以便在有业务需求时,使用该bitmap实例中的数据进行处理。由于一个进程拥有一个bitmap实例,即各个单机设备上都对应一个bitmap实例,这样在极大程度上浪费了存储空间;并且,由于进程间通信不支持跨机通信,各个单机设备上缓存在bitmap实例里的数据会面临着不一致/同步的现象,从而导致数据处理出错等一系列问题,数据处理的准确率较低。
40.请参阅图1,单机设备1对应的进程1创建了bitmap_1实例,其中在有业务需求1时,从bitmap_1实例中获取缓存的数据(即图中示意出的buffer中的数据,其中buffer表征存储,下同)进行处理;单机设备n对应的进程n创建了bitmap_n实例,其中在有业务需求n时,从bitmap_n实例中获取缓存的数据进行处理。可见,每个单机设备上都对应一个bitmap实例,此在极大程度上浪费了存储空间。
41.请再参阅图1,进程1对存储服务中的数据进行了修改,其所拷贝在bitmap_1实例中的数据是最新的,但是由于不支持跨机通信,进程n所拷贝在bitmap_n实例中的数据仍旧是修改之前的数据,即并非最新的数据,因此,在有业务需求n时,是使用该非最新的数据进行处理。可见,每个单机设备上都对应一个bitmap实例,不同bitmap实例中缓存的数据存在不一致/同步的现象,从而容易造成数据处理出错等一系列问题,数据处理的准确率较低。
42.基于此,本技术实施例提出了一种数据处理方法、装置、电子设备、计算机可读存储介质及计算机程序产品,优化了数据处理方案,在极大程度上提升了数据处理的准确率,并且节省了存储空间。
43.请参阅图2,图2是本技术的一种示例性实施环境的示意图;该实施环境中包括终端设备201和服务器202,其中,终端设备201和服务器202之间通过有线或者无线网络进行通信。
44.需要说明的是,服务器202上部署有微服务,微服务包括存储服务与共有缓存服务。其中,存储服务用于存储数据,其部署在数据库中,可简单理解为与磁盘等同;共有缓存服务用于缓存从存储服务中获取到的数据,其部署于内存中。
45.在本技术的一个实施例中,请参阅图3,为一种示例的微服务的架构示意图。其中,可以接收创建请求,进而根据接收到的创建请求,创建一个bitmap共有缓存服务,该bitmap共有缓存服务与存储服务之间可以进行交互,具体地,bitmap共有缓存服务可以从存储服务中获取到数据进行缓存。由此,当接收到业务方根据需求发送的数据处理请求时,直接从bitmap共有缓存服务中获取缓存的数据进行处理即可,从而相对于从存储服务中获取存储的数据进行处理而言,提升了数据处理的效率。
46.在本技术的一个实施例中,存储服务可以是基于paxos的存储服务。
47.在本技术的一个实施例中,存储服务可以是基于raft的存储服务。
48.其中,终端设备201可以是智能手机、平板、笔记本电脑、计算机、车载终端等电子设备,本处不对此进行限制。同时,终端设备201的数量可以为一个或多个。
49.其中,服务器202可以是独立的物理服务器,也可以是多个物理服务器构成的服务
器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn(content delivery network,内容分发网络)以及大数据和人工智能平台等基础云计算服务的云服务器,本处不对此进行限制。同时,服务器202的数量可以为一个或多个。
50.在本技术的一个实施例中,终端设备201中安装有应用程序,其可以供用户使用,即终端设备201作为业务方一侧,根据需求可以向服务器202发送数据处理请求,其中数据处理请求包括读操作请求或者写操作请求;相应地,如果服务器202接收到至少一个读操作请求,则服务器202响应于接收到的至少一个读操作请求,并在确定共有缓存服务中缓存有最新版本的原子变量时,根据至少一个读操作请求对共有缓存服务中缓存的最新版本的原子变量执行读操作,如果服务器202接收到的至少一个写操作请求,则服务器202响应于接收到的至少一个写操作请求,依次对存储服务中存储的原子变量执行写操作,并对共有缓存服务中缓存的同一原子变量执行同步处理。
51.基于图2-3所示应用场景,在采用了本技术实施例的技术方案之后,提升了数据处理的准确率,并且节省了存储空间。
52.以下对本技术实施例的技术方案的各种实现细节进行详细阐述:
53.请参阅图4,图4是本技术的一个实施例示出的数据处理方法的流程图。该数据处理方法中可以由图2所示服务器202执行,如图4所示,数据处理方法至少包括步骤s401至步骤s403,详细介绍如下:
54.步骤s401,接收多个业务方分别发起的数据处理请求,数据处理请求包括读操作请求或者写操作请求。
55.本技术实施例中读操作请求是业务方所发起的用于指示对缓存服务中的数据执行读操作的一个指令;其中,读操作请求对应于读操作程序,可选地,业务方发起读操作请求具体可以是通过触发一个用于读取数据的线程,并运行该线程对缓存服务中的数据执行读操作,以实现数据的读取。
56.本技术实施例中写操作请求是业务方所发起的用于指示对存储服务中的数据执行写操作的一个指令;其中,写操作请求对应于写操作程序,写操作程序包括但不限于进程和线程。可选地,业务方发起写操作请求具体可以是通过触发一个用于写数据的线程,并运行该线程对存储服务中的数据执行写操作,以实现数据的写入。
57.在本技术的一个实施例中,接收到的多个业务方分别发起的数据处理请求可以均是读操作请求。
58.在本技术的一个实施例中,接收到的多个业务方分别发起的数据处理请求可以均是写操作请求。
59.在本技术的一个实施例中,接收到的多个业务方分别发起的数据处理请求可以部分是读操作请求,部分是写操作请求。
60.步骤s402,响应于接收到的至少一个读操作请求,若确定共有缓存服务中缓存有最新版本的原子变量,则根据至少一个读操作请求对共有缓存服务中缓存的最新版本的原子变量执行读操作。
61.本技术实施例中如果接收到的至少一个读操作请求,则需响应于该接收到的至少一个读操作请求,并在确定共有缓存服务中缓存有最新版本的原子变量,则此时可以根据
至少一个读操作请求对共有缓存服务中缓存的最新版本的原子变量执行读操作。
62.本技术实施例中由于多个业务方可能并发发起写操作请求,因此,为了保证存储服务中所存储的数据的安全性,可以采用原子变量机制,并将存储服务中所存储的数据称之为原子变量,相应地,将共有缓存服务中所缓存的数据也称之为原子变量。
63.在本技术的一个实施例中,请参阅图5,步骤s402中根据至少一个读操作请求对共有缓存服务中缓存的最新版本的原子变量执行读操作的过程之前,还可以包括以下步骤:
64.步骤s501,将存储服务中存储的原子变量对应的版本与共有缓存服务中所缓存的同一原子变量对应的版本进行比较;
65.步骤s502,若比较结果指示存储服务中存储的原子变量对应的版本高于共有缓存服务中所缓存的同一原子变量对应的版本,则用存储服务中存储的原子变量替换共有缓存服务中所缓存的同一原子变量,并更新替换后的原子变量对应的版本,以使共有缓存服务中所缓存的原子变量为最新版本。
66.也即,可选实施例中可以先确定共有缓存服务中缓存的原子变量是否为最新版本的原子变量,具体地,可以通过将存储服务中存储的原子变量对应的版本与共有缓存服务中所缓存的同一原子变量对应的版本进行比较;其中:
67.第一种情况,如果比较结果指示存储服务中存储的原子变量对应的版本高于共有缓存服务中所缓存的同一原子变量对应的版本,即表征此时共有缓存服务中缓存的原子变量并非为最新版本的原子变量;因此,需要用存储服务中存储的原子变量替换共有缓存服务中所缓存的同一原子变量,以使共有缓存服务中所缓存的原子变量为最新版本,并同时更新替换后的原子变量对应的版本,以标识替换后的原子变量所属的版本,便于在有需要时,再根据原子变量对应的版本进行比较。
68.第二种情况,如果比较结果指示存储服务中存储的原子变量对应的版本等于共有缓存服务中所缓存的同一原子变量对应的版本,即表征此时共有缓存服务中缓存的原子变量为最新版本的原子变量;因此,无需进行操作。
69.第三种情况,如果比较结果指示存储服务中存储的原子变量对应的版本低于共有缓存服务中所缓存的同一原子变量对应的版本,即表征此时共有缓存服务中缓存的原子变量已为最新版本的原子变量;因此,需要用共有缓存服务中缓存的原子变量替换存储服务中所存储的同一原子变量,并同时更新替换后的原子变量对应的版本,以标识替换后的原子变量所属的版本,便于在有需要时,再根据原子变量对应的版本进行比较。
70.可以理解的是,由于响应于写操作请求是对存储服务中存储的原子变量执行写操作,因此,存储服务中存储的原子变量通常是最新版本的,即通常情况下,属于第一种情况或第二种情况,第三种情况出现的概率较小。
71.在本技术的一个实施例中,接收到的读操作请求为至少两个;请参阅图6,步骤s501中将存储服务中存储的原子变量对应的版本与共有缓存服务中所缓存的同一原子变量对应的版本进行比较的过程之前,还可以包括以下步骤:
72.步骤s601,向存储服务转发一个读操作请求,并从存储服务中获取所存储的原子变量对应的版本;
73.步骤s602,向共有缓存服务转发其它所有的读操作请求,并从共有缓存服务中获取所缓存的同一原子变量对应的版本。
74.也即,可选实施例中当接收到的读操作请求为至少两个时,可以向存储服务转发一个读操作请求,并从存储服务中获取所存储的原子变量对应的版本,其中该向存储服务转发的这一个读操作请求用于对存储服务中存储的原子变量执行读操作;以及向共有缓存服务转发其他所有的读操作请求,并从共有缓存服务中获取所缓存的原子变量对应的版本,其中该向共有服务转发的其他所有的读操作请求用于对共有缓存服务中缓存的原子变量执行读操作。
75.举例说明,例如设接收到的读操作请求有100个,此时转发1个读操作请求至存储服务中,并从存储服务中获取所存储的原子变量对应的版本;以及转发99个读操作请求至共有缓存服务中,并从共有缓存服务中获取所缓存的原子变量对应的版本。
76.这样,多个读操作请求对应的读操作程序并发去访问共有缓存服务中所缓存的原子变量,而只有一个读操作请求对应的读操作程序去访问存储服务中所存储的原子变量,由于对共有缓存服务中缓存的原子变量执行读操作的速率远高于对存储服务中存储的原子变量执行读操作的速率;因此,实现了高并发读,即提升了数据的读效率,进而提升了数据处理的效率。
77.需要说明的是,步骤s601与步骤s602可以任意交换顺序执行,也可以并行执行,在实际应用中,可以根据具体应用场景进行灵活调整。
78.为了更好地理解数据的读过程,这里进行示例说明,其中:
79.请参阅图7,为一种示例的读数据的示意图。具体地,首先从存储服务中获取所存储的原子变量对应的版本,以及从共有缓存服务中获取所缓存的同一原子变量对应的版本;之后,将存储服务中存储的原子变量对应的版本与共有缓存服务中所缓存的同一原子变量对应的版本进行比较,如果比较结果指示存储服务中存储的原子变量对应的版本高于共有缓存服务中所缓存的同一原子变量对应的版本,则用存储服务中存储的原子变量替换共有缓存服务中所缓存的同一原子变量,并更新替换后的原子变量对应的版本,以使共有缓存服务中所缓存的原子变量为最新版本;之后,将共有缓存服务中所缓存的最新版本的原子变量返回给对应的发起读操作请求的业务方。
80.步骤s403,响应于接收到的至少一个写操作请求,依次对存储服务中存储的原子变量执行写操作,并对共有缓存服务中缓存的同一原子变量执行同步处理。
81.本技术实施例中如果接收到的至少一个写操作请求,则需响应于该接收到的至少一个写操作请求,并依次对存储服务中存储的原子变量执行写操作,以及对共有缓存服务中缓存的同一原子变量执行同步处理。
82.在本技术的一个实施例中,接收到的写操作请求为至少两个;请参阅图8,步骤s403中依次对存储服务中存储的原子变量执行写操作的过程,可以包括以下步骤:
83.步骤s801,将各个写操作请求对应的写操作程序存储至队列中;
84.步骤s802,依次从队列中取出写操作程序对存储服务中存储的原子变量执行写操作。
85.也即,可选实施例中当接收到的写操作请求为至少两个时,可以将各个写操作请求对应的写操作程序存储至队列中,即进行入队存储,进而依次从队列中取出写操作程序对存储服务中存储的原子变量执行写操作。
86.可以理解的是,由于队列是先进先出机制,因此,先进队列的写操作程序会先取出
对存储服务中存储的原子变量执行写操作,后进队列的写操作程序会后取出对存储服务中存储的原子变量执行写操作。
87.这样,通过队列机制,在保证存储服务中所存储的数据的安全的同时,使得各个写操作程序能够基于先后顺序执行,即先接收到的写操作请求对应的写操作程序先执行,后接收到的写操作请求对应的写操作程序后执行,避免了由于写操作程序执行写操作顺序出错而导致的数据处理出错的一系列问题。
88.在本技术的一个实施例中,队列中的各个写操作程序设置为阻塞状态;请参阅图9,步骤s802中依次从队列中取出写操作程序对存储服务中存储的原子变量执行写操作的过程,可以包括以下步骤:
89.步骤s901,从队列中取出位于队首位置的写操作程序作为目标写操作程序,并将目标写操作程序的状态由阻塞状态切换为运行状态;
90.步骤s902,通过处于运行状态的目标写操作程序对存储服务中存储的原子变量进行写操作,并在处于运行状态的目标写操作程序对存储服务中存储的原子变量的写操作执行完毕之后,从队列中再取出位于队首位置的写操作程序作为目标写操作程序以对存储服务中存储的原子变量进行写操作,直至取出队列中所有的写操作程序。
91.也即,可选实施例中将从队列中取出位于队首位置的写操作程序作为目标写操作程序,并将目标写操作程序的状态由阻塞状态切换为运行状态,进而通过目标写操作程序对存储服务中存储的原子变量进行写操作,并在目标写操作程序对存储服务中存储的原子变量的写操作执行完毕之后,就可以从队列中再取出位于队首位置的写操作程序作为目标写操作程序以对存储服务中存储的原子变量进行写操作,直到取出队列中所有的写操作程序,这样便实现了所有写操作请求对应的写操作程序对存储服务中存储的原子变量的执行写操作。
92.其中,可选实施例中目标写操作程序即为当前待执行写操作的写操作程序,因此,需要将目标写操作程序的状态由阻塞状态切换为运行状态。
93.举例说明,例如设队列中从队首到队尾的写操作程序分别a1、a2、a3、a4、a5;具体地,首先从队列中取出写操作程序a1作为目标写操作程序,并将写操作程序a1的状态由阻塞状态切换为运行状态,通过写操作程序a1对存储服务中存储的原子变量执行写操作,并写操作程序a1对存储服务中存储的原子变量的写操作执行完毕之后,再从队列中取出写操作程序a2作为目标写操作程序,依次类推即可,直至取出写操作程序a1、a2、a3、a4、a5,均通过写操作程序a1、a2、a3、a4、a5对存储服务中存储的原子变量的执行写操作。
94.可以理解的是,本技术实施例中对存储服务中存储的原子变量每执行一次写操作之后,均可以得到写操作后的原子变量,且此时需要更新写操作后的原子变量对应的版本,以便于在有需要时,根据原子变量对应的版本进行比较。
95.在本技术的一个实施例中,队列中的各个写操作程序设置为阻塞状态;请参阅图10,步骤s403中对共有缓存服务中缓存的同一原子变量执行同步处理的过程,可以包括以下步骤:
96.步骤s1001,获取存储服务中写操作后的原子变量,以及写操作后的原子变量对应的版本;
97.步骤s1002,用存储服务中写操作后的原子变量替换共有缓存服务中所缓存的同
一原子变量,并将替换后的原子变量对应的版本更新为写操作后的原子变量对应的版本。
98.也即,可选实施例中可以获取存储服务中写操作后的原子变量,以及写操作后的原子变量对应的版本,进而用存储服务中写操作后的原子变量替换共有缓存服务中所缓存的同一原子变量,并将替换后的原子变量对应的版本更新为写操作后的原子变量对应的版本。
99.其中,可选实施例中获取到的存储服务中写操作后的原子变量可以是队列中最后一个写操作程序执行写操作后的原子变量,相应地,获取到的写操作后的原子变量对应的版本可以是队列中最后一个写操作程序执行写操作后的原子变量对应的版本。这样,在所有写操作程序执行写操作完毕后,才根据存储服务中所存储的最新版本的原子变量替换共有缓存服务中所缓存的同一原子变量,并将替换后的原子变量对应的版本更新为最新版本的原子变量对应的版本,提升了同步处理的效率。
100.其中,可选实施例中获取到的存储服务中写操作后的原子变量可以是队列中每个写操作程序执行写操作后的原子变量,相应地,获取到的写操作后的原子变量对应的版本可以是队列中每个写操作程序执行写操作后的原子变量对应的版本。这样,在每个写操作程序执行写操作完毕后,都根据存储服务中所存储的最新版本的原子变量替换共有缓存服务中所缓存的同一原子变量,并将替换后的原子变量对应的版本更新为最新版本的原子变量对应的版本,提升了同步处理的准确率。
101.为了更好地理解数据的写过程,这里进行示例说明,其中:
102.请参阅图11,为一种示例的写数据的示意图。具体地,首先对存储服务中存储的原子变量执行写操作,得到写操作后的原子变量,并同时更新写操作后的原子变量对应的版本;之后,获取存储服务中写操作后的原子变量,以及写操作后的原子变量对应的版本,此时用存储服务中写操作后的原子变量替换共有缓存服务中所缓存的同一原子变量,并将替换后的原子变量对应的版本更新为写操作后的原子变量对应的版本,此时共有缓存服务中所缓存的同一原子变量是最新版本的。
103.本技术实施例中微服务包括存储服务与共有缓存服务,不仅各个单机设备不用再各自单独创建缓存实例,节省了存储空间;而且在根据写操作请求对存储服务中存储的原子变量执行写操作之后由于对共有缓存服务中缓存的同一原子变量执行了同步处理,因而共有缓存服务中所缓存的原子变量与存储服务中所存储的原子变量保持一致,业务方发起读操作请求时,对共有缓存服务中所缓存的最新版本的原子变量执行读操作即可,保证了各个业务方所读取到的原子变量是一致的,从而提升了数据处理的准确率。
104.以下对本技术实施例的一个具体应用场景进行详细说明:
105.请参阅图12,为一种示例性的数据处理方法的流程图;数据处理方法可以包括以下步骤,详细介绍如下:
106.步骤s1201,接收多个业务方分别发起的数据处理请求,数据处理请求包括读操作请求或者写操作请求。
107.可选地,多个业务方中部分业务方发起读操作请求,部分业务方发起写操作请求。
108.首先,介绍数据的读过程,其中:
109.步骤s1202,响应于接收到的多个读操作请求,将存储服务中存储的原子变量对应的版本与共有缓存服务中所缓存的同一原子变量对应的版本进行比较。
110.可选地,响应于接收到的多个读操作请求,此时可以从存储服务中获取所存储的原子变量对应的版本,以及从共有缓存服务中获取所缓存的同一原子变量对应的版本,进而将存储服务中存储的原子变量对应的版本与共有缓存服务中所缓存的同一原子变量对应的版本进行比较,以确定共有缓存服务中所缓存的同一原子变量是否是最新版本。
111.步骤s1203,若比较结果指示存储服务中存储的原子变量对应的版本高于共有缓存服务中所缓存的同一原子变量对应的版本,则用存储服务中存储的原子变量替换共有缓存服务中所缓存的同一原子变量,并更新替换后的原子变量对应的版本,以使共有缓存服务中所缓存的原子变量为最新版本。
112.可选地,如果比较结果指示存储服务中存储的原子变量对应的版本高于共有缓存服务中所缓存的同一原子变量对应的版本,即表征此时共有缓存服务中缓存的原子变量并非为最新版本的原子变量;因此,需要用存储服务中存储的原子变量替换共有缓存服务中所缓存的同一原子变量,以使共有缓存服务中所缓存的原子变量为最新版本,并同时更新替换后的原子变量对应的版本,以标识替换后的原子变量所属的版本,便于在有需要时,再根据原子变量对应的版本进行比较。
113.步骤s1204,根据多个读操作请求对共有缓存服务中缓存的最新版本的原子变量执行读操作。
114.可选地,各个读操作请求对应的读操作程序可以同时对共有缓存服务中缓存的最新版本的原子变量执行读操作。
115.其次,介绍数据的读过程,其中:
116.步骤s1205,响应于接收到的多个写操作请求,将各个写操作请求对应的写操作程序存储至队列中。
117.可选地,考虑到存储服务中存储的原子变量的安全性,各个写操作请求对应的写操作程序不能同时对存储服务中存储的原子变量执行写操作,因此,此时可以将各个写操作请求对应的写操作程序存储至队列中。
118.步骤s1206,依次从队列中取出写操作程序对存储服务中存储的原子变量执行写操作。
119.可选地,队列中的各个写操作程序均设置为阻塞状态,从队列中取出位于队首位置的写操作程序作为目标写操作程序,并将目标写操作程序的状态由阻塞状态切换为运行状态;之后,通过处于运行状态的目标写操作程序对存储服务中存储的原子变量进行写操作,并在处于运行状态的目标写操作程序对存储服务中存储的原子变量的写操作执行完毕之后,从队列中再取出位于队首位置的写操作程序作为目标写操作程序以对存储服务中存储的原子变量进行写操作,直至取出队列中所有的写操作程序。
120.其中,对存储服务中存储的原子变量每执行一次写操作之后,都会得到写操作后的原子变量,并同时更新写操作后的原子变量对应的版本。
121.步骤s1207,获取存储服务中写操作后的原子变量,以及写操作后的原子变量对应的版本。
122.可选地,获取队列中最后一个写操作程序执行写操作后的原子变量,即最新版本的原子变量;以及,获取队列中最后一个写操作程序执行写操作后的原子变量对应的版本,即最新版本的原子变量对应的版本。
123.步骤s1208,用存储服务中写操作后的原子变量替换共有缓存服务中所缓存的同一原子变量,并将替换后的原子变量对应的版本更新为写操作后的原子变量对应的版本。
124.可选地,用存储服务中最新版本的原子变量替换共有缓存服务中所缓存的同一原子变量,并将替换后的原子变量对应的版本更新为最新版本的原子变量对应的版本。
125.需要说明的是,根据不同应用场景的业务逻辑,如果读操作请求先于写操作请求,则需要先执行读操作请求的读操作程序,后执行写操作请求的写操作程序,即先执行步骤s1202-步骤s1204,后执行步骤s1205-步骤s1208;如果写操作请求先于读操作请求,则需要先执行写操作请求的写操作程序,后执行读操作请求的读操作程序,即先执行步骤s1205-步骤s1208,后执行步骤s1202-步骤s1204。
126.请参阅图13,为一种示例性的数据处理方法的示意图。例如设接收到的数据处理请求为3个,其中1个写操作请求对应有写操作程序(即线程1),2个读操作请求分别对应有读操作程序(即线程2、线程3),线程1、线程2、线程3均可以调用函数compare exchange,以对原子变量执行compare exchange操作;同时设根据业务逻辑,线程1要先于线程2、线程3执行,因此,此时线程1保持运行状态,而将线程2、线程3设置为阻塞状态,具体地,可以将线程2、线程3阻塞在条件变量(只有当条件满足时,才会由阻塞状态切换为运行状态)上;其中:
127.处于运行状态的线程1对存储服务中存储的原子变量执行写操作,并在写操作成功之后对共有缓存服务中缓存的同一原子变量执行同步处理,即对共有缓存服务中缓存的同一原子变量进行更新;
128.对共有缓存服务中缓存的同一原子变量进行更新之后,唤醒线程2、线程3,以使线程2、线程3由阻塞状态切换为运行状态,可以理解的是,共有缓存服务中缓存的同一原子变量进行更新完毕可以作为一个唤醒线程2、线程3的条件;进而处于运行状态的线程2、线程3分别对共有缓存服务中缓存的最新版本的同一原子变量执行读操作。
129.本技术实施例中微服务包括存储服务与共有缓存服务,通过比对存储服务中存储的原子变量对应的版本与共有缓存服务中所缓存的同一原子变量对应的版本,更新共有缓存服务,保证了原子变量的一致性;同时,多个并发线程访问共有缓存服务,只有一个线程会去访问存储服务,实现了高并发读。
130.图14是本技术的一个实施例示出的数据处理装置的框图。如图14所示,该数据处理装置应用于微服务,微服务包括存储服务与共有缓存服务,该数据处理装置包括:
131.接收模块1401,配置为接收多个业务方分别发起的数据处理请求,数据处理请求包括读操作请求或者写操作请求;
132.读模块1402,配置为响应于接收到的至少一个读操作请求,若确定共有缓存服务中缓存有最新版本的原子变量,则根据至少一个读操作请求对共有缓存服务中缓存的最新版本的原子变量执行读操作;
133.写与同步模块1403,配置为响应于接收到的至少一个写操作请求,依次对存储服务中存储的原子变量执行写操作,并对共有缓存服务中缓存的同一原子变量执行同步处理。
134.本技术实施例中微服务包括存储服务与共有缓存服务,不仅各个单机设备不用再各自单独创建缓存实例,节省了存储空间;而且在根据写操作请求对存储服务中存储的原
子变量执行写操作之后由于对共有缓存服务中缓存的同一原子变量执行了同步处理,因而共有缓存服务中所缓存的原子变量与存储服务中所存储的原子变量保持一致,业务方发起读操作请求时,对共有缓存服务中所缓存的最新版本的原子变量执行读操作即可,保证了各个业务方所读取到的原子变量是一致的,从而提升了数据处理的准确率。
135.在本技术的一个实施例中,该数据处理装置还包括:
136.比较模块,配置为将存储服务中存储的原子变量对应的版本与共有缓存服务中所缓存的同一原子变量对应的版本进行比较;
137.更新模块,配置为若比较结果指示存储服务中存储的原子变量对应的版本高于共有缓存服务中所缓存的同一原子变量对应的版本,则用存储服务中存储的原子变量替换共有缓存服务中所缓存的同一原子变量,并更新替换后的原子变量对应的版本,以使共有缓存服务中所缓存的原子变量为最新版本。
138.在本技术的一个实施例中,接收到的读操作请求为至少两个;该数据处理装置还包括:
139.第一转发及获取模块,配置为向存储服务转发一个读操作请求,并从存储服务中获取所存储的原子变量对应的版本;
140.第二转发及获取模块,配置为向共有缓存服务转发其它所有的读操作请求,并从共有缓存服务中获取所缓存的同一原子变量对应的版本。
141.在本技术的一个实施例中,对存储服务中存储的原子变量执行写操作之后,得到写操作后的原子变量,并更新写操作后的原子变量对应的版本;写与同步模块1403包括:
142.获取单元,配置为获取存储服务中写操作后的原子变量,以及写操作后的原子变量对应的版本;
143.更新单元,配置为用存储服务中写操作后的原子变量替换共有缓存服务中所缓存的同一原子变量,并将替换后的原子变量对应的版本更新为写操作后的原子变量对应的版本。
144.在本技术的一个实施例中,接收到的写操作请求为至少两个;写与同步模块1403包括:
145.存储单元,配置为将各个写操作请求对应的写操作程序存储至队列中;
146.取出单元,配置为依次从队列中取出写操作程序对存储服务中存储的原子变量执行写操作。
147.在本技术的一个实施例中,队列中的各个写操作程序设置为阻塞状态;取出单元包括:
148.切换单元,配置为从队列中取出位于队首位置的写操作程序作为目标写操作程序,并将目标写操作程序的状态由阻塞状态切换为运行状态;
149.写单元,配置为通过处于运行状态的目标写操作程序对存储服务中存储的原子变量进行写操作,并在处于运行状态的目标写操作程序对存储服务中存储的原子变量的写操作执行完毕之后,从队列中再取出位于队首位置的写操作程序作为目标写操作程序以对存储服务中存储的原子变量进行写操作,直至取出队列中所有的写操作程序。
150.在本技术的一个实施例中,该数据处理装置还包括:
151.创建模块,配置为根据接收到的创建请求创建一个共有缓存服务;其中,共有缓存
服务用于缓存从存储服务中获取到的原子变量。
152.需要说明的是,上述实施例所提供的装置与上述实施例所提供的方法属于同一构思,其中各个模块和单元执行操作的具体方式已经在方法实施例中进行了详细描述,此处不再赘述。
153.本技术的实施例还提供了一种电子设备,包括一个或多个处理器和存储装置,其中,存储装置用于存储一个或多个程序,当一个或多个程序被电子设备执行时实现如前的数据处理方法。
154.图15示出了适于用来实现本技术实施例的电子设备的计算机系统的结构示意图。
155.需要说明的是,图15示出的电子设备的计算机系统仅是一个示例,不应对本技术实施例的功能和使用范围带来任何限制。
156.如图15所示,计算机系统包括中央处理单元(central processing unit,cpu)1501,其可以根据存储在只读存储器(read-only memory,rom)1502中的程序或者从存储部分1508加载到随机访问存储器(random access memory,ram)1503中的程序而执行各种适当的动作和处理,例如执行上述实施例中的方法。在ram 1503中,还存储有系统操作所需的各种程序和数据。cpu 1501、rom 1502以及ram 1503通过总线1504彼此相连。输入/输出(input/output,i/o)接口1505也连接至总线1504。
157.以下部件连接至i/o接口1505:包括键盘、鼠标等的输入部分1506;包括诸如阴极射线管(cathode ray tube,crt)、液晶显示器(liquid crystal display,lcd)等以及扬声器等的输出部分1507;包括硬盘等的存储部分1508;以及包括诸如lan(local area network,局域网)卡、调制解调器等的网络接口卡的通信部分1509。通信部分1509经由诸如因特网的网络执行通信处理。驱动器1510也根据需要连接至i/o接口1505。可拆卸介质1511,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1510上,以便于从其上读出的计算机程序根据需要被安装入存储部分1508。
158.特别地,根据本技术的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本技术的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的计算机程序。在这样的实施例中,该计算机程序可以通过通信部分1509从网络上被下载和安装,和/或从可拆卸介质1511被安装。在该计算机程序被中央处理单元(cpu)1501执行时,执行本技术的系统中限定的各种功能。
159.需要说明的是,本技术实施例所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(erasable programmable read only memory,eprom)、闪存、光纤、便携式紧凑磁盘只读存储器(compact disc read-only memory,cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本技术中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本技术中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算
机可读的计算机程序。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的计算机程序可以用任何适当的介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
160.附图中的流程图和框图,图示了按照本技术各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。其中,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不相同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
161.描述于本技术实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现,所描述的单元也可以设置在处理器中。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定。
162.本技术的另一方面还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如前的数据处理方法。该计算机可读存储介质可以是上述实施例中描述的电子设备中所包含的,也可以是单独存在,而未装配入该电子设备中。
163.本技术的另一方面还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各个实施例中提供的数据处理方法。
164.上述内容,仅为本技术的较佳示例性实施例,并非用于限制本技术的实施方案,本领域普通技术人员根据本技术的主要构思和精神,可以十分方便地进行相应的变通或修改,故本技术的保护范围应以权利要求书所要求的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1