CN112235405A - 分布式存储***及数据投放方法 - Google Patents
分布式存储***及数据投放方法 Download PDFInfo
- Publication number
- CN112235405A CN112235405A CN202011101781.5A CN202011101781A CN112235405A CN 112235405 A CN112235405 A CN 112235405A CN 202011101781 A CN202011101781 A CN 202011101781A CN 112235405 A CN112235405 A CN 112235405A
- Authority
- CN
- China
- Prior art keywords
- redis
- server
- instance
- data
- target
- 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
- 238000003860 storage Methods 0.000 title claims abstract description 120
- 238000002716 delivery method Methods 0.000 title claims abstract description 15
- 238000013507 mapping Methods 0.000 claims description 86
- 238000000034 method Methods 0.000 claims description 53
- 238000012544 monitoring process Methods 0.000 claims description 30
- 238000013500 data storage Methods 0.000 claims description 8
- 238000004891 communication Methods 0.000 claims description 7
- 230000000694 effects Effects 0.000 abstract description 3
- 238000013508 migration Methods 0.000 description 50
- 230000005012 migration Effects 0.000 description 49
- 230000008569 process Effects 0.000 description 33
- 230000009467 reduction Effects 0.000 description 11
- 238000013467 fragmentation Methods 0.000 description 10
- 238000006062 fragmentation reaction Methods 0.000 description 10
- 230000001360 synchronised effect Effects 0.000 description 6
- 230000008602 contraction Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 238000012423 maintenance Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000002829 reductive effect Effects 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 238000012795 verification Methods 0.000 description 3
- 230000001174 ascending effect Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 230000002452 interceptive effect Effects 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000008094 contradictory effect Effects 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 238000013480 data collection Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q30/00—Commerce
- G06Q30/02—Marketing; Price estimation or determination; Fundraising
- G06Q30/0241—Advertisements
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1095—Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Business, Economics & Management (AREA)
- Accounting & Taxation (AREA)
- Development Economics (AREA)
- Strategic Management (AREA)
- Finance (AREA)
- Game Theory and Decision Science (AREA)
- Entrepreneurship & Innovation (AREA)
- Economics (AREA)
- Marketing (AREA)
- Physics & Mathematics (AREA)
- General Business, Economics & Management (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种分布式存储***,包括:Redis代理服务器、Redis服务器和符合预定部署条件的服务器,Redis服务器包括多个Redis实例,服务器包括多个实例,多个Redis实例用于存储目标数据;Redis代理服务器用于将Redis实例中的目标数据发送到发布订阅消息***中;服务器中的实例用于消费所述发布订阅消息***中的目标数据,以使Redis服务器与所述服务器存储有相同的目标数据;Redis代理服务器还用于接收数据读取请求,基于所述数据读取请求中的标识,读取Redis实例中的目标数据或实例中的目标数据。本发明还公开了一种数据投放方法;利用Redis服务器与服务器主备设置的方式,相对于主备机都使用部署费用高的同配置Redis服务器,达到低成本高可用的效果。
Description
技术领域
本发明涉及分布式存储技术领域,尤其涉及一种分布式存储***及数据投放方法。
背景技术
随着互联网技术的发展,广告业务需要将海量数据进行精准快速在线投放,实现低响应延迟。为此,需要一种分布式***来实现精准快速的在线投放,现有技术中不管是Redis方案或是codis方案,其部署的分布式存储***为了实现高可用,都存在部署成本高的问题。
上述内容仅用于辅助理解本发明的技术方案,并不代表承认上述内容是现有技术。
发明内容
本发明的主要目的在于提供一种分布式存储***及数据投放方法,旨在解决现有的分布式存储***为了实现高可用而部署成本高的技术问题。
为实现上述目的,本发明提供一种分布式存储***,所述分布式存储***包括:服务器集群和Redis代理服务器;其中,
所述服务器集群包括Redis服务器和符合预定部署条件的服务器,所述Redis服务器包括多个Redis实例,所述服务器包括多个实例,所述多个Redis实例用于存储目标数据;其中,所述Redis代理服务器中配置有多个逻辑槽,所述多个逻辑槽与所述Redis实例和/或实例存在映射关系;
所述Redis代理服务器用于将所述Redis实例中的目标数据发送到发布订阅消息***中;所述服务器中的实例用于消费所述发布订阅消息***中的目标数据,以使所述Redis服务器与所述服务器存储有相同的目标数据;
所述Redis代理服务器还用于接收数据读取请求,基于所述数据读取请求中的标识,读取所述Redis实例中的目标数据或所述实例中的目标数据。
可选地,所述服务器为LMDB服务器,所述实例为LMDB实例;
所述Redis代理服务器中配置有多个虚拟组以及多个逻辑槽,所述多个逻辑槽与所述多个虚拟组存在映射关系,所述多个虚拟组与所述Redis实例和/或LMDB实例存在映射关系;
所述分布式存储***还包括协调服务器,所述协调服务器中存储有映射关系表,所述映射关系表中包括所述多个逻辑槽与所述多个虚拟组存在映射关系,以及所述多个虚拟组与所述Redis实例和/或LMDB实例存在映射关系。
可选地,所述Redis代理服务器还用于接收数据读取请求,基于所述数据读取请求中的标识对应的值获得对应的目标逻辑槽,基于所述映射关系表获得与所述目标逻辑槽存在映射关系的目标虚拟组,并从所述Redis服务器中读取与所述目标虚拟组存在映射关系的Redis实例中的目标数据或从所述LMDB服务器中读取与所述目标虚拟组存在映射关系的LMDB实例中的目标数据。
可选地,所述Redis代理服务器还用于接收数据写入请求,基于所述数据写入请求中的标识获得目标逻辑槽,基于所述映射关系表获得与所述目标逻辑槽存在映射关系的目标虚拟组,并将所述数据写入请求中的目标数据存入与所述目标虚拟组存在映射关系的Redis实例中。
可选地,所述Redis代理服务器还用于在接收到所述数据读取请求时,对所述数据读取请求对应的用户信息进行鉴权,并在鉴权通过后,基于所述数据读取请求中的标识,读取所述Redis实例中的目标数据或所述LMDB实例中的目标数据。
可选地,所述Redis代理服务器还用于在接收到所述数据读取请求时,判断单位时间内的请求量是否达到阀值,若是,则进行流量监控。
可选地,所述Redis代理服务器与所述服务器集群建立长链接。
可选地,所述分布式存储***包括多个Redis代理服务器,每个所述Redis代理服务器与所述服务器集群建立长链接。
可选地,所述分布式存储***,还包括监控服务器,所述监控服务器包括监控组件和显示组件;其中,
所述监控组件用于接收所述Redis代理服务器发送的数据存储信息,和/或,接收所述服务器集群发送的实例状态信息;
所述显示组件用于展示所述数据存储信息和/或所述实例状态信息。
此外,为实现上述目的,本发明还提出一种数据投放方法,所述数据投放方法应用于Redis代理服务器,所述Redis代理服务器通信连接有服务器集群,所述服务器集群包括Redis服务器和符合预定部署条件的服务器,所述Redis服务器包括多个Redis实例,所述服务器包括多个实例,所述Redis实例中存储有目标数据;其中,所述Redis代理服务器中配置有多个逻辑槽,所述多个逻辑槽与所述Redis实例和/或实例存在映射关系;
所述数据投放方法包括:
将所述Redis实例中的目标数据发送到发布订阅消息***中,以使所述实例消费所述发布订阅消息***中的目标数据;
接收数据读取请求;
基于所述数据读取请求中的标识,读取所述Redis实例中的目标数据或所述实例中的目标数据;
将所述目标数据进行投放。
可选地,所述服务器为LMDB服务器,所述实例为LMDB实例;所述Redis代理服务器中配置有多个虚拟组以及多个逻辑槽,所述多个逻辑槽与所述多个虚拟组存在映射关系,所述多个虚拟组与所述Redis实例和/或LMDB实例存在映射关系;
所述基于所述数据读取请求中的标识,读取所述Redis实例中的目标数据或所述LMDB实例中的目标数据的步骤,包括:
基于所述数据读取请求中的标识对应的值,获得对应的目标逻辑槽;
获得与所述目标逻辑槽存在映射关系的目标虚拟组;
从所述Redis服务器中读取与所述目标虚拟组存在映射关系的Redis实例中的目标数据或从所述LMDB服务器中读取与所述目标虚拟组存在映射关系的LMDB实例中的目标数据。
可选地,所述将所述Redis实例中的目标数据发送到发布订阅消息***中的步骤之前,所述方法还包括:
接收数据写入请求;
基于所述数据写入请求中的标识获得目标逻辑槽;
获得与所述目标逻辑槽存在映射关系的目标虚拟组;
将所述数据写入请求中的目标数据存入与所述目标虚拟组存在映射关系的Redis实例中。
本发明所能实现的有益效果。
本发明实施例提出的一种分布式存储***及数据投放方法,所述分布式存储***包括服务器集群和Redis代理服务器;其中,所述服务器集群包括Redis服务器和符合预定部署条件的服务器,所述Redis服务器包括多个Redis实例,所述服务器包括多个实例,所述多个Redis实例用于存储目标数据;其中,所述Redis代理服务器中配置有多个逻辑槽,所述多个逻辑槽与所述Redis实例和/或实例存在映射关系;所述Redis代理服务器用于将所述Redis实例中的目标数据发送到发布订阅消息***中;所述服务器中的实例用于消费所述发布订阅消息***中的目标数据,以使所述Redis服务器与所述服务器存储有相同的目标数据;所述Redis代理服务器还用于接收数据读取请求,基于所述数据读取请求中的标识,读取所述Redis实例中的目标数据或所述实例中的目标数据。由此可见,在该分布式存储***中,为了实现Redis方案,采用Redis服务器作为主机来分布式存储目标数据,在此基础上,一方面,为了实现高可用,采用符合预定部署条件的服务器作为备机,使用发布订阅消息***同步Redis服务器与服务器的数据,利用Redis服务器与符合预定部署条件的服务器主备设置的方式,相对于现有的主从节点都使用部署费用高的同配置Redis服务器,可以采用费用更低的数据库服务器,达到了低成本高可用的效果;同时,另一方面,利用Redis代理服务器中配置的逻辑槽与各实例的映射关系,避免对数据库底层分片,实现Redis代理服务器与集群的低耦合设计,使得Redis代理服务器可以匹配集群中各种版本的Redis软件,因此,本实施例的分布式***不仅实现了低成本高可用,其数据底层Redis服务器兼容原生任何版本的Redis。
附图说明
图1为本发明实施例的分布式存储***的结构示意图;
图2为本发明实施例中分片映射流程示意图;
图3为本发明实施例中鉴权流程示意图;
图4为本发明实施例中流量控制流程示意图;
图5为本发明实施例中数据监控警告流程示意图;
图6为本发明实施例的数据投放方法流程示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明,在本发明中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
本发明实施例的主要解决方案是:采用一种分布式存储***,该分布式存储***包括服务器集群和Redis代理服务器;其中,所述服务器集群包括Redis服务器和符合预定部署条件的服务器,所述Redis服务器包括多个Redis实例,所述服务器包括多个实例,所述多个Redis实例用于存储目标数据;其中,所述Redis代理服务器中配置有多个逻辑槽,所述多个逻辑槽与所述Redis实例和/或实例存在映射关系;所述Redis代理服务器用于将所述Redis实例中的目标数据发送到发布订阅消息***中;所述服务器中的实例用于消费所述发布订阅消息***中的目标数据,以使所述Redis服务器与所述服务器存储有相同的目标数据;所述Redis代理服务器还用于接收数据读取请求,基于所述数据读取请求中的标识,读取所述Redis实例中的目标数据或所述实例中的目标数据。
由于现有技术为了实现数据的高效管理,一般采用分布式***来解决,例如,Redis-Cluster、codis以及一些云上Redis解决方案等。Redis方案或是codis方案,为了实现高可用,受限于软件配置和部署的难度,都会采用全内存的主从同配置机器方案,实现主从结构,其部署的分布式存储***成本高;此外,现有的codis方案,根据目前版本的codis代码显示,codis并未采用逻辑分片,而是在数据底层进行分片,且目前的codis版本较低,已经不能兼容高版本的redis数据库。
本发明提供一种解决方案,在一种分布式存储***中,为了实现Redis方案,采用Redis服务器作为主机来分布式存储目标数据,并为了实现高可用,采用符合预定部署条件的服务器作为备机,使用发布订阅消息***同步Redis服务器与服务器的数据;此外,利用Redis代理服务器中配置的逻辑槽与各实例的映射关系,避免对数据库底层分片,解决代理服务器与底层数据库的兼容问题。因此,利用Redis服务器与符合预定部署条件的服务器主备设置的方式,相对于现有的主从节点都使用部署费用高的同配置Redis服务器,可以通过逻辑槽的设置解决兼容性的问题,从而采用费用更低的服务器,达到了低成本高可用的效果。
参照图1,本发明的实施例提供一种分布式存储***,在本实施例中,符合预定部署条件的服务器可以是成本更低的LMDB服务器;
所述分布式存储***包括:服务器集群和Redis代理服务器;其中,
所述服务器集群包括Redis服务器和LMDB服务器,所述Redis服务器包括多个Redis实例,所述LMDB服务器包括多个LMDB实例,所述多个Redis实例用于存储目标数据;其中,所述Redis代理服务器中配置有多个逻辑槽,所述多个逻辑槽与所述Redis实例和/或实例存在映射关系;
所述Redis代理服务器用于将所述Redis实例中的目标数据发送到发布订阅消息***中;所述LMDB服务器中的LMDB实例用于消费所述发布订阅消息***中的目标数据,以使所述Redis服务器与所述LMDB服务器存储有相同的目标数据;
所述Redis代理服务器还用于接收数据读取请求,基于所述数据读取请求中的标识,读取所述Redis实例中的目标数据或所述LMDB实例中的目标数据。
需要说明的是,Redis的全称是Remote Dictionary Server,译为远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value(标识-值)数据库,并提供多种语言的API。具体的,redis支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。在本实施例中,Redis服务器是指安装并配置了Redis软件的用于存储数据的服务器。
LMDB的全称是Lightning Memory-Mapped Database,译为:快如闪电的内存映射数据库,LMDB使用内存映射的方式访问文件,使得文件内寻址的开销非常小,使用指针运算就能实现;数据库单文件还能减少数据集复制/传输过程的开销。在本实施例中,LMDB服务器是指安装并配置了LMDB软件的用于存储数据的服务器,作为Redis服务器的备机。
由此可见,由于Redis和LMDB都是基于内存的数据结构存储器,其通过调用内存来实现数据库的功能。因此,同等条件下,在本实施例中,相对于Redis,选用LMDB对内存空间的需求相对较少,相应的其对硬件的配置需求相对较低,部署的硬件成本即相对较低。
此外,Redis代理服务器是指安装和配置了RedisProxy程序的服务器,RedisProxy是Redis方案中的代理程序;RedisProxy支持多种业务语句接入方式,命令方式跟Redis语法命令无缝兼容,向量模式提供二进制数据/自然语句输入。
在具体实施过程中,本实施例中的分布式存储***中,服务器集群与Redis代理服务器通信连接,以实现数据的读写。为了实现扩大数据存储容量的同时实现高可用,服务器集群可以包括多个Redis组,每个Redis组包括一个Redis服务器和一个LMDB服务器,Redis服务器作为主机,LMDB服务器作为备机。
此外,为了避免代理点的单点问题,Redis代理服务器也可以设置多个,分别与多个Redis组通信连接。
请参见图1,该分布式存储***包括:3个Redis代理服务器,3个Redis组,每个Redis组包括一个Redis服务器和一个LMDB服务器。其中,每个Redis代理服务器都分别与每个Redis组建立长链接,长链接可降低因频繁链接带来的耗时。
在一种实施例中,在Redis代理服务器跟Redis组之间可以建立长链接池机制,具体的,可以在Redis代理服务器中添加长链接管理程序,以执行以下步骤:
监测到缓存数据读写请求时,获取链接池中的空闲链接;
通过所述空闲链接发送数据读取/写入请求至Redis服务器,以供所述Redis服务器根据所述数据读取/写入请求执行目标数据读写操作;
若检测到读写操作失败,则判定所述空闲链接为无效链接;
若检测到所述空闲链接为无效链接,则发送无效通知至链接池管理器,以供链接池管理器对所述空闲链接启动链接回收机制。
与现有技术中采用定期对链接池中的无效链接进行回收的技术相比,本实施例中的链接管理方法通过在检测到空闲链接为无效链接时立刻发送无效通知至链接池管理器,以供链接池管理器及时对空闲链接启动链接回收机制,克服了现有技术中无法及时回收无效链接的技术缺陷,从而避免无效链接占用链接池资源。
此外,3个Redis代理服务器还可以连接用户端(在本实施例中也成为业务端),在一种场景中,该分布式存储***用于对画像数据进行在线投放,则用户端可以开发一套软件,方便画像数据的导入以及将从服务器集群中读取的数据输出给广告投放软件DSP(Demand Side Platform,需求方平台),以便于DSP投放出去。需要说明的是,Redis代理服务器与用户端之间也可以建立长链接。
进一步的,Redis服务器可以包括多个Redis实例,LMDB服务器可以包括多个LMDB实例,多个Redis实例用于存储目标数据。其中,存储的方式可以是缓存,不同于磁盘存储的是,缓存可以快速的读写,使得数据投放更快速。
所述Redis代理服务器用于将所述Redis实例中的目标数据发送到发布订阅消息***中;所述LMDB服务器中的LMDB实例用于消费所述发布订阅消息***中的目标数据,以使所述Redis服务器与所述LMDB服务器存储有相同的目标数据。在这种情况下,Redis服务器作为主机,存储目标数据,并供用户端通过Redis代理服务器读取目标数据;LMDB服务器作为备机,在主机中的Redis实例下线时,供用户端通过Redis代理服务器读取目标数据。
具体的,发布订阅消息***可以是kafka,安装有kafka软件的kafka服务器与Redis代理服务器以及LMDB服务器通信连接,在Redis实例正常情况下,用户端读写数据都通过Redis代理服务器读写主机Redis实例,同时Redis代理服务器会作为生产者,把写命令数据生产到Kafka的lmdbtopic主题上;LMDB代理服务器作为消费者,准实时消费Kafka里面的数据,保证主备之间数据的最终一致性,在更低部署成本的情况下,保证该分布式***的高可用性。
此外,Redis实例下线情况下,Redis代理服务器检查到失败的实例启动备机方案,下线实例的读命令数据会切换到备机LMDB代理服务器进行读取,下线实例的写命令数据会作为生产数据多生产一份到Kafka的failtopic主题上,failtopic会在实例上线后进行消费,保证下线实例期间把写数据缓存下来,避免丢失和避免主备之间的不一致。
当Redis实例恢复正常后,通过调用组件感知到实例恢复并且作为消费者开始消费failtopic的数据,并且直接写入到Redis实例,当failtopic中数据都消费完成后,就会把读写请求从备机切换到主机,提供正常高性能的服务。
应当理解的是,以上仅为举例说明,对本发明的技术方案并不构成任何限制,本领域的技术人员在实际应用中可以基于需要进行设置,此处不做限制。
通过上述描述不难发现,本实施例提供的分布式存储***,在该分布式存储***中,为了实现Redis方案,采用Redis服务器作为主机来分布式存储目标数据,并为了实现高可用,采用LMDB服务器作为备机,使用发布订阅消息***同步Redis服务器与LMDB服务器的数据,由于LMDB的软硬件的部署费用相对较低,因此,利用Redis服务器与LMDB服务器主备设置的方式,相对于主备机都使用部署费用高的同配置Redis服务器,达到低成本高可用的效果。
在本申请的另一实施例中,在第一实施例的基础上,所述服务器为LMDB服务器,所述实例为LMDB实例;所述Redis代理服务器中配置有多个虚拟组以及多个逻辑槽,所述多个逻辑槽与所述多个虚拟组存在映射关系,所述多个虚拟组与所述Redis实例和/或LMDB实例存在映射关系;
所述分布式存储***还包括协调服务器,所述协调服务器中存储有映射关系表,所述映射关系表中包括所述多个逻辑槽与所述多个虚拟组存在映射关系,以及所述多个虚拟组与所述Redis实例和/或LMDB实例存在映射关系。
在具体实施过程中,协调服务器可以是zookeeper服务器。请参见图2,slot(槽)在本实施例为逻辑分片获得的,因此,称为逻辑槽;根据数据中的标识key,利用CRC(循环冗余校验)算法进行逻辑分片,获得1024个逻辑槽,即slot0、slot1、slot2...slot1023。
根据业务端设置有表名规则,即:AppName.TableName对映着一个实例,静态配置着多个slot逻辑槽(app.table->slot),不同slot也映射到对应的group虚拟组上(slot->group)关系,虚拟组group对应着一主多从实例,三者关系保存在zookeeper服务器上;
在对Redis服务器进行数据读写时,通过AppName.TablName得到所有的slot关系;
基于crc32(key)%1024得到落在的slotid;
查找slotid对应虚拟组groupid上,并且得到group所对应的实例信息。
作为一种可选的实施方式,所述Redis代理服务器还用于接收数据写入请求,基于所述数据写入请求中的标识获得目标逻辑槽,基于所述映射关系表获得与所述目标逻辑槽存在映射关系的目标虚拟组,并将所述数据写入请求中的目标数据存入与所述目标虚拟组存在映射关系的Redis实例中。
举例来说,在业务端有关于画像数据devicemd5:1101(key:value格式)的数据写入请求时,Redis代理服务器收到数据写入请求后,会对请求中key使用CRC32算法并且对1024取模,计算得到slotid,该slotid即为逻辑槽的对应ID;然后根据slotid查找到对应的虚拟组groupid,并跟据其映射关系表得到Redis实例信息(IP和Port),把数据devicemd5:1101写入到Redis实例中。
作为另一种可选的实施方式,所述Redis代理服务器还用于接收数据读取请求,基于所述数据读取请求中的标识对应的值获得对应的目标逻辑槽,基于所述映射关系表获得与所述目标逻辑槽存在映射关系的目标虚拟组,并从所述Redis服务器中读取与所述目标虚拟组存在映射关系的Redis实例中的目标数据或从所述LMDB服务器中读取与所述目标虚拟组存在映射关系的LMDB实例中的目标数据。
需要说明的是,这里的标识对应的值即是key:value数据格式中的标识key对应的值value。
举例来说,在业务端有关于头条广告投放并触发DSP对画像数据的数据读取请求时,获取数据devicemd5(key)对应的值value,根据value所对应的逻辑槽,查找到对应的虚拟组groupid,并跟据其映射关系表得到Redis实例信息(IP和Port),把数据devicemd5:1101从Redis实例中读取出来。
具体的,其完整的画像数据投放的过程如下:
首先是画像数据写入过程:
画像数据工厂通过业务端把原始数据组装成交互协议,并且使用Pipeline模式发送到Redis代理服务器;
Redis代理服务器的接收线程接收来自数据工厂的请求;
Redis代理服务器的处理线程对请求按照Redis实例进行拆分,并且构造成Redis实例请求,发送到Redis实例;
Redis代理服务器的链接池管理Redis代理服务器和服务器集群之间的长链接;
Redis代理服务器的发送线程回复处理结果至业务端。
其次是画像数据读取过程:
广告主发出广告投放需求方;
广告投放平台DSP利用业务端基于didmd5组装读取命令,并且以Pipeline模式(批量)发送到Redis代理服务器;当收到Redis代理服务器的应答后,按照出价逻辑把出价结果返回到广告主,以完成画像数据的投放;
Redis代理服务器的接收线程接收来自业务端的请求;
Redis代理服务器的处理线程对请求按照Redis实例进行拆分,并且构造成Redis实例请求,发送到Redis实例;
Redis代理服务器的链接池管理Redis代理服务器和服务器集群之间的长链接;
Redis代理服务器的发送线程回复处理结果至业务端。
以上便是利用本实施例的分布式存储***实现画像数据投放的过程。
应当理解的是,以上仅为举例说明,对本发明的技术方案并不构成任何限制,本领域的技术人员在实际应用中可以基于需要进行设置,此处不做限制。
通过上述描述不难发现,由于本实施例中的分布式存储***,在Redis代理服务器中进行逻辑分片,并在zookeeper服务器中存储映射关系表,以实现与集群的低耦合设计,即可以匹配集群中各种版本的Redis软件;相对于现有的codis方案,根据目前版本的codis代码显示,codis并未采用逻辑分片,而是在数据底层进行分片,且目前的codis版本较低,已经不能兼容高版本的redis数据库,因此,本实施例的分布式***不仅实现了低成本高可用,其数据底层Redis服务器兼容原生任何版本的Redis,支持Redis版本升级。
在本申请另一种可选的实施例中,在前述实施例的基础上,所述Redis代理服务器还用于在接收到所述数据读取请求时,对所述数据读取请求对应的用户信息进行鉴权,并在鉴权通过后,基于所述数据读取请求中的标识,读取所述Redis实例中的目标数据或所述LMDB实例中的目标数据。
在具体实施过程中,参见图3,用户可以首先通过业务端的Web页面进行账号和密码注册,注册信息存储到数据库DataBase,并且同步到zookeeper服务器中;如图3所示,当Redis代理服务器接收到所述数据读取请求时,在Redis代理服务器提供的接口带上注册的账号Id和账号密码,进行请求校验,若校验通过则允许Redis服务器中Redis实例的目标数据的访问,若校验不通过则返回校验失败。
通过上述描述不难发现,本实施例的分布式存储***中的代理层RedisProxy提供ACL鉴权能力,保证只有授权的业务账号才能访问数据,避免Redis数据被脱裤。
此外,可以理解的是,因注册的账号是同步到zookeeper中的,可以利用zookeeper的配置热更新功能,实现业务账号增删而不需要Redis代理服务器中服务RedisProxy进行重启,减少对正常业务的影响。
在本申请另一种可选的实施例中,所述Redis代理服务器还用于在接收到所述数据读取请求时,判断单位时间内的请求量是否达到阀值,若是,则进行流量监控。
在具体实施过程中,参见图4,用户可以首先通过业务端的Web页面根据业务场景流量/机器性能,设置单位时间内流量阀值,持久化到数据库DataBase中,并且同步到zookeeper服务器,并且通过Redis代理服务器中的代理RedisProxy加载到内存中;如图3所示,当Redis代理服务器接收到所述数据读取请求时,RedisProxy会计算单位时间内的请求量是否到达阀值,如果达到阀值,则认为需要进行流控,并且把流控错误码返回给业务段;若没有达到阀值,则不需要进行流控,请求会达到Redis实例,并且返回预期结果。
通过上述描述不难发现,本实施例的分布式存储***的代理层RedisProxy支持流量控制,基于不同业务可进行流量监控和限流,避免流量洪峰造成对服务器集群过载。
在本申请另一种可选的实施例中,所述分布式存储***,还包括监控服务器,所述监控服务器包括监控组件和显示组件;其中,
所述监控组件用于接收所述Redis代理服务器发送的数据存储信息,和/或,接收所述服务器集群发送的实例状态信息;
所述显示组件用于展示所述数据存储信息和/或所述实例状态信息。
在具体实施过程中,监控组件可以是Prometheus组件,显示组件可以是Grafana组件。请参见图5,本实施例中,Redis代理服务器接入开源组件Prometheus,进行数据收集和存储引擎,以及Grafana作为数据展示和设置告警;对于Redis实例,通过引入Redis-exporter工具,自动向Prometheus上报集群实例中的状态数据,例如,链接数、使用内存、每秒命令数、命中率等数据,并通过Grafana对数据进行展示,业务端可开发阀值告警功能,若有异常发送到企业微信通知项目人员;对于代理RedisProxy,通过Prometheus接口实时上报业务数据,例如:请求量/响应量/平均耗时/超时数/客户端访问IP等数据,并通过Grafana对数据进行展示,业务开发可能上面进行阀值告警,若有异常发送到企业微信通知项目人员。
通过上述描述不难发现,本实施例的分布式存储***整个架构对Redis代理服务器和服务器集群支持7*24监控和维护,实时告警,保证服务可用性达到99.95%。
下面参照某公司广告业务场景,以存储需求1280g内存为例,读写满足20w/tps,P99 10ms时延,高可用,部署成本对比如下表。
由表中数据可知,在实现同样大小的内存需求时,本实施例分布式存储***部署的成本最低,但满足20w/tps,P99 10ms时延的快速投放的要求,且实现了高可用。
请参见图6,基于与前述实施例相同的发明构思,本申请的实施例还提供一种数据投放方法,所述数据投放方法应用于Redis代理服务器,所述Redis代理服务器通信连接有服务器集群,所述服务器集群包括Redis服务器和符合预定部署条件的服务器,所述Redis服务器包括多个Redis实例,所述服务器包括多个实例,所述Redis实例中存储有目标数据;其中,所述Redis代理服务器中配置有多个逻辑槽,所述多个逻辑槽与所述Redis实例和/或实例存在映射关系;
所述数据投放方法包括:
S10、将所述Redis实例中的目标数据发送到发布订阅消息***中,以使所述实例消费所述发布订阅消息***中的目标数据;
S20、接收数据读取请求;
S30、基于所述数据读取请求中的标识,读取所述Redis实例中的目标数据或所述实例中的目标数据;
S40、将所述目标数据进行投放。
作为一种可选地实施例,所述服务器为LMDB服务器,所述实例为LMDB实例;所述Redis代理服务器中配置有多个虚拟组以及多个逻辑槽,所述多个逻辑槽与所述多个虚拟组存在映射关系,所述多个虚拟组与所述Redis实例和/或LMDB实例存在映射关系;
所述基于所述数据读取请求中的标识,读取所述Redis实例中的目标数据或所述LMDB实例中的目标数据的步骤,包括:
基于所述数据读取请求中的标识对应的值,获得对应的目标逻辑槽;
获得与所述目标逻辑槽存在映射关系的目标虚拟组;
从所述Redis服务器中读取与所述目标虚拟组存在映射关系的Redis实例中的目标数据或从所述LMDB服务器中读取与所述目标虚拟组存在映射关系的LMDB实例中的目标数据。
作为一种可选地实施例,所述将所述Redis实例中的目标数据发送到发布订阅消息***中的步骤之前,所述方法还包括:
接收数据写入请求;
基于所述数据写入请求中的标识获得目标逻辑槽;
获得与所述目标逻辑槽存在映射关系的目标虚拟组;
将所述数据写入请求中的目标数据存入与所述目标虚拟组存在映射关系的Redis实例中。
需要说明的是,本实施中的投放方法与前述实施例中的分布式存储***的功能一一对应,因此,其各种实施方式也可以参照前述实施例中实施方式,这里不再赘述。
在前述实施例的分布式存储***的基础上,本申请的实施例还提供一种存储容量调整方法,所述存储容量调整方法包括:
基于获取到的容量调整需求,生成关于所述代理服务器中目标逻辑槽的迁移计划表,以使所述代理服务器在获取到所述迁移计划表后,设置所述迁移计划表中的命中实例为迁移状态;其中,所述命中实例包括所述目标逻辑槽迁移前映射的原有实例以及所述目标逻辑槽迁移后映射的目标实例,且所述命中实例处于迁移状态时,所述代理服务器对所述命中实例中数据的读写访问路径转移到所述备用存储服务器;
在所述命中实例处于迁移状态时,获取所述原有实例中与所述目标逻辑槽对应的目标数据的标识;
基于所述目标数据的标识,将所述目标数据从所述原有实例迁移至所述目标实例,并将所述目标逻辑槽与所述原有实例的映射关系迁移到所述目标实例,以使所述目标逻辑槽与所述目标实例存在映射关系;其中,所述目标实例为与所述容量调整需求对应的所述分布式存储系扩容时新增的实例或缩容时剩余的实例。
需要说明的是,本实施例中,存储容量调整是指对上述实施例中的分布式存储***进行扩容或缩容,即,对服务器集群增加或减少实例,从硬件上来说,可以体现为增加或减少主存储服务器。
具体来说,本实施例的方法可以由一个程序进程来完成,该程序进程可以安装在与代理服务器不同的主机上,并可以与服务器集群建立通信连接。下面就以该程序进程为执行主体,来描述本实施例的方法执行过程。
首先,执行获取容量调整需求。
在具体实施过程中,存储容量调整是指对上述实施例中的分布式存储***进行扩容或缩容,容量调整需求可以从运维***中获取。运维***的功能是:当业务数据增长/减少,通过该工具/平台触发Redis实例扩/缩容指令。
接下来,执行基于获取到的容量调整需求,生成关于所述代理服务器中目标逻辑槽的迁移计划表,以使所述代理服务器在获取到所述迁移计划表后,设置所述迁移计划表中的命中实例为迁移状态;
其中,所述命中实例包括所述目标逻辑槽迁移前映射的原有实例以及所述目标逻辑槽迁移后映射的目标实例,且所述命中实例处于迁移状态时,所述代理服务器对所述命中实例中数据的读写访问路径转移到所述备用存储服务器。
在具体实施过程中,迁移计划表是指关于逻辑槽的迁移计划表,目标逻辑槽是指容量调整需求中涉及目标数据迁移所对应的逻辑槽。需要说明的是,本实施例中,代理服务器中配置有多个逻辑槽,所述多个逻辑槽与所述多个实例存在映射关系。因此,要增加实例或减少实例,都需要进行重新分片,对逻辑槽进行迁移,以重新建立映射关系,实现数据的读写。
此外,迁移计划表中包括命中实例,其中,所述命中实例包括所述目标逻辑槽迁移前映射的原有实例以及所述目标逻辑槽迁移后映射的目标实例。为了实现数据迁移期间的可读可写,代理服务器在获取到所述迁移计划表后,可以设置所述迁移计划表中的命中实例为迁移状态,命中实例处于迁移状态时,所述代理服务器对所述命中实例中数据的读写访问路径转移到所述备用存储服务器。与现有技术相比,由于代理服务器中通过逻辑槽来实现数据分布,而并没有对数据库底层进行分片,因此,在分布式存储***的数据库底层进行扩/缩操作时,可以将读写访问临时转移到备用储存服务器,而不会影响数据的读写访问,以此解决现有技术通过物理槽来实现数据分布,不能实现备机方案,从而无法实现扩/缩容期间实现数据写入的问题;继而在完成扩/缩操作后,可以将备用储存服务器临时读写的数据同步到集群,保证分布式存储***的数据一致性。
因此,在数据迁移前,需要生成关于目标逻辑槽的迁移计划表。
作为一种可选地实施例,所述基于所述容量调整需求,生成关于所述代理服务器中目标逻辑槽的迁移计划表的步骤,包括:
基于所述容量调整需求,采用均衡算法生成关于所述代理服务器中目标逻辑槽的迁移计划表。
在具体实施过程中,采用均衡算法可使得迁移后的逻辑槽的分配更均衡,从而使得扩/缩容后的分布式存储***读写性能更稳定。
作为一种可选地实施例,当所述容量调整需求为扩容需求,所述目标实例为新增的主存储服务器中的实例;所述基于所述容量调整需求,采用均衡算法生成关于所述代理服务器中目标逻辑槽的迁移计划表的步骤,包括:
基于所述扩容需求,获得分配给扩容后实例的逻辑槽的平均数;
基于扩容前的各实例的逻辑槽数量,对扩容前的各实例进行降序排列;
遍历降序排列后的扩容前的各实例,将每个扩容前的实例中超出所述平均数的逻辑槽分配到目标实例中,直到所述扩容前的实例中的逻辑槽数量等于所述平均数,生成关于所述代理服务器中目标逻辑槽的迁移计划表。
在具体实施过程中,当所述容量调整需求为扩容需求,所述目标实例为新增的主存储服务器中的实例,此时,需要将现有的部分逻辑槽分配到映射新增的实例,因此,需要重新进行逻辑槽的分配。具体的,对排序后的实例根据逻辑槽数量依次按平均数进行分配,保证分配后的逻辑槽的均衡。
作为另一种可选地实施例,当所述容量调整需求为缩容需求,所述目标实例为原有的主存储服务器中的实例;所述基于所述容量调整需求,采用均衡算法生成关于所述代理服务器中目标逻辑槽的迁移计划表的步骤,包括:
基于所述缩容需求,获得分配给缩容后的实例的逻辑槽的平均数;
基于缩容前各实例的逻辑槽数量,对缩容保留的实例进行升序排列;
遍历升序排列后的缩容保留的实例,将缩减的实例中的逻辑槽分配到目标实例中,直到所述缩容保留的实例中的逻辑槽数量等于所述平均数,生成关于所述代理服务器中目标逻辑槽的迁移计划表。
在具体实施过程中,当所述容量调整需求为缩容需求,所述目标实例为原有的主存储服务器中的实例,此时,需要将缩减的实例中的逻辑槽映射到目标实例中,因此,需要重新进行逻辑槽的分配。具体的,对排序后的实例根据逻辑槽数量依次按平均数进行分配,保证分配后的逻辑槽的均衡。
接下来,执行在所述命中实例处于迁移状态时,获取所述原有实例中与所述目标逻辑槽对应的目标数据的标识。
在具体实施过程中,对目标数据进行迁移之前,为了后续生成迁移命令,对目标数据进行迁移,首先需要对实例进行扫描,以获得目标数据的标识。且,在此过程中,所述命中实例处于迁移状态,实现可读可写。
接下来,执行基于所述目标数据的标识,将所述目标数据从所述原有实例迁移至所述目标实例,并将所述目标逻辑槽与所述原有实例的映射关系迁移到所述目标实例,以使所述目标逻辑槽与所述目标实例存在映射关系;其中,所述目标实例为与所述容量调整需求对应的所述分布式存储系扩容时新增的实例或缩容时剩余的实例。
在具体实施过程中,需要首先基于所述目标数据的标识,生成迁移命令。作为一种可选的实施例,所述基于所述目标数据的标识,将所述目标数据从所述原有实例迁移至所述目标实例,并将所述目标逻辑槽与所述原有实例的映射关系迁移到所述目标实例的步骤,包括:
基于所述目标数据的标识,生成原生迁移命令;
基于所述原生迁移命令,将所述目标数据从所述原有实例迁移至所述目标实例,并将所述目标逻辑槽与所述原有实例的映射关系迁移到所述目标实例。
其中,原生迁移命令为原生的Migrate迁移命令。在具体实施过程中,原生的Migrate迁移命令可以实现批量迁移,提高数据迁移效率,进而提高扩/缩容的效率。
在具体实施过程中,首先对目标数据进行迁移,作为一种可选的实施例,所述迁移命令中包括多个目标逻辑槽对应的目标数据的迁移计划;所述基于所述迁移命令,将所述目标数据从所述原有实例迁移至所述目标实例的步骤,包括:
基于所述迁移命令,创建任务队列,其中,所述任务队列中包括所述多个目标逻辑槽对应的目标数据的迁移计划;
基于所述任务队列,创建与所述目标逻辑槽数量相同的多个线程;
所述多个线程分别获取所述任务队列中的迁移计划,以将所述多个目标逻辑槽对应的目标数据从所述原有实例迁移至所述目标实例。
可以理解的是,在具体实施过程中,当迁移命令中包括多个目标逻辑槽对应的目标数据的迁移计划时,可以创建共享内存的任务队列,把每个目标逻辑槽对应的目标数据的迁移计划当作一个任务放到队列中,充分利用CPU核数,创建多个线程,每个线程去获取队列中的任务,将所述多个目标逻辑槽对应的目标数据从所述原有实例迁移至所述目标实例,实现并发迁移,提高迁移速度。
基于上述实施例中的分布式存储***,本申请的实施例还提供一种分布式存储***的数据同步方法。在本实施中,分布式存储***在前述实施例的基础上,还包括监测服务器、协调服务器和发布订阅消息***。
具体的,监测服务器一方面与主存储服务器连接,以监测主存储服务器中实例的状态;另一方面与发布订阅消息***连接,以消费其中的数据;同时,与协调服务器连接,以存储实例的状态信息。代理服务器与与协调服务器连接,以读取其中的实例状态信息;发布订阅消息***还与代理服务器和备用存储服务器连接,以接收代理服务器的数据写入,并供备用存储服务器消费其中的数据。
本实施例的分布式存储***的数据同步方法包括:
监测所述主存储服务器中实例的状态;
若监测到所述主存储服务器中的目标实例为下线状态,生成所述目标实例的下线状态信息,以使所述代理服务器在读取到所述下线状态信息后,将对所述目标实例的读写访问路径切换到所述备用存储服务器;其中,在所述目标实例的读写访问路径切换到所述备用存储服务器期间,所述代理服务器将目标数据分别写入所述备用存储服务器和发布订阅消息***中;
在监测到所述目标实例从下线状态恢复为上线状态后,消费所述发布订阅消息***中的目标数据,并将所述发布订阅消息***中的目标数据写入处于上线状态的所述目标实例中,以使所述主存储服务器与所述备用存储服务器中的数据同步。
需要说明的是,由于实例会存在上线和下线状态,在上线状态时为正常状态,可正常进行数据读写;当实例处于下线状态,则不能进行数据读写,因此,会存在实例中数据不同步的情况。本实施例的数据同步方法可针对实例状态变化导致的数据不同步,而对各实例中的数据实现同步。
此外,本实施中的方法执行主体可以是监测服务器。
首先,执行监测所述主存储服务器中实例的状态。
在具体实施过程中,实例的状态是指主存储服务器中各实例处于上线,还是下线状态。由于数据不同步是因为实例的状态变化导致,因此,为了进行数据同步,首先要监测主存储服务器中实例的状态。
在一种实施例中,所述监测所述主存储服务器中实例的状态的步骤,包括:
按照预设时间间隔周期性检测所述主存储服务器中实例的网络连接情况;
若所述实例至少连续三次网络连接失败,则判断所述实例为下线状态。
在具体实施过程中,网络连接可以是ping命令连接,ping是Windows、Unix和Linux***下的一个命令,ping也属于一个通信协议,是TCP/IP协议的一部分,利用“ping”命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障。因此,可以通过ping连接来检测实例是否处于上线状态,即如果不能与实例进行网络连接,则表示该实例下线。
具体的,由于一次ping连接失败,可能只是偶然的网络掉线导致的暂时性的ping连接失败,因此,在本实施例中,若所述实例至少连续三次ping连接失败,则判断所述实例为下线状态。
进一步的,在若所述实例至少连续三次ping连接失败,则判断所述实例为下线状态的步骤之后,所述方法还包括:
在所述实例处于下线状态时,若检测到所述实例至少一次ping连接成功,则判断所述目标实例从下线状态恢复为上线状态。
在具体实施过程中,一次ping连接成功则可代表网络连通,此时,实例必然处于上线状态。
接下来,执行若监测到所述主存储服务器中的目标实例为下线状态,生成所述目标实例的下线状态信息,以使所述代理服务器在读取到所述下线状态信息后,将对所述目标实例的读写访问路径切换到所述备用存储服务器;其中,在所述目标实例的读写访问路径切换到所述备用存储服务器期间,所述代理服务器将目标数据分别写入所述备用存储服务器和发布订阅消息***中。
需要说明的是,目标实例为主存储服务器中的实例。正常情况下,实例都处于上线状态,而当监测服务器监测到所述主存储服务器中的目标实例为下线状态时,生成所述目标实例的下线状态信息。
具体的,所述分布式存储***还可以包括协调服务器;此时,可以将所述下线状态信息存储到所述协调服务器中,则代理服务器可从所述协调服务器中读取到该下线状态信息,确定目标实例处于下线状态,此时,将对该目标实例的读写访问路径切换到备用存储服务器。在目标实例的读写访问路径切换到所述备用存储服务器期间,所述代理服务器将目标数据分别写入所述备用存储服务器和发布订阅消息***中。
其中,将目标数据写入所述备用存储服务器是为了保证分布式存储***在目标实例下线时,将备用存储服务器作为备机,也能正常写入数据;而将目标数据写入发布订阅消息***中,是为了后续在目标实例上线后,将目标数据补入目标实例中,以保证主存储服务器与备用存储服务器中有同步的数据。
因此,接下来,执行在监测到所述目标实例从下线状态恢复为上线状态后,消费所述发布订阅消息***中的目标数据,并将所述发布订阅消息***中的目标数据写入处于上线状态的所述目标实例中,以使所述主存储服务器与所述备用存储服务器中的数据同步。
在具体实施过程中,在监测到目标实例下线后,持续对目标实例的状态进行监测,监测服务器在监测到所述目标实例从下线状态恢复为上线状态后,消费所述发布订阅消息***中的目标数据,并将所述发布订阅消息***中的目标数据写入处于上线状态的所述目标实例中,以使所述主存储服务器与所述备用存储服务器中的数据同步。
具体的,由于发布订阅消息***中的目标数据也同步存储到备用存储服务器中,因此,将所述发布订阅消息***中的目标数据写入处于上线状态的所述目标实例中,可以使所述主存储服务器与所述备用存储服务器中的数据同步。
作为一种实施例,所述监测所述主存储服务器中的实例状态的步骤之后,所述方法还包括:
若监测到所述主存储服务器中的目标实例为上线状态,生成所述目标实例的上线状态信息,以使所述代理服务器在读取到所述上线状态信息后,将所述目标实例中的目标数据发送到所述发布订阅消息***中;
其中,所述备用存储服务器与发布订阅消息***存在订阅关系,以使所述备用存储服务器消费所述发布订阅消息***中的目标数据,同步所述主存储服务器与所述备用存储服务器中的数据。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者***不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者***所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者***中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如只读存储器/随机存取存储器、磁碟、光盘)中,包括若干指令用以使得一台多媒体终端设备(可以是手机,计算机,电视接收机,或者网络设备等)执行本发明各个实施例所述的方法
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (12)
1.一种分布式存储***,其特征在于,所述分布式存储***包括:服务器集群和远程字典服务Redis代理服务器;其中,
所述服务器集群包括Redis服务器和符合预定部署条件的服务器,所述Redis服务器包括多个Redis实例,所述服务器包括多个实例,所述多个Redis实例用于存储目标数据;其中,所述Redis代理服务器中配置有多个逻辑槽,所述多个逻辑槽与所述Redis实例和/或所述实例存在映射关系;
所述Redis代理服务器用于将所述Redis实例中的目标数据发送到发布订阅消息***中;所述服务器中的实例用于消费所述发布订阅消息***中的目标数据,以使所述Redis服务器与所述服务器存储有相同的目标数据;
所述Redis代理服务器还用于接收数据读取请求,基于所述数据读取请求中的标识,读取所述Redis实例中的目标数据或所述实例中的目标数据。
2.如权利要求1所述的分布式存储***,其特征在于,所述服务器为LMDB服务器,所述实例为LMDB实例;
所述Redis代理服务器中配置有多个虚拟组以及多个逻辑槽,所述多个逻辑槽与所述多个虚拟组存在映射关系,所述多个虚拟组与所述Redis实例和/或LMDB实例存在映射关系;
所述分布式存储***还包括协调服务器,所述协调服务器中存储有映射关系表,所述映射关系表中包括所述多个逻辑槽与所述多个虚拟组存在映射关系,以及所述多个虚拟组与所述Redis实例和/或LMDB实例存在映射关系。
3.如权利要求2所述的分布式存储***,其特征在于,所述Redis代理服务器还用于接收数据读取请求,基于所述数据读取请求中的标识对应的值获得对应的目标逻辑槽,基于所述映射关系表获得与所述目标逻辑槽存在映射关系的目标虚拟组,并从所述Redis服务器中读取与所述目标虚拟组存在映射关系的Redis实例中的目标数据或从所述LMDB服务器中读取与所述目标虚拟组存在映射关系的LMDB实例中的目标数据。
4.如权利要求2所述的分布式存储***,其特征在于,所述Redis代理服务器还用于接收数据写入请求,基于所述数据写入请求中的标识获得目标逻辑槽,基于所述映射关系表获得与所述目标逻辑槽存在映射关系的目标虚拟组,并将所述数据写入请求中的目标数据存入与所述目标虚拟组存在映射关系的Redis实例中。
5.如权利要求2所述的分布式存储***,其特征在于,所述Redis代理服务器还用于在接收到所述数据读取请求时,对所述数据读取请求对应的用户信息进行鉴权,并在鉴权通过后,基于所述数据读取请求中的标识,读取所述Redis实例中的目标数据或所述LMDB实例中的目标数据。
6.如权利要求2所述的分布式存储***,其特征在于,所述Redis代理服务器还用于在接收到所述数据读取请求时,判断单位时间内的请求量是否达到阀值,若是,则进行流量监控。
7.如权利要求1所述的分布式存储***,其特征在于,所述Redis代理服务器与所述服务器集群建立长链接。
8.如权利要求7所述的分布式存储***,其特征在于,所述分布式存储***包括多个Redis代理服务器,每个所述Redis代理服务器与所述服务器集群建立长链接。
9.如权利要求1所述的分布式存储***,其特征在于,所述分布式存储***,还包括监控服务器,所述监控服务器包括监控组件和显示组件;其中,
所述监控组件用于接收所述Redis代理服务器发送的数据存储信息,和/或,接收所述服务器集群发送的实例状态信息;
所述显示组件用于展示所述数据存储信息和/或所述实例状态信息。
10.一种数据投放方法,其特征在于,所述数据投放方法应用于Redis代理服务器,所述Redis代理服务器通信连接有服务器集群,所述服务器集群包括Redis服务器和符合预定部署条件的服务器,所述Redis服务器包括多个Redis实例,所述服务器包括多个实例,所述Redis实例中存储有目标数据;其中,所述Redis代理服务器中配置有多个逻辑槽,所述多个逻辑槽与所述Redis实例和/或实例存在映射关系;
所述数据投放方法包括:
将所述Redis实例中的目标数据发送到发布订阅消息***中,以使所述实例消费所述发布订阅消息***中的目标数据;
接收数据读取请求;
基于所述数据读取请求中的标识,读取所述Redis实例中的目标数据或所述实例中的目标数据;
将所述目标数据进行投放。
11.如权利要求10所述的数据投放方法,其特征在于,所述服务器为LMDB服务器,所述实例为LMDB实例;所述Redis代理服务器中配置有多个虚拟组以及多个逻辑槽,所述多个逻辑槽与所述多个虚拟组存在映射关系,所述多个虚拟组与所述Redis实例和/或LMDB实例存在映射关系;
所述基于所述数据读取请求中的标识,读取所述Redis实例中的目标数据或所述LMDB实例中的目标数据的步骤,包括:
基于所述数据读取请求中的标识对应的值,获得对应的目标逻辑槽;
获得与所述目标逻辑槽存在映射关系的目标虚拟组;
从所述Redis服务器中读取与所述目标虚拟组存在映射关系的Redis实例中的目标数据或从所述LMDB服务器中读取与所述目标虚拟组存在映射关系的LMDB实例中的目标数据。
12.如权利要求11所述的数据投放方法,其特征在于,所述将所述Redis实例中的目标数据发送到发布订阅消息***中的步骤之前,所述方法还包括:
接收数据写入请求;
基于所述数据写入请求中的标识获得目标逻辑槽;
获得与所述目标逻辑槽存在映射关系的目标虚拟组;
将所述数据写入请求中的目标数据存入与所述目标虚拟组存在映射关系的Redis实例中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011101781.5A CN112235405A (zh) | 2020-10-14 | 2020-10-14 | 分布式存储***及数据投放方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011101781.5A CN112235405A (zh) | 2020-10-14 | 2020-10-14 | 分布式存储***及数据投放方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112235405A true CN112235405A (zh) | 2021-01-15 |
Family
ID=74113089
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011101781.5A Pending CN112235405A (zh) | 2020-10-14 | 2020-10-14 | 分布式存储***及数据投放方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112235405A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112948666A (zh) * | 2021-01-28 | 2021-06-11 | 浪潮云信息技术股份公司 | 一种将库表数据发布为api服务的实现方法 |
CN113010622A (zh) * | 2021-03-08 | 2021-06-22 | 智道网联科技(北京)有限公司 | 实时交通数据的处理方法、装置及电子设备 |
CN114143196A (zh) * | 2021-11-25 | 2022-03-04 | 北京百度网讯科技有限公司 | 实例配置更新方法、装置、设备、存储介质及程序产品 |
CN115037758A (zh) * | 2022-04-27 | 2022-09-09 | 浪潮通信技术有限公司 | 消息同步方法及服务器 |
-
2020
- 2020-10-14 CN CN202011101781.5A patent/CN112235405A/zh active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112948666A (zh) * | 2021-01-28 | 2021-06-11 | 浪潮云信息技术股份公司 | 一种将库表数据发布为api服务的实现方法 |
CN113010622A (zh) * | 2021-03-08 | 2021-06-22 | 智道网联科技(北京)有限公司 | 实时交通数据的处理方法、装置及电子设备 |
CN114143196A (zh) * | 2021-11-25 | 2022-03-04 | 北京百度网讯科技有限公司 | 实例配置更新方法、装置、设备、存储介质及程序产品 |
CN114143196B (zh) * | 2021-11-25 | 2023-07-28 | 北京百度网讯科技有限公司 | 实例配置更新方法、装置、设备、存储介质及程序产品 |
CN115037758A (zh) * | 2022-04-27 | 2022-09-09 | 浪潮通信技术有限公司 | 消息同步方法及服务器 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112099918B (zh) | 容器化环境中的集群的实时迁移 | |
US11249815B2 (en) | Maintaining two-site configuration for workload availability between sites at unlimited distances for products and services | |
CN112235405A (zh) | 分布式存储***及数据投放方法 | |
US10084858B2 (en) | Managing continuous priority workload availability and general workload availability between sites at unlimited distances for products and services | |
CN102594849B (zh) | 数据备份、恢复方法、虚拟机快照删除、回滚方法及装置 | |
US9015164B2 (en) | High availability for cloud servers | |
US9521198B1 (en) | Systems and methods for implementing an enterprise-class converged compute-network-storage appliance | |
US10922303B1 (en) | Early detection of corrupt data partition exports | |
US5822531A (en) | Method and system for dynamically reconfiguring a cluster of computer systems | |
CN102955845B (zh) | 数据访问方法、装置与分布式数据库*** | |
US9367261B2 (en) | Computer system, data management method and data management program | |
CN110247984B (zh) | 业务处理方法、装置及存储介质 | |
CN105069152B (zh) | 数据处理方法及装置 | |
JP5686034B2 (ja) | クラスタシステム、同期制御方法、サーバ装置および同期制御プログラム | |
CN105095317A (zh) | 分布式数据库服务管理*** | |
CN112230853A (zh) | 存储容量调整方法、装置、设备及存储介质 | |
CN112698926B (zh) | 数据处理方法、装置、设备、存储介质及*** | |
CN112243030A (zh) | 分布式存储***的数据同步方法、装置、设备及介质 | |
WO2022227719A1 (zh) | 数据备份方法、***及相关设备 | |
US11704289B2 (en) | Role reversal of primary and secondary sites with minimal replication delay | |
JP2012053795A (ja) | 情報処理システム | |
US11010351B1 (en) | File system replication between software defined network attached storage processes using file system snapshots | |
CN109976944B (zh) | 数据处理方法和***,存储介质和电子设备 | |
CN112306746A (zh) | 在应用环境中管理快照的方法、设备和计算机程序产品 | |
CN109992215A (zh) | 一种icfs***的升级方法、升级***及相关装置 |
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 |