本发明涉及数据缓存,特别涉及一种分布式缓存和数据存储一致性处理系统及方法。
背景技术:
1、传统数据库系统在高并发负载的情况下,容易触发系统性能瓶颈。为了降低数据库压力,通常采用分布式缓存系统与数据库结合使用。数据通常采用双写的方式,同时写入分布式缓存和数据库系统。数据查询操作会优先读取分布式缓存,如果发生缓存未命中,则读取数据库,并将新数据回填到分布式缓存中。该方案在发生节点宕机的情况,容易产生缓存数据和数据库数据的不一致性等问题,比如查询操作读取到缓存的数据,但在数据库中不存在,从而产生脏读。
技术实现思路
1、基于此,本申请实施例提供了一种分布式缓存和数据存储一致性处理系统及方法,可以解决了解决分布式缓存和数据库系统的一致性问题。
2、第一方面,提供了一种分布式缓存和数据存储一致性处理系统,该系统包括计算层、缓存层、日志层以及存储层,其中:
3、计算层,用于解析用户的sql请求,并转化成事务请求发送给缓存层;还用于接收缓存层数据,并执行相应sql计算;将查询结果返回给用户;
4、缓存层,用于通过协调节点将所述事务请求所对应访问的数据分片进行分解,并发送到对应的缓存工作节点进行执行;其中,所述事务请求对应多个数据分片,每个数据分片对应一个缓存节点;
5、日志层,用于根据缓存层处理结果生成处理过程记录;具体地,通过启动日志集群,对于集群中的每个日志节点独立初始化日志状态机;其中,日志状态机的初始状态为空;将日志集群中的多个日志节点形成至少一个raft组,对于每个raft组通过raft协议选取当前raft组的主节点,其他日志节点作为从节点;所述raft组用以处理缓存节点的写日志请求;
6、存储层,用于基于所生成处理过程记录,将处理过程中产生的基线数据和冷数据异步写入到存储节点。
7、可选地,所述缓存层还包括:
8、启动缓存集群,对于集群中每个缓存节点初始化工作线程池,每个工作线程负责一个数据分片的数据;缓存节点之间建立rpc stream,用来接受远端其他缓存节点的数据请求;
9、缓存节点的每个工作线程还作为事务协调者,处理计算层发来的事务请求。具体来说,工作线程循环处理计算层的事务请求和所属数据分片的数据请求;
10、将缓存集群的多个缓存节点形成一个缓存raft组,通过raft协议选取缓存raft组的主节点,其他缓存节点作为从节点;所述缓存raft组用以提供数据写入和查询的服务;具体的,raft从节点不需要存储数据分片的实际数据,当且仅当raft主节点发生故障,从节点被选举成主节点时,执行日志重放过程,从日志层获取没有写入存储层的增量数据;针对该数据分片的基线数据,新的主节点可以从存储层获取。
11、可选地,当用户的sql请求为插入请求时,所述系统还包括:
12、计算层对所述插入请求进行解析,生成key和record键值对作为待插入数据的内存格式;
13、缓存层将key和record写入事务状态机的本地写集合,并向计算层返回插入语句成功响应;将事务状态机设置为加锁操作,并针对本地写集合中所有的key,计算key所属于的数据分片,并向数据分片发送加锁请求;当加锁请求处理完成,将事务状态机设置为生成全局提交时间戳操作;
14、可选地,所述全局提交时间戳大于节点的本地时间戳、加锁key的最近读验证时间戳、加锁key的提交时间戳中的任意一个时间戳。
15、可选地,所述系统还包括:
16、在缓存层生成提交时间戳后,将事务状态机设置为写日志操作;将本地写集合中的key和record进行序列化,并写入到日志;
17、当写日志操作成功,更新事务状态为已提交,缓存层将本地写集合中的key和record,上传到本地或远端的数据分片,并执行释放写锁请求。
18、可选地,当写日志操作失败,更新事务状态为已回滚,缓存层将本地写集合中的key,向本地或者远端数据分片,发送释放锁请求,完成事务清理工作。
19、可选地,当用户的sql请求为查询请求时,所述系统还包括:
20、计算层对所述查询请求进行解析,确定最优扫描策略;其中,所述扫描策略至少包括顺序扫描和索引扫描;
21、其中,针对主键索引扫描,计算层发送主键key到缓存层协调节点;
22、缓存层确定主键key所在的数据分片节点,并向该节点发送读数据请求;并将读数据请求的结果返回给缓存层协调节点。
23、可选地,针对二级索引扫描和顺序扫描,计算层发送扫描起始键key,
24、缓存层协调节点读取起始键所在的数据分片,并进行遍历;
25、当读取完所有数据,或者遇到索引扫描的终止条件,发送扫描关闭请求。
26、可选地,所述缓存层还包括:
27、将事务状态机设置为生成全局提交时间戳操作,将事务状态机设置为读验证操作;将本地读集合中的key及其时间戳信息,发送给数据分片;并将事务的提交状态返回给计算层。
28、第二方面,提供了一种分布式缓存和数据存储一致性处理方法,实现与上述第一方面任一所述的分布式缓存和数据存储一致性处理系统,该方法包括:
29、解析用户的sql请求,并转化成事务请求发送给缓存层;
30、通过协调节点将所述事务请求所对应访问的数据分片进行分解,并发送到对应的缓存工作节点进行执行;其中,所述事务请求对应多个数据分片,每个数据分片对应一个缓存节点;
31、根据缓存层处理结果生成处理过程记录;具体地,通过启动日志集群,对于集群中的每个日志节点独立初始化日志状态机;其中,日志状态机的初始状态为空;将日志集群中的多个日志节点形成至少一个raft组,对于每个raft组通过raft协议选取当前raft组的主节点,其他日志节点作为从节点;所述raft组用以处理缓存节点的写日志请求;
32、基于所生成处理过程记录,将处理过程中产生的基线数据和冷数据异步写入到存储节点。
33、本申请实施例提供的技术方案中,包括计算层、缓存层、日志层以及存储层,其中:计算层解析用户的sql请求,并转化成事务请求发送给缓存层;缓存层将事务请求进行分解为多个数据分片,并通过各个缓存节点对多个数据分片进行处理,并将处理后的热数据进行缓存;日志层根据缓存层处理结果生成处理过程记录;存储层基于所生成处理过程记录,将处理过程中产生的基线数据和冷数据异步写入到存储节点。可以看出,本申请的有益效果在于具有缓存持久化,事务并发读写的特点。
1.一种分布式缓存和数据存储一致性处理系统,其特征在于,所述系统包括计算层、缓存层、日志层以及存储层,其中:
2.根据权利要求1所述的分布式缓存和数据存储一致性处理系统,其特征在于,所述缓存层还包括:
3.根据权利要求1所述的分布式缓存和数据存储一致性处理系统,其特征在于,当用户的sql请求为插入请求时,所述系统还包括:
4.根据权利要求3所述的分布式缓存和数据存储一致性处理系统,其特征在于,所述全局提交时间戳大于节点的本地时间戳、加锁key的最近读验证时间戳、加锁key的提交时间戳中的任意一个时间戳。
5.根据权利要求3所述的分布式缓存和数据存储一致性处理系统,其特征在于,所述系统还包括:
6.根据权利要求5所述的分布式缓存和数据存储一致性处理系统,其特征在于,当写日志操作失败,更新事务状态为已回滚,缓存层将本地写集合中的key,向本地或者远端数据分片,发送释放锁请求,完成事务清理工作。
7.根据权利要求1所述的分布式缓存和数据存储一致性处理系统,其特征在于,当用户的sql请求为查询请求时,所述系统还包括:
8.根据权利要求7所述的分布式缓存和数据存储一致性处理系统,其特征在于,针对二级索引扫描和顺序扫描,计算层发送扫描起始键key,
9.根据权利要求8所述的分布式缓存和数据存储一致性处理系统,其特征在于,所述缓存层还包括:
10.一种分布式缓存和数据存储一致性处理方法,应用于如权利要求1-9所述的分布式缓存和数据存储一致性处理系统中,其特征在于,所述方法包括: