数据读取一致性系统及方法与流程

文档序号:17442258发布日期:2019-04-17 04:55阅读:322来源:国知局
数据读取一致性系统及方法与流程

本发明涉及数据读取一致性技术领域,特别是涉及一种数据读取一致性系统及方法。



背景技术:

对于一个微服务云平台来说,数据量日益增大带来的是数据库压力激增的问题。为了缓解数据库压力,水平分库和垂直分库就成为了许多公司的选择。不同的业务使用不同的数据库,但在一些特殊场合又必须同时对不同数据库的数据进行新增和更改,由此又带来了事务一致性的问题。



技术实现要素:

本发明针对现有技术存在的问题和不足,提供一种数据读取一致性系统及方法。

本发明是通过下述技术方案来解决上述技术问题的:

本发明提供一种数据读取一致性更新系统,其特点在于,其包括多个分库数据库、用于与分库数据库一一对应的微服务云平台、rocketmq组件、事务组件和事件数据库;

所述微服务云平台中的一个微服务云平台作为第一微服务云平台用于接收数据更新请求并对对应的分库数据库进行数据更新,其后将数据更新的事件消息通过事务组件存储至事件数据库中,并向rocketmq组件发送更新事件消息;

所述微服务云平台中的其他微服务云平台用于监听rocketmq组件接收到的消息,在其他微服务云平台中的一个微服务云平台作为第二微服务云平台监听到消息为更新事件消息时,第二微服务云平台通过事务组件向事件数据库查询是否有该更新事件消息且该更新事件消息的状态为未完成,在有该更新事件消息且状态为未完成时第二微服务云平台对对应的分库数据库进行数据更新,并通过事务组件将事件数据库中的该更新事件消息的状态更新为已完成;

所述事务组件用于将更新成功的确认消息发送给rocketmq组件。

较佳地,所述事务组件用于定时从事件数据库中取出状态为未完成的更新事件消息并将状态为未完成的更新事件消息发送给rocketmq组件重新执行更新。

较佳地,所述事务组件用于判断该更新事件消息的重试次数是否超出一设定阈值,在为是时通过短信或邮件方式发送通知信息给相关运维人员。

较佳地,所述事件数据库采用mongodb或者redis非关系型数据库。

较佳地,所述第一微服务云平台用于在对对应的分库数据库进行数据更新之前向rocketmq组件发送预告消息;

所述rocketmq组件用于在收到预告消息后定期向第一微服务云平台发送该预告消息是否执行完成的确认信息。

本发明还提供一种数据读取一致性更新方法,其特点在于,其利用上述的系统实现,其包括以下步骤:

s1、所述第一微服务云平台接收数据更新请求;

s2、所述第一微服务云平台对对应的分库数据库进行数据更新;

s3、所述第一微服务云平台将数据更新的事件消息通过事务组件存储至事件数据库中;

s4、所述第一微服务云平台向rocketmq组件发送更新事件消息;

s5、所述第二微服务云平台监听rocketmq组件接收到的消息且监听到消息为更新事件消息;

s6、所述第二微服务云平台通过事务组件向事件数据库查询是否有该更新事件消息且该更新事件消息的状态为未完成;

s7、所述第二微服务云平台查询出有该更新事件消息且状态为未完成时对对应的分库数据库进行数据更新;

s8、所述第二微服务云平台通过事务组件将事件数据库中的该更新事件消息的状态更新为已完成;

s9、所述事务组件将更新成功的确认消息发送给rocketmq组件。

较佳地,在步骤s7中数据更新失败时,所述事务组件定时从事件数据库中取出状态为未完成的更新事件消息并将状态为未完成的更新事件消息发送给rocketmq组件重新执行更新。

较佳地,所述事务组件判断该更新事件消息的重试次数是否超出一设定阈值,在为是时通过短信或邮件方式发送通知信息给相关运维人员。

较佳地,所述事件数据库采用mongodb或者redis非关系型数据库。

较佳地,在步骤s2之前,所述第一微服务云平台在对对应的分库数据库进行数据更新之前向rocketmq组件发送预告消息;

所述rocketmq组件在收到预告消息后定期向第一微服务云平台发送该预告消息是否执行完成的确认信息。

在符合本领域常识的基础上,上述各优选条件,可任意组合,即得本发明各较佳实例。

本发明的积极进步效果在于:

本发明解决了数据分库带来的数据读取一致性问题,能够同时对不同数据库的数据进行新增和更改。业务透明对代码侵入较小,事务组件也具备扩展性,能够对重试失败多次的事件消息发送警告。

附图说明

图1为本发明较佳实施例的数据读取一致性更新系统的示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

如图1所示,本实施例提供一种数据读取一致性更新系统,其包括多个分库数据库、用于与分库数据库一一对应的微服务云平台、rocketmq组件、事务组件和事件数据库,如图1中微服务云平台a1对应分库数据库db1,微服务云平台a2对应分库数据库db2,事件数据库即图1中的事件db。

微服务云平台a1用于接收数据更新请求并对对应的分库数据库db1进行数据更新,其后将数据更新的事件消息通过事务组件存储至事件db中,并向rocketmq组件发送更新事件消息。

微服务云平台a2用于监听rocketmq组件接收到的消息且在监听到消息为更新事件消息时,通过事务组件向事件db查询是否有该更新事件消息且该更新事件消息的状态为未完成,在有该更新事件消息且状态为未完成时微服务云平台a2对对应的分库数据库db2进行数据更新,并通过事务组件将事件db中的该更新事件消息的状态更新为已完成。

所述事务组件用于将更新成功的确认消息发送给rocketmq组件。

本实施例还提供一种数据读取一致性更新方法,其利用上述的系统实现,其包括以下步骤:

s1、微服务云平台a1接收数据更新请求;

s2、微服务云平台a1对对应的分库数据库db1进行数据更新;

s3、微服务云平台a1将数据更新的事件消息通过事务组件存储至事件db中;

s4、微服务云平台a1向rocketmq组件发送更新事件消息;

s5、微服务云平台a2监听rocketmq组件接收到的消息且监听到消息为更新事件消息;

s6、微服务云平台a2通过事务组件向事件db查询是否有该更新事件消息且该更新事件消息的状态为未完成;

s7、微服务云平台a2查询出有该更新事件消息且状态为未完成时对对应的分库数据库db2进行数据更新;

s8、微服务云平台a2通过事务组件将事件db中的该更新事件消息的状态更新为已完成;

s9、所述事务组件将更新成功的确认消息发送给rocketmq组件。

本方案具有消息幂等性。假设因为网络延迟导致步骤s3重复发送消息,那么微服务云平台a2就会收到2次更新消息,导致数据错误。为了防止此错误发生,在本发明中需要将消息持久化并记录执行状态,即将消息存入事件db中且注明消息是否完成,对于存在且未被执行完成的消息,微服务云平台a2才会进行更新操作。

本方案具有事件补偿机制。假设微服务云平台a2在收到某个更新事件之后更新失败,此时需要有事件补偿机制来重试更新操作。在本方案中该项任务交由事务组件完成。事务组件本身是个微服务,除了负责维护事件db的数据之外,还会定时从事件db中取出更新未完成的消息,并将其发送给rocketmq重新执行更新。

由于对事件消息进行了持久化处理,因此可以维护事件消息重试的次数。当重试次数超过阀值后可以通过邮件、短信等方式通知系统相关运维人员,通过手工或线下的方式对这些事件进行处理。即事务组件判断该更新事件消息的重试次数是否超出一设定阈值,在为是时通过短信或邮件方式发送通知信息给相关运维人员。

为了解决步骤s2更新数据库db1成功但步骤s3事件消息写入事件db失败的问题,本发明中事件db往往采用mongodb或者redis等非关系型数据库存储。为了保证原子性,一般会先执行步骤s2再执行步骤s3,因为步骤s2为关系型数据库,当步骤s3失败时会回滚之前的事务。

为了解决步骤s3执行成功但步骤s4向rocketmq发送消息失败的问题,在微服务云平台a1开始更新db1之前,基于rocketmq本身的特性会提前发送一条预告消息给rocketmq组件。步骤s4实际上是对这条预告消息的确认,告知rocketmq组件这条预告消息已经执行完毕。对于那些没有收到确认的预告消息,rocketmq组件会定期向微服务云平台a1发送确认,要求其告知rocketmq组件预告消息是否执行完成。由于步骤s3已经将事件消息进行了持久化,所以当rocketmq组件询问时能够从事件db中查询出对应的状态。

步骤s5至s8执行成功,但步骤s9发送消息失败导致消息重复消费的问题。由于rocketmq的特性,步骤s4发送的消息如果在步骤s9没有收到反馈,rocketmq组件会重试步骤s5。由于步骤s6会在更新db2之前会从事务组件中确认消息状态,因而可以避免消息重复消费的问题。

步骤s5至步骤s8中任何一环出现失败。步骤s5至步骤s7是一个本地事务,可以保证任何一环出现问题时进行回滚。由于步骤s8是最后执行的,因此步骤s8出现失败也能将步骤s5至步骤s7的事务回滚。

步骤s1、步骤s2和步骤s7是普通的业务逻辑,其余步骤都利用rocketmq组件和事务组件来完成,对业务透明对代码侵入较小。事务组件也具备扩展性,能够对重试失败多次的事件消息发送警告。

虽然以上描述了本发明的具体实施方式,但是本领域的技术人员应当理解,这些仅是举例说明,本发明的保护范围是由所附权利要求书限定的。本领域的技术人员在不背离本发明的原理和实质的前提下,可以对这些实施方式做出多种变更或修改,但这些变更和修改均落入本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1