分布式缓存系统的读写方法、装置、存储介质及设备与流程
未命名
09-29
阅读:92
评论:0
1.本技术涉及数据存储读写技术领域,特别是涉及一种分布式缓存系统的读写方法、装置、计算机设备、计算机可读存储介质和计算机程序产品。
背景技术:
2.随着金融系统业务需求的增长,需要越来越多的银行客户端开发工作,而分布式缓存系统为应用提供分布式缓存服务,缓存服务的可用性和延迟性决定了银行客户端开发的工作量和效率。
3.传统技术中,分布式缓存系统采用多园区的方式部署,主备模式的读写请求都由存储主节点处理,当银行客户端与缓存服务的存储主节点不在同一园区时,银行客户端访问该存储主节点上的数据需要跨园区访问。
4.然而,传统技术中的跨园区访问增加了读请求的延迟,效率低下。
技术实现要素:
5.基于此,有必要针对上述技术问题,提供一种能够减少跨园区的分布式缓存系统的读写方法、装置、计算机设备、计算机可读存储介质和计算机程序产品。
6.第一方面,本技术提供了一种分布式缓存系统的读写方法。所述分布式缓存系统包括多个存储分片,且同一个存储分片下的主节点和备节点设置于不同的银行园区,所述方法包括:
7.接收到银行客户端的请求,确定所述请求的请求类型,所述请求类型包括读请求或写请求;
8.若为读请求,从所述多个存储分片中确定所述读请求对应的第一存储分片;所述第一存储分片包括一个主节点和至少一个备节点;
9.在所述第一存储分片下的主节点位于当前园区之外的其他园区、备节点位于当前园区且为可用状态的情况下,将所述读请求发送至所述备节点,以从所述当前园区的所述备节点读取数据。
10.在其中一个实施例中,所述接收到银行客户端的请求,确定所述请求的请求类型之后,还包括:
11.若为写请求,从所述多个存储分片中确定所述写请求对应的第二存储分片,所述第二存储分片包括一个主节点和至少一个备节点;
12.获取所述第二存储分片下的可用备节点的数量;
13.在所述可用备节点的数量大于等于1的情况下,将预设的wait命令加入所述写请求中,得到新的写请求;
14.向所述第二存储分片下的主节点发送所述新的写请求,所述新的写请求用于指示所述第二存储分片下的主节点执行写操作,同时通知所述第二存储分片下的可用备节点执行同样的写操作并返回写操作执行结果,还用于指示所述第二存储分片下的主节点在所述
wait命令指定的时间内返回所述可用备节点执行写操作的结果。
15.在其中一个实施例中,各存储分片对应有一个全局唯一槽位区间;所述若为读请求,从所述多个存储分片中确定所述读请求对应的第一存储分片,包括:
16.若为读请求,根据所述读请求携带的key值做哈希处理,得到第一目标槽位,从所述多个存储分片中确定槽位区间包含所述第一目标槽位的第一存储分片;
17.所述若为写请求,从所述多个存储分片中确定所述写请求对应的第二存储分片,包括:
18.若为写请求,根据所述写请求携带的key值做哈希处理,得到第二目标槽位,从所述多个存储分片中确定槽位区间包含所述第二目标槽位的第二存储分片。
19.在其中一个实施例中,所述若为读请求,从所述多个存储分片中确定所述读请求对应的第一存储分片之后,还包括:
20.在所述第一存储分片下的主节点位于当前园区、备节点位于所述当前园区之外的其他园区的情况下,将所述读请求发送至所述第一存储分片下的主节点,以从所述第一存储分片下的主节点读数据。
21.在其中一个实施例中,所述若为读请求,从所述多个存储分片中确定所述读请求对应的第一存储分片之后,还包括:
22.在所述第一存储分片下的主节点位于当前园区之外的其他园区、备节点位于当前园区但为不可用状态的情况下,将所述读请求发送至所述其他园区的所述第一存储分片下的主节点,以从所述其他园区的所述第一存储分片下的主节点读数据。
23.在其中一个实施例中,所述获取所述第二存储分片下的可用备节点的数量之后,还包括:
24.在所述第二存储分片下的可用备节点的数量为0的情况下,将所述写请求发送至所述第二存储分片下的主节点,所述写请求用于指示所述第二存储分片下的主节点执行写操作,并返回写操作执行结果。
25.在其中一个实施例中,所述在所述可用备节点的数量大于等于1的情况下,将预设的wait命令加入所述写请求中,得到新的写请求之前,还包括:
26.基于所述第二存储分片下的可用备节点的数量确定所述wait命令指定的时间,所述wait命令指定的时间与所述可用备节点的数量成正相关关系;
27.基于所述时间生成所述预设的wait命令。
28.在其中一个实施例中,所述返回所述可用备节点执行写操作的结果之后,还包括:
29.基于所述第二存储分片下的主节点返回的所述可用备节点执行写操作的结果,确定针对所述写请求在所述第二存储分片下已同步备节点数量;
30.在所述已同步备节点数量等于所述第二存储分片下的可用备节点的数量的情况下,向所述银行客户端反馈所述写请求对应的写操作同步成功结果。
31.在其中一个实施例中,从所述多个存储分片中确定所述读请求对应的第一或第二存储分片后,还包括:
32.从注册中心获取所述分布式缓存系统下各主节点和各备节点对应的注册信息,所述注册中心用于存储所述分布式缓存系统下所有节点所在的银行园区信息;
33.基于所述注册信息,确定第一存储分片或第二存储分片下的节点所处的园区。
34.第二方面,本技术还提供了一种分布式缓存系统的读写装置。所述装置包括:
35.接收模块,用于接收到银行客户端的请求,确定所述请求的请求类型,所述请求类型包括读请求或写请求;
36.定位模块,用于在所述请求类型为读请求的情况下,从所述多个存储分片中确定所述读请求对应的第一存储分片;所述第一存储分片包括一个主节点和至少一个备节点;
37.读取模块,用于在所述第一存储分片下的主节点位于当前园区之外的其他园区、备节点位于当前园区且为可用状态的情况下,将所述读请求发送至所述备节点,以从所述当前园区的所述备节点读取数据。
38.第三方面,本技术还提供了一种计算机设备。所述计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
39.接收到银行客户端的请求,确定所述请求的请求类型,所述请求类型包括读请求或写请求;
40.若为读请求,从所述多个存储分片中确定所述读请求对应的第一存储分片;所述第一存储分片包括一个主节点和至少一个备节点;
41.在所述第一存储分片下的主节点位于当前园区之外的其他园区、备节点位于当前园区且为可用状态的情况下,将所述读请求发送至所述备节点,以从所述当前园区的所述备节点读取数据。
42.第四方面,本技术还提供了一种计算机可读存储介质。所述计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
43.接收到银行客户端的请求,确定所述请求的请求类型,所述请求类型包括读请求或写请求;
44.若为读请求,从所述多个存储分片中确定所述读请求对应的第一存储分片;所述第一存储分片包括一个主节点和至少一个备节点;
45.在所述第一存储分片下的主节点位于当前园区之外的其他园区、备节点位于当前园区且为可用状态的情况下,将所述读请求发送至所述备节点,以从所述当前园区的所述备节点读取数据。
46.第五方面,本技术还提供了一种计算机程序产品。所述计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:
47.接收到银行客户端的请求,确定所述请求的请求类型,所述请求类型包括读请求或写请求;
48.若为读请求,从所述多个存储分片中确定所述读请求对应的第一存储分片;所述第一存储分片包括一个主节点和至少一个备节点;
49.在所述第一存储分片下的主节点位于当前园区之外的其他园区、备节点位于当前园区且为可用状态的情况下,将所述读请求发送至所述备节点,以从所述当前园区的所述备节点读取数据。
50.上述分布式缓存系统的读写方法、装置、计算机设备、计算机可读存储介质和计算机程序产品,针对银行的分布式缓存系统提出了一种新的读请求响应逻辑,当接收到银行客户端的读请求时,在银行客户端与对应的存储分片下的存储主节点不在同一园区、但备节点在当前银行客户端所在园区时,通过访问设置于本园区的存储备节点,以读取需要的
数据,减少了读请求因跨园区引起的延迟,提高了分布式缓存系统的访问效率。
附图说明
51.图1为一个实施例中分布式缓存系统的读写方法的应用环境图;
52.图2为一个实施例中分布式缓存系统的读写方法的流程示意图;
53.图3为一个实施例中分布式缓存系统的读写方法的流程示意图;
54.图4为另一个实施例中分布式缓存系统的读写方法的应用环境图;
55.图5为一个实施例中分布式缓存系统的读写方法的流程示意图;
56.图6为一个实施例中分布式缓存系统的读写方法的流程示意图;
57.图7为一个实施例中分布式缓存系统的读写装置的结构框图;
58.图8为一个实施例中计算机设备的内部结构图。
具体实施方式
59.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。
60.本技术实施例提供的分布式缓存系统的读写方法,可以应用于如图1所示的应用环境中。总体包括应用层、软负载层、代理节点、存储层,其中存储层包括一个主节点和一个或多个备节点。其中,应用层提供分布式缓存服务的访问接口,软负载层通过应用层访问软负载层的具体的端口,软负载层再通过端口与代理节点的映射关系,转发到代理节点,代理节点接收应用层的请求并解析后,发送请求到相应的存储层上,由存储层的节点执行请求对应的操作。其中,应用层和软负载层可以集成到银行客户端中;其中,存储层包括多个不同的存储分片,多个存储分片共同构成缓存系统,因为各存储分片对应有一个全局唯一的槽位区间,所以一个存储分片保存的数据是全局唯一的,一个存储分片下有多个存储节点,存储节点有主节点和备节点,一个存储分片由一个主节点和至少一个备节点构成,在正常情况下,主节点、备节点数据保持一致。
61.其中,作为示例,图1所示为a、b两个园区的情形,对应地,一个存储分片下包含1个主节点和1个备节点,例如:主节点-1(主-1)和备节点-1(备1)组成一个存储分片,主节点-n(主-n)和备节点-n(备-n)组成另一个存储分配片;可以理解,还可以包含多个园区的情形,对应地,一个存储分片下包含1个主节点和多个备节点。园区可以理解为各银行网点的系统。
62.在一个实施例中,如图2所示,提供了一种分布式缓存系统的读写方法,以该方法应用于图1中的代理节点为例进行说明,分布式缓存系统包括多个存储分片,且同一个存储分片下的主节点和备节点设置于不同的银行园区,包括以下步骤:
63.步骤s202,接收到银行客户端的请求,确定所述请求的请求类型,所述请求类型包括读请求或写请求。
64.其中,请求可以是操作人员在终端的银行客户端的访问或者操作请求,例如对存储节点里缓存数据的读请求、对存储节点的写请求。可以通过请求中携带的标识或者字段来区分读请求或者写请求,例如:携带标识r表示从文件读取数据,携带标识w表示向文件写
入数据,携带标识a表示要向文件写入数据但是添加到当前内容尾部,等等。
65.步骤s204,接收到银行客户端的请求若为读请求,从所述多个存储分片中确定所述读请求对应的第一存储分片;所述第一存储分片包括一个主节点和至少一个备节点。
66.上述存储分片相当于一个独立的数据分片,同一分片的数据保存在两个或多个存储节点中,当主节点故障时,备节点代替主节点继续处理客户请求。
67.其中,存储分片可以看作一个存储单元,一个存储分片对应一个单元号;其中,请求可以包含指令和数据,代理节点对指令的分析可以得到请求中目标单元号,目标单元号指向请求对应的目标存储分片。一个存储分片包括一个主节点和至少一个备节点,其中备节点个数视园区个数而定,保证其他每个园区主节点都有至少一个对应的备节点设置在本园区,其他园区的备节点也是同样设置,这样相当于一个园区内所有节点的数据加起来就等于整套缓存系统的存储数据。
68.应理解,本发明的分布式缓存系统包括多个存储分片,且同一个存储分片下的主节点和备节点设置于不同的银行园区,同一个存储分片下位于不同园区的主节点和备节点可以通过通讯等方式来实现数据复制。
69.步骤s206,在所述第一存储分片下的主节点位于当前园区之外的其他园区、备节点位于当前园区且为可用状态的情况下,将所述读请求发送至所述备节点,以从所述当前园区的所述备节点读取数据。
70.其中,银行园区可以是一个有服务系统的银行网点;当前园区可以是接收到请求的代理节点所位于的银行园区;可用状态是存储节点当前可正常使用的状态,可以通过对每个备节点发送测试请求,收到测试请求的反馈即可认为为可用状态。存储分片中用于处理请求的一个节点称为主节点,主节点将数据复制到剩下的存储节点中的备节点,本发明中,对备节点和代理节点之间建立起连接,备节点可以不经过主节点命令直接接收代理节点发送的读请求,然后读取数据并反馈代理节点。
71.对于分布式缓存系统,一般情况下不会考虑通过备节点响应读请求,因为分布式缓存主备模式下的读写请求都由主节点处理,在收到请求的客户端与缓存服务的存储主节点不在同一园区时,读取该主节点上的数据需要跨园区访问,增加了请求的延迟;另外地,主节点数据是异步复制数据到备节点,所以备节点数据可能与主节点数据存在较大时延,无法保证数据准确完整;本技术中上述分布式缓存系统的读写方法提出读请求优先在本园区节点处理,具体地,一个存储分片下的主节点和备节点设置于不同的银行园区,将同一份数据缓存同步复制备份于不同园区的备节点,在接收到银行客户端的请求后确定该请求指向的存储分片,在该请求指向的存储分片下的主节点位于当前园区之外的其他园区、备节点位于当前园区且为可用状态的情况下,直接读取本园区备节点上的数据,避免了跨园区读取主节点数据的延迟,提高了效率。
72.在一个实施例中,如图3所示,接收到银行客户端的请求,确定请求的请求类型之后,还包括:
73.步骤s302,接收到的请求若为写请求,从所述多个存储分片中确定所述写请求对应的第二存储分片,所述第二存储分片包括一个主节点和至少一个备节点。
74.其中,写请求可以包含指令和数据,代理节点对指令的分析可以得到请求中目标单元号,目标单元号指向请求对应的目标存储分片。
75.步骤s304,代理节点获取所述第二存储分片下的可用备节点的数量。
76.其中,代理节点可以对存储分片下每个备节点发送测试请求,收到测试请求的反馈即可认为为可用状态,以此统计可用备节点的数量。
77.步骤s306,在所述可用备节点的数量大于等于1的情况下,将预设的wait命令加入所述写请求中,得到新的写请求。
78.其中,预设的wait命令可以是加入写请求的指令部分或者控制部分;预设的wait命令可用于指定同步备节点的个数和请求的最大响应时间,例如指定获取的可用备节点个数为同步备节点个数,指定请求的最大响应时间,其中请求的最大响应时间与同步备节点个数成正相关关系,请求的最大响应时间与同步备节点个数也可以是线性正相关关系,还可以是同步备节点个数越多,请求的最大响应时间增长越缓慢的非线性正相关关系。
79.步骤s308,向所述第二存储分片下的主节点发送所述新的写请求,所述新的写请求用于指示所述第二存储分片下的主节点执行写操作,同时通知所述第二存储分片下的可用备节点执行同样的写操作并返回写操作执行结果,还用于指示所述第二存储分片下的主节点在所述wait命令指定的时间内返回所述可用备节点执行写操作的结果。
80.应理解,新的写请求包含写请求与预设的wait命令,写请求用于指示第二存储分片下的主节点执行写操作,预设的wait命令用于指示第二存储分片下的可用备节点执行同样的写操作并返回写操作执行结果,还用于指示所述第二存储分片下的主节点在所述wait命令指定的时间内返回所述可用备节点执行写操作的结果。在wait命令指定的请求的最大响应时间内,备节点执行同样的写操作并返回写操作执行结果给主节点,超过wait命令指定的时间后,主节点结束wait命令,将当前已完成同样写操作的备节点个数返回给代理节点。
81.现有技术中,分布式缓存系统主节点与备节点存储的数据可以通过异步复制方式进行数据复制,异步复制模式下主节点将数据更新传播给备节点后立即反馈结果,而不论备节点是否成功读取或更新数据,这种情况下,在主节点反馈结果后的短时间内,主备节点数据并不一致,若此时读取备节点数据则可能读取不到完整准确的数据。本实施例中,通过加入预设的wait命令获得新的写请求,在预设的wait命令指定的时间内,将主节点、备节点同步复制,同步复制模式下主节点的单个数据更新需要在所有备节点上同步更新,换句话说,当主节点反馈成功结果时,存储分片中所有节点的数据保持一致。使用wait命令的同步复制让主节点与备节点数据实现强一致,既避免了异步复制模式下备节点数据的延迟性,wait命令的最大响应时间又避免了备节点复制过程中超时未响应的情况,提高了请求处理的效率,保证了主备节点数据的强一致性。
82.进一步的,在一个实施例中,各存储分片对应有一个全局唯一槽位区间;所述若为读请求,从所述多个存储分片中确定所述读请求对应的第一存储分片,包括:若为读请求,根据所述读请求携带的key值做哈希处理,得到第一目标槽位,从所述多个存储分片中确定槽位区间包含所述第一目标槽位的第一存储分片;所述若为写请求,从所述多个存储分片中确定所述写请求对应的第二存储分片,包括:若为写请求,根据所述写请求携带的key值做哈希处理,得到第二目标槽位,从所述多个存储分片中确定槽位区间包含所述第二目标槽位的第二存储分片。
83.其中,哈希处理是把任意长度的输入通过散列算法变换成固定长度的输出,该输
出就是哈希值,就是一种将任意长度的消息压缩到某一固定长度的消息摘要的处理方法。键值(key)是计算机注册表中的概念,键值位于注册表结构链末端,和文件系统的文件类似,包含当前计算机及应用程序执行时使用的实际配置信息和数据;上述槽位可以理解为对key值哈希处理后得到的一个数组空间中的一个或多个哈希值,用于管理数据和节点之间的关系,相当于节点对应有一个槽位区间(即数组空间的区间),槽位区间里槽按位置顺序排列,每个槽里存放的是数据。可以理解为向存储层中添加数据的时候,经过代理节点的哈希运算,判断这个请求的key应该存放的槽位是哪个,再看这个槽位在哪个节点上,这个数据就存到了该节点。
84.本实施例中,通过对请求携带的key值做哈希处理,得到目标槽位来确定请求对应的分片信息,因为槽位区间全局唯一,能够精准定位到所需求的分片,减少错误率。
85.在一个实施例中,前述银行客户端请求若为读请求,从多个存储分片中确定读请求对应的第一存储分片之后,还包括:在所述第一存储分片下的主节点位于当前园区、备节点位于所述当前园区之外的其他园区的情况下,将所述读请求发送至所述第一存储分片下的主节点,以从所述第一存储分片下的主节点读数据。
86.本实施例中,确定读请求对应的存储分片主节点位于当前园区后,从当前园区的主节点读取数据,避免从其他园区的备节点读取数据而造成跨园区延迟,提高了读取效率。
87.在一个实施例中,上述银行客户端请求若为读请求,从多个存储分片中确定读请求对应的第一存储分片之后,还可以包括:在所述第一存储分片下的主节点位于当前园区之外的其他园区、备节点位于当前园区但为不可用状态的情况下,将所述读请求发送至所述其他园区的所述第一存储分片下的主节点,以从所述其他园区的所述第一存储分片下的主节点读数据。
88.其中,将读请求发送至其他园区可以理解为通过当前园区的代理节点将读请求的指向更新为第一存储分片下的主节点,然后将读请求转发至第一存储分片下的主节点所在的其他园区代理节点,然后其他园区的代理节点将收到的读请求定位后发送至该园区下的主节点进行读取数据,然后将读取结果和读取的数据反馈回当前园区的代理节点。
89.本实施例中,在存储分片在当前园区的备节点不可用时,通过该存储分片在其他园区的主节点读取数据,提高了分布式缓存系统提供服务的可靠性。
90.在一个实施例中,前述获取第二存储分片下的可用备节点的数量之后,还包括:在所述第二存储分片下的可用备节点的数量为0的情况下,将所述写请求发送至所述第二存储分片下的主节点,所述写请求用于指示所述第二存储分片下的主节点执行写操作,主节点返回写操作执行结果至代理节点。
91.应理解,在第二存储分片下的可用备节点的数量为0的情况下,代理节点不对写请求添加wait命令以节省操作时间,将写请求直接发送至目标主节点,主节点返回操作执行结果至代理节点。
92.本实施例中,在获取到无可用备节点的情况下,不添加预设的wait命令至写请求,以减少请求过程中的响应时间,提高了处理效率。
93.在一个实施例中,前述在可用备节点的数量大于等于1的情况下,将预设的wait命令加入所述写请求中,得到新的写请求之前,还包括:基于所述第二存储分片下的可用备节点的数量确定所述wait命令指定的时间,所述wait命令指定的时间与所述可用备节点的数
量成正相关关系;基于所述时间生成所述预设的wait命令。
94.其中,wait命令指定的时间与同步备节点个数可以是线性正相关关系;还可以是同步备节点个数越多,wait命令指定的时间增长越缓慢的非线性正相关关系。
95.本实施例中,通过可用备节点数量的数量变化灵活设置wait命令指定的时间,达到合理设置请求的响应时间,确保请求能在合理的响应时间内执行完成,避免了高延迟的响应,提高了写请求执行效率。
96.在一个实施例中,上述返回所述可用备节点执行写操作的结果之后,还包括:基于所述第二存储分片下的主节点返回的所述可用备节点执行写操作的结果,确定针对所述写请求在所述第二存储分片下已同步备节点数量;在所述已同步备节点数量等于所述第二存储分片下的可用备节点的数量的情况下,向所述银行客户端反馈所述写请求对应的写操作同步成功结果。
97.应理解,在已同步备节点数量等于第二存储分片下的可用备节点的数量以外的情况下,向银行客户端反馈写请求对应的写操作同步失败结果。
98.本实施例中,在已同步备节点数量等于可用备节点数量的情况下,可认为写操作同步成功,确保了主备节点的数据一致性。
99.在一个实施例中,从所述多个存储分片中确定所述读请求对应的第一或第二存储分片后,还包括:从注册中心获取所述分布式缓存系统下各主节点和各备节点对应的注册信息,所述注册中心用于存储所述分布式缓存系统下所有节点所在的银行园区信息;基于所述注册信息,确定第一存储分片或第二存储分片下的节点所处的园区。
100.其中,注册中心可以相当于网络中的一个机构,负责分布式缓存状态管理、服务发现、组件间协调通信,并作为存储节点分片及园区信息数据来源。应理解,在确定第一存储分片或者第二存储分片后,基于所有存储分片下的存储节点的注册信息,与第一存储分片或者第二存储分片下的节点进行匹配,得到前述节点的所处园区。
101.本实施例中,通过预先注册的所有存储分片下的节点的园区信息,与前述第一或第二存储分片的节点进行匹配,得到目标节点的园区信息,快速定位到目标节点的所在园区,以方便读取数据时的节点选择判断,提高请求处理效率。
102.在一个实施例中,应用场景如图4,本发明的分布式缓存系统的读写方法步骤如图5所示,具体包括:
103.步骤s501,代理节点启动,判断是否为读请求,若为读请求,执行步骤s502,若为写请求,则执行主备强一致流程。
104.其中,可以通过请求中携带的标识或者字段来区分读请求或者写请求,例如:携带标识r表示从文件读取数据即为读请求,携带标识w表示向文件写入数据即为写请求,携带标识a表示要向文件写入数据但是添加到当前内容尾部即另一种写请求,等等。
105.步骤s502,代理节点从注册中心获取园区信息后,分布式缓存的注册中心在内存中保存有每个存储节点的园区信息,将读请求携带的key通过哈希处理得到槽位,找到槽位所属槽位区间对应的存储节点,选择其中在本园区的存储节点作为读请求的目标存储节点。
106.其中,代理节点可以是处理信息的一种组件,代理节点可以用于启动时从注册中心获取分片信息,并负责接收应用请求,对请求进行解析,根据key的哈希值对应的槽位路
由到具体的数据分片上。
107.应理解,一个数据分片相当于一个存储分片,一个存储分片上的存储节点槽位区间应完全一致,故在找到槽位所对应的存储节点后,根据注册中心中每个存储节点的园区信息便可对应找到位于本园区的存储节点。
108.步骤s503,判断此存储节点的主备关系和可用状态。
109.其中,存储节点的主备关系可以通过设置节点权限区分开,例如主节点对客户端开放所有权限,备节点对客户端只提供只读权限,备节点只将主节点的更新同步过来;可通过超级权限用户来更改节点权限设置。例如,代理节点连存储节点并且获取存储节点权限,若所有权限都具备,则是主节点,否则为备节点。可用状态是存储节点当前可正常使用的状态,可以通过对每个备节点发送测试请求,收到测试请求的反馈即可认为为可用状态。
110.步骤s504,在此存储节点为备节点且可用的情况下,代理节点将读请求发送至该备节点,以从当前园区的备节点读取数据;在此存储节点为主节点且可用的情况下,代理节点将读请求发送到该主节点,以从当前园区的主节点读取数据;在此存储节点为备节点且不可用的情况下,代理节点将读请求发送至此节点所属分片在其他园区的主节点,以从其他园区的主节点读取数据。
111.应理解,在此存储节点为主节点且不可用的情况下,主节点将请求转发同一分片下的备节点,以从备节点读取数据。
112.其中,将读请求发送至其他园区可以理解为通过当前园区的代理节点将读请求的指向更新为第一存储分片下的主节点,然后将读请求转发至第一存储分片下的主节点所在的其他园区代理节点,然后其他园区的代理节点将收到的读请求定位后发送至该园区下的主节点进行读取数据,然后将读取结果和读取的数据反馈回当前园区的代理节点。
113.步骤s505,代理节点接收到存储节点返回的操作结果及数据并发送给客户端。
114.其中,应用和软负载可以集成在客户端中,代理节点向应用返回操作结果及数据相当于返回至客户端。
115.主备强一致流程如图6,代理节点将写请求携带的key通过哈希处理得到目标槽位,根据目标槽位所属的槽位区间,对应到存储分片,并获取分片上可用备节点数量。代理节点可以对存储分片下每个备节点发送测试请求,收到测试请求的反馈即可认为为可用状态,以此统计可用备节点的数量;还可以心跳机制监测备节点状态,每隔1秒向每个备节点发送ping命令,在规定时间响应的备节点即为可用备节点,以此得到可用备节点数量。
116.当可用备节点数量大于0时,通过协议修改,将写请求与wait命令合并为一条请求转发至相应存储分片的主节点。wait命令可以指定同步备节点的个数和请求最大响应时间,请求的最大响应时间与同步备节点个数也可以是线性正相关关系,还可以是同步备节点个数越多,请求的最大响应时间增长越缓慢的非线性正相关关系,例如:在备节点个数为1的情况下,请求的最大响应时间可以为750ms,在备节点个数为2的情况下,请求的最大响应时间可以为1500ms等)。当可用备节点数量等于0时,则无需进行wait操作,直接转发写请求至相应存储分片。
117.主节点接收到写请求后,进行写操作;在写请求还包含wait命令的情况下,主节点发“replconf getack”命令给备节点,“replconf getack”命令用于要求备节点尽快告诉主节点同步的偏移量,主节点根据反馈的偏移量判断是否数据复制完成,完成则发给代理节
点已同步的备节点个数,未完成则继续等备节点下一次回复,如果在wait命令的请求最大响应时间时间内仍未完成同步,则返回给代理节点已同步备节点数为0。
118.应理解,“replconf getack”命令用于主节点检测备节点网络连接状态,还用于检测备节点的偏移量,来判断与主节点的数据是否一致,从而判断备节点此次数据是否完成复制。
119.代理节点根据wait响应结果已同步备节点个数判断是否完成主备同步,在已同步备节点数量等于可用备节点的数量的情况下,向银行客户端反馈写请求对应的写操作同步成功结果;在已同步备节点数量等于可用备节点的数量以外的情况下,向银行客户端反馈写请求对应的写操作同步失败结果。
120.应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
121.基于同样的发明构思,本技术实施例还提供了一种用于实现上述所涉及的分布式缓存系统的读写方法的分布式缓存系统的读写装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个分布式缓存系统的读写装置实施例中的具体限定可以参见上文中对于分布式缓存系统的读写方法的限定,在此不再赘述。
122.在一个实施例中,如图7所示,提供了一种分布式缓存系统的读写装置700,包括:接收模块701、定位模块702和读取模块703,其中:
123.接收模块701,用于接收到银行客户端的请求,确定请求的请求类型,请求类型包括读请求或写请求。
124.定位模块702,用于在请求类型为读请求的情况下,从多个存储分片中确定读请求对应的第一存储分片;第一存储分片包括一个主节点和至少一个备节点。
125.读取模块703,用于在第一存储分片下的主节点位于当前园区之外的其他园区、备节点位于当前园区且为可用状态的情况下,将读请求发送至备节点,以从当前园区的备节点读取数据。
126.在一个实施例中,分布式缓存系统的读写装置还可以包括获取模块、刻写模块、写请求发送模块,该获取模块用于获取第二存储分片下的可用备节点的数量;该刻写模块用于在可用备节点的数量大于等于1的情况下,将预设的wait命令加入写请求中,得到新的写请求;写请求发送模块用于向第二存储分片下的主节点发送新的写请求,新的写请求用于指示第二存储分片下的主节点执行写操作,同时通知第二存储分片下的可用备节点执行同样的写操作并返回写操作执行结果,还用于指示第二存储分片下的主节点在wait命令指定的时间内返回可用备节点执行写操作的结果。
127.在一个实施例中,上述定位模块还可以用于在读请求的情况下,从多个存储分片中确定读请求对应的第一存储分片,包括:若为读请求,根据读请求携带的key值做哈希处
理,得到目标槽位,从多个存储分片中确定与目标槽位对应的第一存储分片;在为读请求的情况下,从多个存储分片中确定写请求对应的第二存储分片,包括:若为写请求,根据写请求携带的key值做哈希处理,得到目标槽位,从多个存储分片中确定与目标槽位对应的第二存储分片。
128.在一个实施例中,上述读取模块还用于在第一存储分片下的主节点位于当前园区、备节点位于当前园区之外的其他园区的情况下,将读请求发送至第一存储分片下的主节点,以从第一存储分片下的主节点读数据。
129.在一个实施例中,上述读取模块,还用于在第一存储分片下的主节点位于当前园区之外的其他园区、备节点位于当前园区但为不可用状态的情况下,将读请求发送至其他园区的第一存储分片下的主节点,以从其他园区的第一存储分片下的主节点读数据。
130.在一个实施例中,上述写请求发送模块,还用于在第二存储分片下的可用备节点的数量为0的情况下,将写请求发送至第二存储分片下的主节点,写请求用于指示第二存储分片下的主节点执行写操作,并返回写操作执行结果。
131.在一个实施例中,上述刻写模块还可以用于基于第二存储分片下的可用备节点的数量确定wait命令指定的时间,wait命令指定的时间与可用备节点的数量成正相关关系;基于时间生成预设的wait命令。
132.在一个实施例中,上述分布式缓存系统的读写装置还可以包括反馈模块,该反馈模块用于基于第二存储分片下的主节点返回的可用备节点执行写操作的结果,确定针对写请求在第二存储分片下已同步备节点数量;在已同步备节点数量等于第二存储分片下的可用备节点的数量的情况下,向银行客户端反馈写请求对应的写操作同步成功结果。
133.在一个实施例中,上述获取模块还可以用于从注册中心获取分布式缓存系统下各主节点和各备节点对应的注册信息,注册中心用于存储分布式缓存系统下所有节点所在的银行园区信息;确定第一或第二存储分片的节点所处的园区。
134.上述分布式缓存系统的读写装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
135.在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图8所示。该计算机设备包括处理器、存储器、输入/输出接口(input/output,简称i/o)和通信接口。其中,处理器、存储器和输入/输出接口通过系统总线连接,通信接口通过输入/输出接口连接到系统总线。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储分布式缓存系统的读写数据。该计算机设备的输入/输出接口用于处理器与外部设备之间交换信息。该计算机设备的通信接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种分布式缓存系统的读写方法。
136.本领域技术人员可以理解,图8中示出的结构,仅仅是与本技术方案相关的部分结构的框图,并不构成对本技术方案所应用于其上的计算机设备的限定,具体的计算机设备
可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
137.在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
138.在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
139.在一个实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
140.需要说明的是,本技术所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
141.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(read-only memory,rom)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(reram)、磁变存储器(magnetoresistive random access memory,mram)、铁电存储器(ferroelectric random access memory,fram)、相变存储器(phase change memory,pcm)、石墨烯存储器等。易失性存储器可包括随机存取存储器(random access memory,ram)或外部高速缓冲存储器等。作为说明而非局限,ram可以是多种形式,比如静态随机存取存储器(static random access memory,sram)或动态随机存取存储器(dynamic random access memory,dram)等。本技术所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本技术所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
142.以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
143.以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本技术专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术的保护范围应以所附权利要求为准。
技术特征:
1.一种分布式缓存系统的读写方法,所述分布式缓存系统包括多个存储分片,且同一个存储分片下的主节点和备节点设置于不同的银行园区,其特征在于,所述方法包括:接收到银行客户端的请求,确定所述请求的请求类型,所述请求类型包括读请求或写请求;若为读请求,从所述多个存储分片中确定所述读请求对应的第一存储分片;所述第一存储分片包括一个主节点和至少一个备节点;在所述第一存储分片下的主节点位于当前园区之外的其他园区、备节点位于当前园区且为可用状态的情况下,将所述读请求发送至所述备节点,以从所述当前园区的所述备节点读取数据。2.根据权利要求1所述的方法,其特征在于,所述接收到银行客户端的请求,确定所述请求的请求类型之后,还包括:若为写请求,从所述多个存储分片中确定所述写请求对应的第二存储分片,所述第二存储分片包括一个主节点和至少一个备节点;获取所述第二存储分片下的可用备节点的数量;在所述可用备节点的数量大于等于1的情况下,将预设的wait命令加入所述写请求中,得到新的写请求;向所述第二存储分片下的主节点发送所述新的写请求,所述新的写请求用于指示所述第二存储分片下的主节点执行写操作,同时通知所述第二存储分片下的可用备节点执行同样的写操作并返回写操作执行结果,还用于指示所述第二存储分片下的主节点在所述wait命令指定的时间内返回所述可用备节点执行写操作的结果。3.根据权利要求2所述的方法,其特征在于,其中,各存储分片对应有一个全局唯一的槽位区间;所述若为读请求,从所述多个存储分片中确定所述读请求对应的第一存储分片,包括:若为读请求,根据所述读请求携带的key值做哈希处理,得到第一目标槽位,从所述多个存储分片中确定槽位区间包含所述第一目标槽位的第一存储分片;所述若为写请求,从所述多个存储分片中确定所述写请求对应的第二存储分片,包括:若为写请求,根据所述写请求携带的key值做哈希处理,得到第二目标槽位,从所述多个存储分片中确定槽位区间包含所述第二目标槽位的第二存储分片。4.根据权利要求1所述的方法,其特征在于,所述若为读请求,从所述多个存储分片中确定所述读请求对应的第一存储分片之后,还包括:在所述第一存储分片下的主节点位于当前园区、备节点位于所述当前园区之外的其他园区的情况下,将所述读请求发送至所述第一存储分片下的主节点,以从所述第一存储分片下的主节点读数据。5.根据权利要求1所述的方法,其特征在于,所述若为读请求,从所述多个存储分片中确定所述读请求对应的第一存储分片之后,还包括:在所述第一存储分片下的主节点位于当前园区之外的其他园区、备节点位于当前园区但为不可用状态的情况下,将所述读请求发送至所述其他园区的所述第一存储分片下的主节点,以从所述其他园区的所述第一存储分片下的主节点读数据。6.根根据权利要求2所述的方法,其特征在于,所述获取所述第二存储分片下的可用备
节点的数量之后,还包括:在所述第二存储分片下的可用备节点的数量为0的情况下,将所述写请求发送至所述第二存储分片下的主节点,所述写请求用于指示所述第二存储分片下的主节点执行写操作,并返回写操作执行结果。7.根据权利要求2所述的方法,其特征在于,所述在所述可用备节点的数量大于等于1的情况下,将预设的wait命令加入所述写请求中,得到新的写请求之前,还包括:基于所述第二存储分片下的可用备节点的数量确定所述wait命令指定的时间,所述wait命令指定的时间与所述可用备节点的数量成正相关关系;基于所述时间生成所述预设的wait命令。8.根据权利要求2所述的方法,其特征在于,所述返回所述可用备节点执行写操作的结果之后,还包括:基于所述第二存储分片下的主节点返回的所述可用备节点执行写操作的结果,确定针对所述写请求在所述第二存储分片下已同步备节点数量;在所述已同步备节点数量等于所述第二存储分片下的可用备节点的数量的情况下,向所述银行客户端反馈所述写请求对应的写操作同步成功结果。9.根据权利要求2所述的方法,其特征在于,还包括:从注册中心获取所述分布式缓存系统下各主节点和各备节点对应的注册信息,所述注册中心用于存储所述分布式缓存系统下所有节点所在的银行园区信息;基于所述注册信息,确定第一存储分片或第二存储分片下的节点所处的园区。10.一种分布式缓存系统的读写装置,其特征在于,所述装置包括:接收模块,用于接收到银行客户端的请求,确定所述请求的请求类型,所述请求类型包括读请求或写请求;定位模块,用于在所述请求类型为读请求的情况下,从所述多个存储分片中确定所述读请求对应的第一存储分片;所述第一存储分片包括一个主节点和至少一个备节点;读取模块,用于在所述第一存储分片下的主节点位于当前园区之外的其他园区、备节点位于当前园区且为可用状态的情况下,将所述读请求发送至所述备节点,以从所述当前园区的所述备节点读取数据。11.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至9中任一项所述的方法的步骤。12.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至9中任一项所述的方法的步骤。13.一种计算机程序产品,包括计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至9中任一项所述的方法的步骤。
技术总结
本申请涉及一种分布式缓存系统的读写方法、装置、计算机设备、存储介质和计算机程序产品,涉及数据存储读写技术领域,可用于金融科技领域或其他相关领域。所述方法包括:接收到银行客户端的请求,确定所述请求的请求类型,所述请求类型包括读请求或写请求;若为读请求,从所述多个存储分片中确定所述读请求对应的第一存储分片;所述第一存储分片包括一个主节点和至少一个备节点;在所述第一存储分片下的主节点位于当前园区之外的其他园区、备节点位于当前园区且为可用状态的情况下,将所述读请求发送至所述备节点,以从所述当前园区的所述备节点读取数据。采用本方法能够减少跨园区读数据的情形,优先读本园区数据,降低请求延迟。迟。迟。
技术研发人员:黄海鹏 武文斌 傅兵 朱文涛
受保护的技术使用者:中国工商银行股份有限公司
技术研发日:2023.06.26
技术公布日:2023/9/23
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
航空商城 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/