CN109634978A - 数据读取一致性系统及方法 - Google Patents
数据读取一致性系统及方法 Download PDFInfo
- 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
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组件在收到预告消息后定期向第一微服务云平台发送该预告消息是否执行完成的确认信息。
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)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110784532A (zh) * | 2019-10-25 | 2020-02-11 | 北京天润融通科技股份有限公司 | 双向数据同步方法及系统 |
Citations (8)
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 | 国云科技股份有限公司 | 一种基于微服务架构的系统保障数据最终一致性的方法 |
-
2018
- 2018-12-18 CN CN201811550757.2A patent/CN109634978A/zh active Pending
Patent Citations (8)
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)
Title |
---|
高尔夫GOLF: "不同微服务独立数据库,如何保障微服务架构下的数据一致性", 《CSDN》 * |
Cited By (2)
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 |