CN111506587A - 一种基于Redis的异地双活方法 - Google Patents
一种基于Redis的异地双活方法 Download PDFInfo
- Publication number
- CN111506587A CN111506587A CN202010242382.4A CN202010242382A CN111506587A CN 111506587 A CN111506587 A CN 111506587A CN 202010242382 A CN202010242382 A CN 202010242382A CN 111506587 A CN111506587 A CN 111506587A
- Authority
- CN
- China
- Prior art keywords
- data
- machine room
- message queue
- redis
- monitoring
- 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
- 238000000034 method Methods 0.000 title claims abstract description 24
- 238000012544 monitoring process Methods 0.000 claims abstract description 37
- 238000012545 processing Methods 0.000 claims description 5
- 238000004519 manufacturing process Methods 0.000 claims description 3
- 230000008569 process Effects 0.000 claims description 3
- 230000004044 response Effects 0.000 claims description 3
- 238000004891 communication Methods 0.000 abstract description 2
- 230000009545 invasion Effects 0.000 abstract description 2
- 230000001360 synchronised effect Effects 0.000 description 10
- 238000011161 development Methods 0.000 description 2
- 230000003139 buffering effect Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
Images
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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
- G06F16/275—Synchronous replication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种基于Redis的异地双活方法,包括机房一、机房二,每个机房均包括业务层、数据库、监听组件、消息队列、镜像数据组件;数据库用来存储其所在机房的业务层数据和所述监听组件传送的数据;监听组件用来监听并写入所述数据库、消息队列的更新数据;消息队列用来实现其所在机房监听组件与其他机房的镜像数据组件之间的通信;镜像数据组件用于在不同机房之间制作镜像数据。本发明所述的一种基于Redis的异地双活方法提供了一种业务侵入性低、可扩展性高并且实现方便的异地双活方法。
Description
技术领域
本发明属于计算机领域,尤其是涉及一种基于Redis的异地双活方法。
背景技术
Redis是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库。redis自2.8.0之后版本提供Keyspace Notifications功能,允许客户订阅Pub/Sub频道,以便以某种方式接收影响Redis数据集的事件。
随着业务的快速发展,对于很多公司来说,构建于单地域的技术体系架构,会面临诸如下面的多种问题:础设施的有限性限制了业务的可扩展性;机房、城市级别的故障灾害,影响服务的可持续性。异地多活在近年越来越多大型互联网公司采用的方法,几乎也是大型应用发展到一定阶段的必然选择。现有异地双活方法有通过DTS直接同步消息队列信息,再由消息队列进行数据分发,对业务有较大侵入性;还有通过读取组件对数据库进行两地数据同步,每个需要同步的地域都要设置一个读取组件可扩展性差,压力随着同步地域数增加而线性增加;还有采用Netflix开源实现的dynomite缓存***,通过代理层接收数据后写入各个需要同步的节点,节点需要部署Dyno Node节点、数据存在冗余同步、如果不冗余就需要接入方标准不一致,运维不统一、读写性能较原生差异较大,主要体现在写上,之间的差异随着节点数越多越严重。
发明内容
有鉴于此,本发明旨在克服上述现有技术中存在的缺陷,提出一种基于Redis的异地双活方法用以解决异地双活可扩展性差、消息同步一致性差的问题。
为达到上述目的,本发明的技术方法是这样实现的:
一种基于Redis的异地双活方法,包括如下步骤:
步骤1:机房一、机房二的业务层将数据写入所在机房的数据库;
步骤2:机房一的监听组件监听到数据库一的数据更新,并将更新的数据写入到消息队列;
步骤3:机房一的消息队列通过机房二的镜像数据组件将更新数据写入到机房二的消息队列中;
步骤4:机房二的监听组件监听到所在机房的消息队列更新数据,将所述更新数据写入数据库二中;
步骤5:业务二对数据库二进行数据获取,完成信息同步。
进一步的,所述步骤1、步骤2、步骤4、步骤5中利用的数据库为redis数据库。
进一步的,所述步骤2至步骤4中利用的消息队列采用的是kafka消息队列,步骤3利用的镜像数据组件采用MirrorMaker。
进一步的,步骤3中消息队列在数据同步过程中开启用于保证发送方只发送一次消息的幂等生产,同时设置用于保证接收方只接收一次消息的应答值为-1。
进一步的,步骤2中所述机房一的监听服务在监听到数据更新时对更新数据进行标记,步骤4中机房二的监听组件在监听到所述数据更新后对其标记进行判断,对于已经接收过的数据不做同步处理。
相对于现有技术,本发明具有以下优势:
(1)采用信息队列及其镜像数据组件来实现数据的同步,业务侵入性低,且可扩展性高;
(2)采用redis数据库监听服务获取数据,保证了同步信息的一致性。
附图说明
构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为本发明实施例所述的一种基于Redis的异地双活方法示意图。
具体实施方式
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
在本发明的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”等的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以通过具体情况理解上述术语在本发明中的具体含义。
下面将参考附图并结合实施例来详细说明本发明。
如图1所示,一种基于Redis的异地双活方法,包括机房一、机房二,每个机房均包括业务层、数据库、监听组件、消息队列、镜像数据组件;
数据库用来存储其所在机房的业务层数据和所述监听组件传送的数据;
监听组件用来监听并写入所述数据库、消息队列的更新数据,主要实现对Redis的更新、删除、添加及过期时间和消息的监听。
Redis的通知事件主要为键事件:键事件通知以keyevent@为前缀;所有命令都只在键值的被改动了之后,才会产生通知,比如删除foo会产生:
键事件通知:
>>“pmessage”,"__key*__:*","__keyevent@0__:set",“foo”
我们主要关注key,获取到key后可以通过key查询到value,进而获取全部数据实现同步,所以我们监听keyevent@为前缀的键事件,监听事件然后进行业务处理。
消息队列用来实现其所在机房监听组件与其他机房的镜像数据组件之间的通信,方法采取的是kafka及其同步组件MirrorMaker(镜像数据组件),Redis监听到的数据只需要写入到对应的同步topic(主题)即可,接下来MirrorMaker会针对多机房的topic同步策略进行数据同步;
镜像数据组件用于在不同机房之间制作镜像数据。
所述数据库为redis数据库。
所述消息队列采用的是kafka消息队列。
如图1所示,所述一种基于Redis的异地双活方法包括如下过程:
步骤一:每个机房的的业务层将数据写入所在机房的数据库;
步骤二:机房一的监听组件监听到数据库一的数据更新,并将更新的数据写入到消息队列;
步骤三:机房一的消息队列通过机房二的镜像数据组件将更新数据同步到机房二的消息队列中;
步骤四:机房二的监听组件监听到所在机房的消息队列更新数据,将所述更新数据写入数据库二中;
步骤五:业务二对数据库二进行访问完成信息同步。
所述消息队列在数据同步过程中开启kafka的enable.idempotence=true,即开启用于保证发送方只发送一次消息的幂等生产,同时设置用于保证接收方只接收一次消息的应答值为-1,即ack设置-1。
所述机房一的监听服务在监听到数据更新时对更新数据进行标记,机房二的监听组件在监听到所述数据更新后对其标记进行判断,对于已经接收过的数据不做同步处理。例如source字段,通过该字段标记为是从哪个机房同步过来,如果是发现数据从远端同步过来的,即使redis监听服务获取到该事件的key也会丢弃,不做同步处理,从而实现数据放缓,即防止当从机房一redis读取的数据,通过消息队列MQ同步到二机房后,机房二的监听服务又获取到,再次同步到机房一,导致数据循环复制问题。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (5)
1.一种基于Redis的异地双活方法,其特征在于包括如下步骤:
步骤1:机房一、机房二的业务层将数据写入所在机房的数据库;
步骤2:机房一的监听组件监听到数据库一的数据更新,并将更新的数据写入到消息队列;
步骤3:机房一的消息队列通过机房二的镜像数据组件将更新数据写入到机房二的消息队列中;
步骤4:机房二的监听组件监听到所在机房的消息队列更新数据,将所述更新数据写入数据库二中;
步骤5:业务二对数据库二进行数据获取,完成信息同步。
2.根据权利要求1所述的一种基于Redis的异地双活方法,其特征在于:所述步骤1、步骤2、步骤4、步骤5中利用的数据库为redis数据库。
3.根据权利要求1所述的一种基于Redis的异地双活方法,其特征在于:所述步骤2至步骤4中利用的消息队列采用的是kafka消息队列,步骤3利用的镜像数据组件采用MirrorMaker。
4.根据权利要求1所述的一种基于Redis的异地双活方法,其特征在于:步骤3中消息队列在数据同步过程中开启用于保证发送方只发送一次消息的幂等生产,同时设置用于保证接收方只接收一次消息的应答值为-1。
5.根据权利要求1所述的一种基于Redis的异地双活方法,其特征在于:步骤2中所述机房一的监听服务在监听到数据更新时对更新数据进行标记,步骤4中机房二的监听组件在监听到所述数据更新后对其标记进行判断,对于已经接收过的数据不做同步处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010242382.4A CN111506587A (zh) | 2020-03-31 | 2020-03-31 | 一种基于Redis的异地双活方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010242382.4A CN111506587A (zh) | 2020-03-31 | 2020-03-31 | 一种基于Redis的异地双活方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111506587A true CN111506587A (zh) | 2020-08-07 |
Family
ID=71864745
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010242382.4A Pending CN111506587A (zh) | 2020-03-31 | 2020-03-31 | 一种基于Redis的异地双活方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111506587A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113726877A (zh) * | 2021-08-26 | 2021-11-30 | 湖南快乐阳光互动娱乐传媒有限公司 | 一种跨机房集群存储数据的方法及*** |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1567238A (zh) * | 2003-06-09 | 2005-01-19 | 四川大学 | 基于Internet的文件镜像方法 |
CN104202375A (zh) * | 2014-08-22 | 2014-12-10 | 广州华多网络科技有限公司 | 同步数据的方法及*** |
CN107783975A (zh) * | 2016-08-24 | 2018-03-09 | 北京京东尚科信息技术有限公司 | 分布式数据库同步处理的方法和装置 |
CN108228397A (zh) * | 2016-12-22 | 2018-06-29 | 深圳市优朋普乐传媒发展有限公司 | 一种集群间跨机房同步的方法和装置 |
CN109284312A (zh) * | 2018-08-27 | 2019-01-29 | 山东威尔数据股份有限公司 | 一种异构数据库变更实时通知方法 |
CN110597910A (zh) * | 2019-09-12 | 2019-12-20 | 聚好看科技股份有限公司 | 一种异地数据同步方法、装置和*** |
CN110633320A (zh) * | 2018-05-30 | 2019-12-31 | 北京京东尚科信息技术有限公司 | 分布式数据服务的处理方法、***、设备及存储介质 |
-
2020
- 2020-03-31 CN CN202010242382.4A patent/CN111506587A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1567238A (zh) * | 2003-06-09 | 2005-01-19 | 四川大学 | 基于Internet的文件镜像方法 |
CN104202375A (zh) * | 2014-08-22 | 2014-12-10 | 广州华多网络科技有限公司 | 同步数据的方法及*** |
CN107783975A (zh) * | 2016-08-24 | 2018-03-09 | 北京京东尚科信息技术有限公司 | 分布式数据库同步处理的方法和装置 |
CN108228397A (zh) * | 2016-12-22 | 2018-06-29 | 深圳市优朋普乐传媒发展有限公司 | 一种集群间跨机房同步的方法和装置 |
CN110633320A (zh) * | 2018-05-30 | 2019-12-31 | 北京京东尚科信息技术有限公司 | 分布式数据服务的处理方法、***、设备及存储介质 |
CN109284312A (zh) * | 2018-08-27 | 2019-01-29 | 山东威尔数据股份有限公司 | 一种异构数据库变更实时通知方法 |
CN110597910A (zh) * | 2019-09-12 | 2019-12-20 | 聚好看科技股份有限公司 | 一种异地数据同步方法、装置和*** |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113726877A (zh) * | 2021-08-26 | 2021-11-30 | 湖南快乐阳光互动娱乐传媒有限公司 | 一种跨机房集群存储数据的方法及*** |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111581284B (zh) | 一种数据库高可用性方法、装置、***和存储介质 | |
US20090144220A1 (en) | System for storing distributed hashtables | |
CN110597910A (zh) | 一种异地数据同步方法、装置和*** | |
CN111143382A (zh) | 数据处理方法、***和计算机可读存储介质 | |
CN103701913A (zh) | 数据同步方法及装置 | |
CN108228581B (zh) | Zookeeper兼容通信方法、服务器及*** | |
CN103138912A (zh) | 数据同步方法及*** | |
CN112612851B (zh) | 多中心数据同步方法及装置 | |
CN114979158B (zh) | 一种资源监控方法、***、设备及计算机可读存储介质 | |
CN113094430B (zh) | 一种数据处理方法、装置、设备以及存储介质 | |
CN112417042A (zh) | 一种处理业务请求的方法和装置 | |
CN105787129B (zh) | 一种数据存储方法和电子设备 | |
US20100274761A1 (en) | System and method for reliable symmetric data synchronization | |
CN104580425A (zh) | 一种客户端数据同步方法及*** | |
CN111506587A (zh) | 一种基于Redis的异地双活方法 | |
CN101841425B (zh) | 一种无代理的网络备份方法、装置和*** | |
CN107528703B (zh) | 一种用于管理分布式***中节点设备的方法与设备 | |
CN116303789A (zh) | 多分片多副本数据库并行同步方法、装置及可读介质 | |
CN109257403B (zh) | 数据存储方法及设备、分布式存储*** | |
CN115964436A (zh) | 一种数据库集群管理的方法和装置 | |
CN105141687A (zh) | 一种生产消息的方法 | |
CN114051036A (zh) | 轨道交通信号***数据同步方法、装置、设备及存储介质 | |
WO2021212493A1 (zh) | 数据同步方法、装置、数据存储***及计算机可读介质 | |
CN114217986A (zh) | 数据处理方法、装置、设备、存储介质及产品 | |
CN112799835A (zh) | 一种分布式数据库***元数据的处理方法及*** |
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: 20200807 |
|
RJ01 | Rejection of invention patent application after publication |