CN109634978A - 数据读取一致性系统及方法 - Google Patents

数据读取一致性系统及方法 Download PDF

Info

Publication number
CN109634978A
CN109634978A CN201811550757.2A CN201811550757A CN109634978A CN 109634978 A CN109634978 A CN 109634978A CN 201811550757 A CN201811550757 A CN 201811550757A CN 109634978 A CN109634978 A CN 109634978A
Authority
CN
China
Prior art keywords
update
message
micro services
cloud platform
component
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.)
Pending
Application number
CN201811550757.2A
Other languages
English (en)
Inventor
王智
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Taima Information Network Technology Co Ltd
Original Assignee
Taima Information Network Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Taima Information Network Technology Co Ltd filed Critical Taima Information Network Technology Co Ltd
Priority to CN201811550757.2A priority Critical patent/CN109634978A/zh
Publication of CN109634978A publication Critical patent/CN109634978A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明一种数据读取一致性更新系统及方法,包括:第一微服务云平台接收数据更新请求并对对应的分库数据库进行数据更新,其后将数据更新的事件消息通过事务组件存储至事件数据库中,并向RocketMQ组件发送更新事件消息;其他微服务云平台监听RocketMQ组件接收到的消息,第二微服务云平台监听到消息为更新事件消息时,第二微服务云平台通过事务组件向事件数据库查询是否有该更新事件消息且该更新事件消息的状态为未完成,在有该更新事件消息且状态为未完成时第二微服务云平台对对应的分库数据库进行数据更新,并通过事务组件将该更新事件消息的状态更新为已完成;事务组件用于将更新成功的确认消息发送给RocketMQ组件。

Description

数据读取一致性系统及方法
技术领域
本发明涉及数据读取一致性技术领域,特别是涉及一种数据读取一致性系统及方法。
背景技术
对于一个微服务云平台来说,数据量日益增大带来的是数据库压力激增的问题。为了缓解数据库压力,水平分库和垂直分库就成为了许多公司的选择。不同的业务使用不同的数据库,但在一些特殊场合又必须同时对不同数据库的数据进行新增和更改,由此又带来了事务一致性的问题。
发明内容
本发明针对现有技术存在的问题和不足,提供一种数据读取一致性系统及方法。
本发明是通过下述技术方案来解决上述技术问题的:
本发明提供一种数据读取一致性更新系统,其特点在于,其包括多个分库数据库、用于与分库数据库一一对应的微服务云平台、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组件和事务组件来完成,对业务透明对代码侵入较小。事务组件也具备扩展性,能够对重试失败多次的事件消息发送警告。
虽然以上描述了本发明的具体实施方式,但是本领域的技术人员应当理解,这些仅是举例说明,本发明的保护范围是由所附权利要求书限定的。本领域的技术人员在不背离本发明的原理和实质的前提下,可以对这些实施方式做出多种变更或修改,但这些变更和修改均落入本发明的保护范围。

Claims (10)

1.一种数据读取一致性更新系统,其特征在于,其包括多个分库数据库、用于与分库数据库一一对应的微服务云平台、RocketMQ组件、事务组件和事件数据库;
所述微服务云平台中的一个微服务云平台作为第一微服务云平台用于接收数据更新请求并对对应的分库数据库进行数据更新,其后将数据更新的事件消息通过事务组件存储至事件数据库中,并向RocketMQ组件发送更新事件消息;
所述微服务云平台中的其他微服务云平台用于监听RocketMQ组件接收到的消息,在其他微服务云平台中的一个微服务云平台作为第二微服务云平台监听到消息为更新事件消息时,第二微服务云平台通过事务组件向事件数据库查询是否有该更新事件消息且该更新事件消息的状态为未完成,在有该更新事件消息且状态为未完成时第二微服务云平台对对应的分库数据库进行数据更新,并通过事务组件将事件数据库中的该更新事件消息的状态更新为已完成;
所述事务组件用于将更新成功的确认消息发送给RocketMQ组件。
2.如权利要求1所述的数据读取一致性更新系统,其特征在于,所述事务组件用于定时从事件数据库中取出状态为未完成的更新事件消息并将状态为未完成的更新事件消息发送给RocketMQ组件重新执行更新。
3.如权利要求2所述的数据读取一致性更新系统,其特征在于,所述事务组件用于判断该更新事件消息的重试次数是否超出一设定阈值,在为是时通过短信或邮件方式发送通知信息给相关运维人员。
4.如权利要求1所述的数据读取一致性更新系统,其特征在于,所述事件数据库采用MongoDB或者Redis非关系型数据库。
5.如权利要求1所述的数据读取一致性更新系统,其特征在于,所述第一微服务云平台用于在对对应的分库数据库进行数据更新之前向RocketMQ组件发送预告消息;
所述RocketMQ组件用于在收到预告消息后定期向第一微服务云平台发送该预告消息是否执行完成的确认信息。
6.一种数据读取一致性更新方法,其特征在于,其利用如权利要求1所述的系统实现,其包括以下步骤:
S1、所述第一微服务云平台接收数据更新请求;
S2、所述第一微服务云平台对对应的分库数据库进行数据更新;
S3、所述第一微服务云平台将数据更新的事件消息通过事务组件存储至事件数据库中;
S4、所述第一微服务云平台向RocketMQ组件发送更新事件消息;
S5、所述第二微服务云平台监听RocketMQ组件接收到的消息且监听到消息为更新事件消息;
S6、所述第二微服务云平台通过事务组件向事件数据库查询是否有该更新事件消息且该更新事件消息的状态为未完成;
S7、所述第二微服务云平台查询出有该更新事件消息且状态为未完成时对对应的分库数据库进行数据更新;
S8、所述第二微服务云平台通过事务组件将事件数据库中的该更新事件消息的状态更新为已完成;
S9、所述事务组件将更新成功的确认消息发送给RocketMQ组件。
7.如权利要求6所述的数据读取一致性更新方法,其特征在于,在步骤S7中数据更新失败时,所述事务组件定时从事件数据库中取出状态为未完成的更新事件消息并将状态为未完成的更新事件消息发送给RocketMQ组件重新执行更新。
8.如权利要求7所述的数据读取一致性更新方法,其特征在于,所述事务组件判断该更新事件消息的重试次数是否超出一设定阈值,在为是时通过短信或邮件方式发送通知信息给相关运维人员。
9.如权利要求6所述的数据读取一致性更新方法,其特征在于,所述事件数据库采用MongoDB或者Redis非关系型数据库。
10.如权利要求6所述的数据读取一致性更新方法,其特征在于,在步骤S2之前,所述第一微服务云平台在对对应的分库数据库进行数据更新之前向RocketMQ组件发送预告消息;
所述RocketMQ组件在收到预告消息后定期向第一微服务云平台发送该预告消息是否执行完成的确认信息。
CN201811550757.2A 2018-12-18 2018-12-18 数据读取一致性系统及方法 Pending CN109634978A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811550757.2A CN109634978A (zh) 2018-12-18 2018-12-18 数据读取一致性系统及方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811550757.2A CN109634978A (zh) 2018-12-18 2018-12-18 数据读取一致性系统及方法

Publications (1)

Publication Number Publication Date
CN109634978A true CN109634978A (zh) 2019-04-16

Family

ID=66075176

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811550757.2A Pending CN109634978A (zh) 2018-12-18 2018-12-18 数据读取一致性系统及方法

Country Status (1)

Country Link
CN (1) CN109634978A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110784532A (zh) * 2019-10-25 2020-02-11 北京天润融通科技股份有限公司 双向数据同步方法及系统

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101364997A (zh) * 2008-10-09 2009-02-11 阿里巴巴集团控股有限公司 基于网络的分布式事务处理方法和系统
US8065280B2 (en) * 2003-12-17 2011-11-22 International Business Machines Corporation Method, system and computer program product for real-time data integrity verification
CN106155775A (zh) * 2015-04-28 2016-11-23 阿里巴巴集团控股有限公司 消息处理方法、设备及系统
CN106407366A (zh) * 2016-09-09 2017-02-15 浪潮软件股份有限公司 一种分布式系统数据提取方法
CN106777026A (zh) * 2016-12-08 2017-05-31 用友网络科技股份有限公司 支持微服务架构事务最终一致性的方法、装置及系统
CN106993023A (zh) * 2017-03-01 2017-07-28 北京交通大学 微服务架构下的分布式事务解决方法
CN107465767A (zh) * 2017-09-29 2017-12-12 网宿科技股份有限公司 一种数据同步的方法和系统
CN107861823A (zh) * 2017-11-23 2018-03-30 国云科技股份有限公司 一种基于微服务架构的系统保障数据最终一致性的方法

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8065280B2 (en) * 2003-12-17 2011-11-22 International Business Machines Corporation Method, system and computer program product for real-time data integrity verification
CN101364997A (zh) * 2008-10-09 2009-02-11 阿里巴巴集团控股有限公司 基于网络的分布式事务处理方法和系统
CN106155775A (zh) * 2015-04-28 2016-11-23 阿里巴巴集团控股有限公司 消息处理方法、设备及系统
CN106407366A (zh) * 2016-09-09 2017-02-15 浪潮软件股份有限公司 一种分布式系统数据提取方法
CN106777026A (zh) * 2016-12-08 2017-05-31 用友网络科技股份有限公司 支持微服务架构事务最终一致性的方法、装置及系统
CN106993023A (zh) * 2017-03-01 2017-07-28 北京交通大学 微服务架构下的分布式事务解决方法
CN107465767A (zh) * 2017-09-29 2017-12-12 网宿科技股份有限公司 一种数据同步的方法和系统
CN107861823A (zh) * 2017-11-23 2018-03-30 国云科技股份有限公司 一种基于微服务架构的系统保障数据最终一致性的方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
高尔夫GOLF: "不同微服务独立数据库,如何保障微服务架构下的数据一致性", 《CSDN》 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110784532A (zh) * 2019-10-25 2020-02-11 北京天润融通科技股份有限公司 双向数据同步方法及系统
CN110784532B (zh) * 2019-10-25 2021-09-07 北京天润融通科技股份有限公司 双向数据同步方法及系统

Similar Documents

Publication Publication Date Title
CN106777026B (zh) 支持微服务架构事务最终一致性的方法、装置及系统
US7895602B2 (en) System and article of manufacture for duplicate message elimination during recovery when multiple threads are delivering messages from a message store to a destination queue
CN108228814B (zh) 数据同步方法及装置
US6996583B2 (en) Real-time database update transaction with disconnected relational database clients
KR100943110B1 (ko) 거래 시스템
US7934116B2 (en) Disaster recover/continuity of business adaptive solution framework
CN110535713B (zh) 监控管理系统以及监控管理方法
CN105893395B (zh) 分布式事务的消息回查方法及其系统
CN104268061A (zh) 一种适用于虚拟机的存储状态监控机制
US20110137865A1 (en) Method for managing storage service
CN103595569A (zh) 一种网络管理系统中的告警信息入库的处理方法
CN104579765A (zh) 一种集群系统的容灾方法和装置
CN102317913A (zh) 一种事务恢复方法和事务恢复装置
CN108075930B (zh) 一种基于分布式架构的容灾备份系统
CN116917880A (zh) 分布式数据库远程备份
CN103678051A (zh) 一种集群数据处理系统中的在线故障容错方法
US20100146334A1 (en) Fault tolerant update propagation to views
CN109634978A (zh) 数据读取一致性系统及方法
CN108833451B (zh) 基于国产安全管控平台的多级管控系统及管控方法
CN112698969A (zh) 一种基于消息落库的mq消息可靠性投递解决方法
CN101727366B (zh) 进行利用了日志的远程复制的计算机系统
CN104750849B (zh) 用于维护基于树形结构的目录关系的方法和系统
CN111404737A (zh) 一种容灾处理方法以及相关装置
KR20080072813A (ko) 상용 서버를 사용하는 무상태 아키텍처 내에서의 트랜잭션보호
US20160224405A1 (en) Contacting remote support (call home) and reporting a catastrophic event with supporting documentation

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
RJ01 Rejection of invention patent application after publication

Application publication date: 20190416

RJ01 Rejection of invention patent application after publication