CN116383227B - 一种分布式缓存和数据存储一致性处理系统及方法 - Google Patents
一种分布式缓存和数据存储一致性处理系统及方法 Download PDFInfo
- Publication number
- CN116383227B CN116383227B CN202310650724.XA CN202310650724A CN116383227B CN 116383227 B CN116383227 B CN 116383227B CN 202310650724 A CN202310650724 A CN 202310650724A CN 116383227 B CN116383227 B CN 116383227B
- Authority
- CN
- China
- Prior art keywords
- cache
- data
- layer
- request
- log
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 63
- 238000012545 processing Methods 0.000 title claims abstract description 54
- 238000013500 data storage Methods 0.000 title claims abstract description 26
- 239000012634 fragment Substances 0.000 claims abstract description 67
- 230000008569 process Effects 0.000 claims abstract description 38
- 238000004364 calculation method Methods 0.000 claims abstract description 23
- 238000003780 insertion Methods 0.000 claims description 5
- 230000037431 insertion Effects 0.000 claims description 5
- 238000004140 cleaning Methods 0.000 claims description 4
- 238000003672 processing method Methods 0.000 claims description 3
- 230000004044 response Effects 0.000 claims description 3
- 230000002085 persistent effect Effects 0.000 abstract description 3
- 238000002955 isolation Methods 0.000 description 7
- 230000001364 causal effect Effects 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 230000009191 jumping Effects 0.000 description 2
- 230000002688 persistence Effects 0.000 description 2
- 239000000243 solution Substances 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000012508 change request Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 238000002347 injection Methods 0.000 description 1
- 239000007924 injection Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 238000010200 validation analysis Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2336—Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
- G06F16/2343—Locking methods, e.g. distributed locking or locking implementation details
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2358—Change logging, detection, and notification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本申请公开了一种分布式缓存和数据存储一致性处理系统及方法,系统包括计算层、缓存层、日志层以及存储层,其中:计算层解析用户的SQL请求,并转化成事务请求发送给缓存层,计算层还用于接收缓存层数据,并执行相应SQL计算;将查询结果返回给用户;缓存层通过协调节点将事务请求所对应访问的数据分片进行分解,并发送到对应的缓存工作节点进行执行;日志层根据缓存层处理结果生成处理过程记录;存储层基于所生成处理过程记录,将处理过程中产生的基线数据和冷数据异步写入到存储节点。本申请具有缓存持久化,事务并发读写以及缓存和数据存储的对外一致性的特点。
Description
技术领域
本发明涉及数据缓存技术领域,特别涉及一种分布式缓存和数据存储一致性处理系统及方法。
背景技术
传统数据库系统在高并发负载的情况下,容易触发系统性能瓶颈。为了降低数据库压力,通常采用分布式缓存系统与数据库结合使用。数据通常采用双写的方式,同时写入分布式缓存和数据库系统。数据查询操作会优先读取分布式缓存,如果发生缓存未命中,则读取数据库,并将新数据回填到分布式缓存中。该方案在发生节点宕机的情况,容易产生缓存数据和数据库数据的不一致性等问题,比如查询操作读取到缓存的数据,但在数据库中不存在,从而产生脏读。
发明内容
基于此,本申请实施例提供了一种分布式缓存和数据存储一致性处理系统及方法,可以解决了解决分布式缓存和数据库系统的一致性问题。
第一方面,提供了一种分布式缓存和数据存储一致性处理系统,该系统包括计算层、缓存层、日志层以及存储层,其中:
计算层,用于解析用户的SQL请求,并转化成事务请求发送给缓存层;还用于接收缓存层数据,并执行相应SQL计算;将查询结果返回给用户;
缓存层,用于通过协调节点将所述事务请求所对应访问的数据分片进行分解,并发送到对应的缓存工作节点进行执行;其中,所述事务请求对应多个数据分片,每个数据分片对应一个缓存节点;
日志层,用于根据缓存层处理结果生成处理过程记录;具体地,通过启动日志集群,对于集群中的每个日志节点独立初始化日志状态机;其中,日志状态机的初始状态为空;将日志集群中的多个日志节点形成至少一个Raft组,对于每个Raft组通过Raft协议选取当前Raft组的主节点,其他日志节点作为从节点;所述Raft组用以处理缓存节点的写日志请求;
存储层,用于基于所生成处理过程记录,将处理过程中产生的基线数据和冷数据异步写入到存储节点。
可选地,所述缓存层还包括:
启动缓存集群,对于集群中每个缓存节点初始化工作线程池,每个工作线程负责一个数据分片的数据;缓存节点之间建立RPC stream,用来接受远端其他缓存节点的数据请求;
缓存节点的每个工作线程还作为事务协调者,处理计算层发来的事务请求。具体来说,工作线程循环处理计算层的事务请求和所属数据分片的数据请求;
将缓存集群的多个缓存节点形成一个缓存Raft组,通过Raft协议选取缓存Raft组的主节点,其他缓存节点作为从节点;所述缓存Raft组用以提供数据写入和查询的服务;具体的,Raft从节点不需要存储数据分片的实际数据,当且仅当Raft主节点发生故障,从节点被选举成主节点时,执行日志重放过程,从日志层获取没有写入存储层的增量数据;针对该数据分片的基线数据,新的主节点可以从存储层获取。
可选地,当用户的SQL请求为插入请求时,所述系统还包括:
计算层对所述插入请求进行解析,生成Key和Record键值对作为待插入数据的内存格式;
缓存层将Key和Record写入事务状态机的本地写集合,并向计算层返回插入语句成功响应;将事务状态机设置为加锁操作,并针对本地写集合中所有的Key,计算Key所属于的数据分片,并向数据分片发送加锁请求;当加锁请求处理完成,将事务状态机设置为生成全局提交时间戳操作;
可选地,所述全局提交时间戳大于节点的本地时间戳、加锁Key的最近读验证时间戳、加锁Key的提交时间戳中的任意一个时间戳。
可选地,所述系统还包括:
在缓存层生成提交时间戳后,将事务状态机设置为写日志操作;将本地写集合中的Key和Record进行序列化,并写入到日志;
当写日志操作成功,更新事务状态为已提交,缓存层将本地写集合中的Key和Record,上传到本地或远端的数据分片,并执行释放写锁请求。
可选地,当写日志操作失败,更新事务状态为已回滚,缓存层将本地写集合中的Key,向本地或者远端数据分片,发送释放锁请求,完成事务清理工作。
可选地,当用户的SQL请求为查询请求时,所述系统还包括:
计算层对所述查询请求进行解析,确定最优扫描策略;其中,所述扫描策略至少包括顺序扫描和索引扫描;
其中,针对主键索引扫描,计算层发送主键Key到缓存层协调节点;
缓存层确定主键Key所在的数据分片节点,并向该节点发送读数据请求;并将读数据请求的结果返回给缓存层协调节点。
可选地,针对二级索引扫描和顺序扫描,计算层发送扫描起始键Key,
缓存层协调节点读取起始键所在的数据分片,并进行遍历;
当读取完所有数据,或者遇到索引扫描的终止条件,发送扫描关闭请求。
可选地,所述缓存层还包括:
将事务状态机设置为生成全局提交时间戳操作,将事务状态机设置为读验证操作;将本地读集合中的Key及其时间戳信息,发送给数据分片;并将事务的提交状态返回给计算层。
第二方面,提供了一种分布式缓存和数据存储一致性处理方法,实现与上述第一方面任一所述的分布式缓存和数据存储一致性处理系统,该方法包括:
解析用户的SQL请求,并转化成事务请求发送给缓存层;
通过协调节点将所述事务请求所对应访问的数据分片进行分解,并发送到对应的缓存工作节点进行执行;其中,所述事务请求对应多个数据分片,每个数据分片对应一个缓存节点;
根据缓存层处理结果生成处理过程记录;具体地,通过启动日志集群,对于集群中的每个日志节点独立初始化日志状态机;其中,日志状态机的初始状态为空;将日志集群中的多个日志节点形成至少一个Raft组,对于每个Raft组通过Raft协议选取当前Raft组的主节点,其他日志节点作为从节点;所述Raft组用以处理缓存节点的写日志请求;
基于所生成处理过程记录,将处理过程中产生的基线数据和冷数据异步写入到存储节点。
本申请实施例提供的技术方案中,包括计算层、缓存层、日志层以及存储层,其中:计算层解析用户的SQL请求,并转化成事务请求发送给缓存层;缓存层将事务请求进行分解为多个数据分片,并通过各个缓存节点对多个数据分片进行处理,并将处理后的热数据进行缓存;日志层根据缓存层处理结果生成处理过程记录;存储层基于所生成处理过程记录,将处理过程中产生的基线数据和冷数据异步写入到存储节点。可以看出,本申请的有益效果在于具有缓存持久化,事务并发读写的特点。
附图说明
为了更清楚地说明本发明的实施方式或现有技术中的技术方案,下面将对实施方式或现有技术描述中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是示例性的,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图引伸获得其它的实施附图。
图1为本申请实施例提供的数据基层的数据写入流程图;
图2为本申请实施例提供的数据基层的数据读取流程图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在本发明的描述中,术语“包括”、“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包括了一系列步骤或单元的过程、方法、系统、产品或设备不必限于已明确列出的那些步骤或单元,而是还可包含虽然并未明确列出的但对于这些过程、方法、产品或设备固有的其它步骤或单元,或者基于本发明构思进一步的优化方案所增加的步骤或单元。
本申请实施例提供的一种分布式缓存和数据存储一致性处理系统包括计算层、缓存层、日志层以及存储层,其中:
计算层,用于解析用户的SQL请求,并转化成事务请求发送给缓存层。
计算层负责解析用户的SQL请求,并转化成事务请求(TxRequest)发送给缓存层。计算层还用于在缓存层处理完事务请求后,接收缓存层数据,并执行相应SQL计算;将查询结果返回给用户。
缓存层,用于通过协调节点将事务请求所对应访问的数据分片进行分解,并发送到对应的缓存工作节点进行执行;其中,事务请求对应多个数据分片,每个数据分片对应一个缓存节点。
缓存层是一个支持事务的分布式缓存系统。数据被基于哈希(Hash)或者范围(Range)的策略打散成很多分片,每个缓存节点缓存数据分片,并针对数据分片上的事务请求进行处理。
在本申请中,数据被分片存储到不同的缓存节点,每个缓存节点负责一个数据分片。而不是缓存将事务请求分解为数据分片。相反,一个事务请求可能需要访问多个数据分片上的数据,缓存层的协调节点会将事务请求基于需要访问的数据分片进行分解,并发送到对应的缓存工作节点进行执行。
在本申请的缓存层中,首先启动缓存集群,对于集群中每个缓存节点初始化工作线程池,每个工作线程负责一个数据分片的数据;缓存节点之间建立RPC stream,用来接受远端其他缓存节点的数据请求;
缓存节点的每个工作线程还作为事务协调者,处理计算层发来的事务请求。具体来说,工作线程循环处理计算层的事务请求和所属数据分片的数据请求;
将缓存集群的多个缓存节点形成一个缓存Raft组,通过Raft协议选取缓存Raft组的主节点,其他缓存节点作为从节点;缓存Raft组用以提供数据写入和查询的服务;具体的,Raft从节点不需要存储数据分片的实际数据,当且仅当Raft主节点发生故障,从节点被选举成主节点时,执行日志重放过程,从日志层获取没有写入存储层的增量数据;针对该数据分片的基线数据,新的主节点可以从存储层获取。
将缓存节点组成Raft组,保证了分布式缓存和数据存储一致性处理系统的高可用性,任何一个缓存节点故障,都不会造成数据丢失,也不会产生数据的不一致性。具体来说,假设新插入数据(100, ‘a’),(200, ‘b’)和正在插入的数据(300, ‘c’)属于数据分片S1,其中(100, ‘a’)已经写入存储层,但是(200, ‘b’)只保留在缓存节点A的内存中,(300,‘c’)的插入请求由节点D发起,在节点A上已经成功加了行锁lock_300,但还没有写日志。此时,如果节点A发生故障,则Raft协议会自动选举新的主节点B负责处理数据分片S1的数据请求。节点B会从日志层获取(200, ‘b’),并写入节点B内存。考虑一下三种情况,i. 用户读取Key100,节点B没有缓存该条数据,从存储层读取到(100, ‘a’);ii.用户读取Key200,节点B直接从缓存中返回(200, ‘b’);iii. 用户插入Key300为(300, ‘g’),此时由于节点B上没有行锁lock_300,用户插入语句成功。前两种情况都没有数据一致性问题。第三种情况为了不与之前节点D上的插入事务(300, ‘c’)产生冲突,需要将(300, ‘c’)的写日志操作标记为失败。日志层检查加锁时节点的Raft term和写日志时节点的Raft term是否一致,如果不一致则标记写日志操作为失败。情况iii中因为针对Key300加锁时和写日志时发生了Raft主节点切换,Raft term产生变化,因此插入事务(300, ‘c’)会被回滚,从而保证和新插入事务(300, ‘g’)没有冲突,保证了系统的一致性。
日志层,用于根据缓存层处理结果生成处理过程记录。
日志层负责缓存层新写入数据的持久化,因为缓存是易失的,所以事务的写入和更改请求需要通过日志层保证持久化。具体地,通过启动日志集群,对于集群中的每个日志节点独立初始化日志状态机;其中,日志状态机的初始状态为空;将日志集群中的多个日志节点形成至少一个Raft组,对于每个Raft组通过Raft协议选取当前Raft组的主节点,其他日志节点作为从节点;Raft组用以处理缓存节点的写日志请求。
存储层,用于基于所生成处理过程记录,将处理过程中产生的基线数据和冷数据异步写入到存储节点。
存储层负责存储基线数据,缓存层缓存的是热数据和新写入的数据,但缓存层的内存容量有限,因此冷数据和基线数据会异步写入到存储层。
可以看出,一致性系统有机统一了缓存和底层数据存储,实现了分布式缓存和存储系统的对外一致性。下面详细描述系统各模块的启动步骤,以及系统中数据写入和读取步骤。
在本申请可选的实施例中,上述系统还包括启动流程,具体包括:
S1,启动存储集群。
S2,启动日志集群,每个日志节点独立初始化日志状态机:日志状态机以预写日志的方式记录了所有写入操作,保证了数据的持久化。日志状态机的初始状态为空
S3,多个日志节点组成一个Raft组,通过Raft协议选取Raft组的主节点,对外提供日志服务,其他日志节点作为从节点,保证高可用。当主节点发生宕机时,通过Raft共识算法选取新的主节点,并通知所有事务节点,日志节点Raft组的主节点发生变更。
S4,日志集群根据规模,可以存在多个Raft组,用来分摊缓存节点的写日志请求,提高系统吞吐,降低系统延时。
S5,启动缓存集群。每个缓存节点初始化工作线程池,每个工作线程负责一个分片的数据。缓存节点之间建立RPC stream,用来接受远端其他缓存节点的数据请求。恢复还没有写入存储层的数据,向日志服务发送重放请求,日志服务把属于该缓存节点的重放日志数据发送给缓存节点。缓存节点依次重放接收到的日志,完成数据恢复。之后,缓存节点可以对外服务,接受计算层发来的事务请求。
S6,多个缓存节点组成一个缓存Raft组,通过Raft协议选取缓存Raft组的主节点,对外提供数据写入和查询的服务,其他缓存节点作为从节点,保证高可用。为了节约内存资源,缓存Raft组的状态机为空,缓存从节点不需要占用内存资源,只有当主节点发生故障时,才切换到从节点。实际部署中,每一个缓存节点都属于某一个缓存Raft组的主节点,同时属于多个其他缓存Raft组的从节点。该部署方案实现了内存成本和高可用之间的平衡。启动计算集群,计算集群是无状态的,启动完成后可以接收客户端SQL请求,进行SQL解析和优化工作,生成事务请求,向缓存层读取和写入数据。
如图1,在本申请可选的实施例中,当用户的SQL请求为插入请求时,给出了数据写入流程,具体地包括:
客户端发送SQL插入语句到计算层,后者负责语法解析,查询优化,并生成Key和Record键值对作为待插入数据的内存格式。
计算层调用InitTxRequest(初始化事务请求),在缓存层开启事务状态机。
计算层调用PKReadRequest(主键读请求)接口,在缓存层中检查Key的唯一性。
如果Key非唯一,表示违反主键约束,直接返回“重复主键”错误。
如果Key通过唯一性检查,可以进入下一步插入阶段。
计算层调用InsertTxRequest(插入请求),将Key和Record写入缓存层。
缓存层处理InsertTxRequest(插入请求),将Key和Record写入事务状态机的本地写集合。注意,本地写集合中的数据对其他事务不可见。并通知计算层插入完毕。
计算层返回客户端SQL插入语句成功。
如果客户端继续发送SQL插入语句,跳至数据写入流程开始步骤。
否则,客户端发送Commit(提交)语句到计算层,计算层调用CommitTxRequest(提交请求),通知缓存层提交事务。
缓存层处理CommitTxRequest(提交请求),首先将事务状态机设置为加锁操作,并针对本地写集合中所有的Key,计算Key所属于的数据分片,向本地或远端数据分片发送加锁请求。
缓存层等待所有Key的加锁请求完成。如果任何Key的加锁请求失败,回滚事务,并通知用户事务提交失败。
如果所有加锁请求顺利完成,缓存层将事务状态机设置为生成全局提交时间戳操作。缓存层会根据加锁请求返回值,确保提交时间戳的全局因果有序性。这里因果有序性是指提交时间戳一定大于以下任意一个时间戳:节点的本地时间戳,所有加锁Key的最近读验证时间戳,所有加锁Key的提交时间戳。
缓存层生成提交时间戳后,将事务状态机设置为写日志操作。将本地写集合中的Key和Record进行序列化,并写入到日志层。
如果写日志操作成功,更新事务状态为已提交。
如果写日志操作失败,更新事务状态为已回滚。
针对已提交事务,缓存层将本地写集合中的Key和Record,上传到本地或远端的数据分片,并执行释放写锁请求。至此,该数据对其他事务可见。
针对已回滚事务,缓存层将本地写集合中的Key,向本地或者远端数据分片,发送释放锁请求,完成事务清理工作。
缓存层将事务的提交状态返回给计算层
计算层返回客户端事务提交成功或者失败。
检查点(checkpointer)服务会定期从数据分片获取新插入数据,并将这些数据异步写入到底层存储层。
如图2,在本申请可选的实施例中,当用户的SQL请求为查询请求时,给出了数据读取流程,具体地包括:
客户端发送SQL查询语句到计算层,后者负责语法解析,选择最优执行计划,确定顺序扫描还是索引扫描。
计算层调用InitTxRequest接口,(初始化事务请求),在缓存层开启事务状态机。
针对主键索引扫描,计算层调用PkReadTxRequest接口(主键读请求),发送主键Key到缓存层协调节点。
缓存层协调节点处理PkReadTxRequest,首先确定主键Key所在的数据分片节点,并向该节点发送读数据请求。
数据分片所在的缓存层工作节点处理读数据请求,如果数据分片不包含主键对应的Entry,即缓存未命中,则从底层存储层读取对应数据页,并加载到数据分片中。
如果数据分片包含主键对应的Entry,但是Entry状态是被删除,则返回主键不存在。对于事务隔离级别是可重复读的情况,对Entry加读锁。
如果数据分片包含主键对应的Entry,且Entry状态正常,则返回对应Record。对于事务隔离级别是可重复读的情况,对Entry加读锁。
读数据请求的结果返回给缓存层协调节点。
如果事务隔离级别是读已提交,缓存层协调节点直接将读请求结果返回给计算层。
如果事务隔离级别是可重复读,缓存层协调节点将结果Record写入到本地读集合,用于提交时的事务冲突检测。
计算层返回客户端SQL查询语句成功。
如果客户端继续发送SQL查询语句,跳至数据读取流程开始步骤。
针对二级索引扫描和顺序扫描,计算层调用ScanTxRequest接口(扫描请求),发送扫描起始键Key。
缓存层协调节点处理ScanTxRequest(扫描请求),读取起始键所在的数据分片,并进行遍历。对于事务隔离级别是可重复读的情况,需要对遍历的每一个Entry加读锁。
如果遍历过程中,数据页不在数据分片的内存中,则从底层存储层读取对应数据页。
当读取到一个Batch的数据后,如果事务隔离级别是读已提交,则直接将扫描结果返回计算层。
如果事务隔离级别是可重复读,缓存层协调节点首先将结果Record写入到本地读集合,之后再将扫描结果返回计算层。
计算层消费完一批数据后,继续发起ScanTxRequest(扫描请求),从缓存层获取更多数据。
当计算层读取完所有数据,或者遇到索引扫描的终止条件,发送ScanCloseTxRequest(扫描关闭请求)。
缓存层处理ScanCloseTxRequest,如果最近一批扫描结果中存在没有被计算层处理的Record,则从本地读集合中清理这批多余的Record。注:计算层处理过的Record需要保留在本地读集合中,用来保证事务的并发控制。
计算层返回客户端SQL查询语句成功。
如果客户端继续发送SQL查询语句,跳至开始步骤。
否则,客户端发送Commit(提交)语句到计算层,计算层调用CommitTxRequest(提交请求),通知缓存层提交事务。
缓存层处理CommitTxRequest,因为事务不存在写入操作(写入操作参考数据写入流程),缓存层将事务状态机设置为生成全局提交时间戳操作。数据基层会根据之前本地读集合的信息,确保提交时间戳的全局因果有序性。
缓存层生成提交时间戳后,将事务状态机设置为读验证(Validation)操作。将本地读集合中的Key及其时间戳信息,发送给数据分片。
如果数据分片中对应的数据提交时间戳发生变化或者存在写锁,说明存在冲突,事务提交失败,更新事务状态为已回滚。
如果不存在冲突否则释放读锁,并更新事务状态为已提交。
针对已回滚事务,缓存层将本地读集合中的Key,向本地或者远端数据分片,发送释放读锁请求,完成事务清理工作。
缓存层将事务的提交状态返回给计算引擎,并通知客户端事务。
本申请实施例提供的一种分布式缓存和数据存储一致性处理方法,实现与上述分布式缓存和数据存储一致性处理系统,包括:
解析用户的SQL请求,并转化成事务请求发送给缓存层;
将事务请求进行分解为多个数据分片,并通过各个缓存节点对多个数据分片进行处理,并将处理后的热数据进行缓存;
根据缓存层处理结果生成处理过程记录;
基于所生成处理过程记录,将处理过程中产生的基线数据和冷数据异步写入到存储节点。
关于分布式缓存和数据存储一致性处理方法的具体限定可以参见上文中对于分布式缓存和数据存储一致性处理系统的限定,在此不再赘述。上述分布式缓存和数据存储一致性处理系统中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (8)
1.一种分布式缓存和数据存储一致性处理系统,其特征在于,所述系统包括计算层、缓存层、日志层以及存储层,其中:
计算层,用于解析用户的SQL请求,并转化成事务请求发送给缓存层;还用于接收缓存层数据,并执行相应SQL计算;将查询结果返回给用户;
缓存层,用于通过协调节点将所述事务请求所对应访问的数据分片进行分解,并发送到对应的缓存工作节点进行执行;其中,所述事务请求对应多个数据分片,每个数据分片对应一个缓存节点;
日志层,用于根据缓存层处理结果生成处理过程记录;具体地,通过启动日志集群,对于集群中的每个日志节点独立初始化日志状态机;其中,日志状态机的初始状态为空;将日志集群中的多个日志节点形成至少一个Raft组,对于每个Raft组通过Raft协议选取当前Raft组的主节点,其他日志节点作为从节点;所述Raft组用以处理缓存节点的写日志请求;
存储层,用于基于所生成处理过程记录,将处理过程中产生的基线数据和冷数据异步写入到存储节点;
所述缓存层还包括:
启动缓存集群,对于集群中每个缓存节点初始化工作线程池,每个工作线程负责一个数据分片的数据;缓存节点之间建立RPCstream,用来接受远端其他缓存节点的数据请求;
缓存节点的每个工作线程还作为事务协调者,处理计算层发来的事务请求;具体来说,工作线程循环处理计算层的事务请求和所属数据分片的数据请求;
将缓存集群的多个缓存节点形成一个缓存Raft组,通过Raft协议选取缓存Raft组的主节点,其他缓存节点作为从节点;所述缓存Raft组用以提供数据写入和查询的服务;具体的,Raft从节点不需要存储数据分片的实际数据,当且仅当Raft主节点发生故障,从节点被选举成主节点时,执行日志重放过程,从日志层获取没有写入存储层的增量数据;针对该数据分片的基线数据,新的主节点可以从存储层获取;
当用户的SQL请求为插入请求时,所述系统还包括:
计算层对所述插入请求进行解析,生成Key和Record键值对作为待插入数据的内存格式;
缓存层将Key和Record写入事务状态机的本地写集合,并向计算层返回插入语句成功响应;将事务状态机设置为加锁操作,并针对本地写集合中所有的Key,计算Key所属于的数据分片,并向数据分片发送加锁请求;当加锁请求处理完成,将事务状态机设置为生成全局提交时间戳操作。
2.根据权利要求1所述的分布式缓存和数据存储一致性处理系统,其特征在于,所述全局提交时间戳大于节点的本地时间戳、加锁Key的最近读验证时间戳、加锁Key的提交时间戳中的任意一个时间戳。
3.根据权利要求1所述的分布式缓存和数据存储一致性处理系统,其特征在于,所述系统还包括:
在缓存层生成提交时间戳后,将事务状态机设置为写日志操作;将本地写集合中的Key和Record进行序列化,并写入到日志;
当写日志操作成功,更新事务状态为已提交,缓存层将本地写集合中的Key和Record,上传到本地或远端的数据分片,并执行释放写锁请求。
4.根据权利要求3所述的分布式缓存和数据存储一致性处理系统,其特征在于,当写日志操作失败,更新事务状态为已回滚,缓存层将本地写集合中的Key,向本地或者远端数据分片,发送释放锁请求,完成事务清理工作。
5.根据权利要求1所述的分布式缓存和数据存储一致性处理系统,其特征在于,当用户的SQL请求为查询请求时,所述系统还包括:
计算层对所述查询请求进行解析,确定最优扫描策略;其中,所述扫描策略至少包括顺序扫描和索引扫描;
其中,针对主键索引扫描,计算层发送主键Key到缓存层协调节点;
缓存层确定主键Key所在的数据分片节点,并向该节点发送读数据请求;并将读数据请求的结果返回给缓存层协调节点。
6.根据权利要求5所述的分布式缓存和数据存储一致性处理系统,其特征在于,针对二级索引扫描和顺序扫描,计算层发送扫描起始键Key,
缓存层协调节点读取起始键所在的数据分片,并进行遍历;
当读取完所有数据,或者遇到索引扫描的终止条件,发送扫描关闭请求。
7.根据权利要求6所述的分布式缓存和数据存储一致性处理系统,其特征在于,所述缓存层还包括:
将事务状态机设置为生成全局提交时间戳操作,将事务状态机设置为读验证操作;将本地读集合中的Key及其时间戳信息,发送给数据分片;并将事务的提交状态返回给计算层。
8.一种分布式缓存和数据存储一致性处理方法,应用于如权利要求1-7所述的分布式缓存和数据存储一致性处理系统中,其特征在于,所述方法包括:
解析用户的SQL请求,并转化成事务请求发送给缓存层;
通过协调节点将所述事务请求所对应访问的数据分片进行分解,并发送到对应的缓存工作节点进行执行;其中,所述事务请求对应多个数据分片,每个数据分片对应一个缓存节点;还包括:启动缓存集群,对于集群中每个缓存节点初始化工作线程池,每个工作线程负责一个数据分片的数据;缓存节点之间建立RPCstream,用来接受远端其他缓存节点的数据请求;缓存节点的每个工作线程还作为事务协调者,处理计算层发来的事务请求;具体来说,工作线程循环处理计算层的事务请求和所属数据分片的数据请求;将缓存集群的多个缓存节点形成一个缓存Raft组,通过Raft协议选取缓存Raft组的主节点,其他缓存节点作为从节点;所述缓存Raft组用以提供数据写入和查询的服务;具体的,Raft从节点不需要存储数据分片的实际数据,当且仅当Raft主节点发生故障,从节点被选举成主节点时,执行日志重放过程,从日志层获取没有写入存储层的增量数据;针对该数据分片的基线数据,新的主节点可以从存储层获取;
根据缓存层处理结果生成处理过程记录;具体地,通过启动日志集群,对于集群中的每个日志节点独立初始化日志状态机;其中,日志状态机的初始状态为空;将日志集群中的多个日志节点形成至少一个Raft组,对于每个Raft组通过Raft协议选取当前Raft组的主节点,其他日志节点作为从节点;所述Raft组用以处理缓存节点的写日志请求;
基于所生成处理过程记录,将处理过程中产生的基线数据和冷数据异步写入到存储节点;
当用户的SQL请求为插入请求时,所述方法还包括:对所述插入请求进行解析,生成Key和Record键值对作为待插入数据的内存格式;将Key和Record写入事务状态机的本地写集合,并向计算层返回插入语句成功响应;将事务状态机设置为加锁操作,并针对本地写集合中所有的Key,计算Key所属于的数据分片,并向数据分片发送加锁请求;当加锁请求处理完成,将事务状态机设置为生成全局提交时间戳操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310650724.XA CN116383227B (zh) | 2023-06-05 | 2023-06-05 | 一种分布式缓存和数据存储一致性处理系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310650724.XA CN116383227B (zh) | 2023-06-05 | 2023-06-05 | 一种分布式缓存和数据存储一致性处理系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116383227A CN116383227A (zh) | 2023-07-04 |
CN116383227B true CN116383227B (zh) | 2023-08-15 |
Family
ID=86971471
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310650724.XA Active CN116383227B (zh) | 2023-06-05 | 2023-06-05 | 一种分布式缓存和数据存储一致性处理系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116383227B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116755847B (zh) * | 2023-08-17 | 2023-11-14 | 北京遥感设备研究所 | 一种缓解锁冲突的日志预分析及事务管理方法 |
CN117708179B (zh) * | 2024-02-02 | 2024-05-03 | 成都深瑞同华科技有限公司 | 电力综合监控系统测点数据缓存方法、装置、设备及介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102831156A (zh) * | 2012-06-29 | 2012-12-19 | 浙江大学 | 一种云计算平台上的分布式事务处理方法 |
CN113391885A (zh) * | 2021-06-18 | 2021-09-14 | 电子科技大学 | 一种分布式事务处理系统 |
CN116132530A (zh) * | 2022-12-30 | 2023-05-16 | 广东亿迅科技有限公司 | 一种基于Netty框架应用Raft算法实现MQTT Broker服务器的方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8275815B2 (en) * | 2008-08-25 | 2012-09-25 | International Business Machines Corporation | Transactional processing for clustered file systems |
-
2023
- 2023-06-05 CN CN202310650724.XA patent/CN116383227B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102831156A (zh) * | 2012-06-29 | 2012-12-19 | 浙江大学 | 一种云计算平台上的分布式事务处理方法 |
CN113391885A (zh) * | 2021-06-18 | 2021-09-14 | 电子科技大学 | 一种分布式事务处理系统 |
CN116132530A (zh) * | 2022-12-30 | 2023-05-16 | 广东亿迅科技有限公司 | 一种基于Netty框架应用Raft算法实现MQTT Broker服务器的方法 |
Non-Patent Citations (1)
Title |
---|
开源软件中的大数据管理技术;江天;乔嘉林;黄向东;王建民;;科技导报(第03期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN116383227A (zh) | 2023-07-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109739935B (zh) | 数据读取方法、装置、电子设备以及存储介质 | |
CN116383227B (zh) | 一种分布式缓存和数据存储一致性处理系统及方法 | |
US11372890B2 (en) | Distributed database transaction protocol | |
US20210209092A1 (en) | Client-driven commit of distributed write transactions in a database environment | |
CN111143389B (zh) | 事务执行方法、装置、计算机设备及存储介质 | |
US20190325055A1 (en) | Parallel Replication Across Formats | |
EP1915668B1 (en) | Database fragment cloning and management | |
US5966706A (en) | Local logging in a distributed database management computer system | |
US5778388A (en) | Method of processing a synchronization point in a database management system to assure a database version using update logs from accumulated transactions | |
US7702660B2 (en) | I/O free recovery set determination | |
JP4586019B2 (ja) | 非故障ノードによる並列な回復 | |
US6976022B2 (en) | Method and mechanism for batch processing transaction logging records | |
US11442961B2 (en) | Active transaction list synchronization method and apparatus | |
US11841844B2 (en) | Index update pipeline | |
US11132350B2 (en) | Replicable differential store data structure | |
CN109710388B (zh) | 数据读取方法、装置、电子设备以及存储介质 | |
US20140330767A1 (en) | Scalable distributed transaction processing system | |
US9672244B2 (en) | Efficient undo-processing during data redistribution | |
Spirovska et al. | Wren: Nonblocking reads in a partitioned transactional causally consistent data store | |
CN113391885A (zh) | 一种分布式事务处理系统 | |
CN109783578B (zh) | 数据读取方法、装置、电子设备以及存储介质 | |
CN114661816A (zh) | 数据同步方法、装置、电子设备、存储介质 | |
US20230315713A1 (en) | Operation request processing method, apparatus, device, readable storage medium, and system | |
EP3377970B1 (en) | Multi-version removal manager | |
US7051051B1 (en) | Recovering from failed operations in a database system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |