一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种redis数据库动态冗余部署方法和装置与流程

2022-11-30 13:25:59 来源:中国专利 TAG:


1.本发明涉及内生安全数据库技术领域,特别涉及一种redis数据库动态冗余部署方法和装置。


背景技术:

2.当前redis数据库技术广泛应用在众多领域当中,例如网络操作系统sonic就是基于redis数据库构建起来,但当前对redis数据库的应用往往是基于已有的开源项目,数据库的安全性难以保证,针对未知风险的抵御能力也存在欠缺。


技术实现要素:

3.本发明的目的在于提供一种redis数据库动态冗余部署方法和装置,以克服现有技术中的不足。
4.为实现上述目的,本发明提供如下技术方案:本技术公开了一种redis数据库动态冗余部署方法,所述redis数据库动态冗余部署包括输入输出代理、裁决器和redis服务器,所述redis服务器包括一个系统服务器和两个以上的并行服务器,所述方法具体包括如下步骤:s1、用户通过客户端与所述redis服务器中的系统服务器建立连接,所述输入输出代理监听客户端与系统服务器之间的连接端口,获取系统服务器与客户端之间的交互信息;s2、所述输入输出代理将获取到的交互信息同步到并行服务器当中;s3、当所述输入输出代理从交互信息中检测到数据读取类指令时,从redis服务器中执行读取指令,并将读取到的数据发送给裁决模块进行裁决;s4、所述输入输出代理根据裁决模块的裁决结果和切换策略,决定是否对系统服务器进行热切换,所述热切换为将并行服务器的信息切换到系统服务器中,所述服务器的信息包括数据信息和状态信息。
5.作为优选,所述动态冗余包括同构动态冗余和异构动态冗余。
6.作为优选,步骤s1中所述输入输出代理采用基于操作系统内核中的tcp抓包api实现监听客户端与系统服务器之间的连接端口。
7.作为优选,所述步骤s2具体包括如下步骤:s21、输入输出代理中维护一个白名单,根据所述白名单提取需要进行同步的信息,所述信息包括以resp协议的方式进行封装的redis指令;s22、输入输出代理作为客户端与并行服务器建立连接;s23、输入输出代理通过客户端,将以resp协议的方式进行封装的redis命令转发给所述并行服务器,完成同步过程。
8.作为优选,所述步骤s4中所述切换策略采用信用分机制,具体操作如下:当系统服务器信用分低于设定值时,从并行服务器中选择信用分最高的一个,将所述信用分最高的
一个并行服务器中的数据和状态信息切换到系统服务器当中。
9.作为优选,所述步骤s4中所述热切换基于主从数据库复制来实现,具体包括以下步骤:s41、所述输入输出代理通过redis api,使得当前运行的系统服务器成为并行服务器中信用分最高的服务器的从服务器;s42、系统服务器从所述信用分最高的并行服务器中复制数据;s43、复制完成后,所述输入输出代理通过redis api,使得当前运行的系统服务器从从服务器模式切换回独立的服务器模式运行。
10.本技术还公开了一种redis数据库动态冗余部署装置,包括存储器和一个或多个处理器,所述存储器中存储有可执行代码,所述一个或多个处理器执行所述可执行代码时,用于上述的redis数据库动态冗余部署方法。
11.本技术还公开了一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时,实现上述的redis数据库动态冗余部署方法。
12.本发明的有益效果:redis数据库的冗余部署,增大了整个系统的广义鲁棒性,符合内生安全领域的拟态架构。同时,本发明创新性地采用旁路监听和热切换的方式,打破了传统的动态冗余架构需要将输入输出代理嵌入到系统内部的局限性,使得针对redis数据库的异构冗余部署过程对原系统的影响接近了理论上的最小值。并且基于旁路监听和热切换的动态冗余部署,使得各个模块与原系统之间的进程实现完全解耦,既有利于开发、调试、部署和整机测试,也提高了整个系统设计和部署的灵活性,从而使得成本也更加可控。
13.本发明的特征及优点将通过实施例结合附图进行详细说明。
附图说明
14.图1是本发明实施例提供的一种redis数据库动态冗余部署方法的流程图。
15.图2是整体系统架构示意图。
16.图3是本发明一种拟态redis数据库的输入输出代理装置的结构图。
具体实施方式
17.为使本发明的目的、技术方案和优点更加清楚明了,下面通过附图及实施例,对本发明进行进一步详细说明。但是应该理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限制本发明的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本发明的概念。
18.参阅图1,本发明为一种redis数据库动态冗余部署方法,所述redis数据库动态冗余部署包括输入输出代理、裁决器和三个以上运行的redis服务器,所述三个以上运行的redis服务器包括一个系统服务器和两个以上的并行服务器。
19.具体的,参考图2,所述动态冗余包括同构动态冗余和异构动态冗余;所述同构动态冗余是在部署了原生redis数据库服务器的基础上,额外部署两个以上相同版本、相同运行环境的redis服务器;所述异构动态冗余是在部署了原生redis 数据库服务器的基础上,额外部署两个以上不同版本、不同运行环境的redis服务。
20.用户客户端和redis系统服务器构成了原生的应用系统,动态冗余的redis并行服务器以及相配套的裁决器、拟态输入输出代理作为系统的一个旁路分支集成到系统当中。
21.在一些工业控制场景当中更多得采用同构动态冗余,而在内生安全的拟态架构当中则往往采用异构动态冗余。一般情况下,同构动态冗余稳定性更强、成本较低,但安全性不足;异构动态冗余容易引入系统自扰动,因而稳定性不足,并且由于实现起来复杂所以成本更高,但安全性也更高,抵御未知风险的能力更强。
22.本发明既支持同构动态冗余场景,也支持异构动态冗余场景。本实施例采用异构动态冗余的方案,从而一般性得包含了同构动态冗余的实现方式。具体的,采用不同基础镜像的容器以及不同版本的redis服务器之间的组合,达到异构的效果。由于redis服务器不仅仅能够在本地运行,也可以通过远程tcp服务来提供相应的功能,因而本实施例的方案也覆盖在不同类型的服务器上运行不同版本的redis的场景。
23.所述方法具体包括如下步骤:s1、用户通过客户端与所述动态冗余部署的运行的redis服务器中的系统服务器建立连接,所述输入输出代理监听所述连接端口,获取服务器与客户端之间的交互信息。
24.具体的,参考图2,所述redis数据库动态冗余部署包括三个以上运行的redis服务器,所述的三个以上运行的redis服务器包括一个系统服务器和两个以上的并行服务器,所述两个以上的并行服务器构成一个并行服务器池。系统服务器的选取没有特定的规则,开发者可以按照需求或自身判断,从三个以上运行的redis服务器当中选择一个作为系统服务器,剩余的作为并行服务器。在本实施例基于ubuntu系统开发,系统服务器器设置为直接运行在ubuntu系统上的redis服务器,其他并行服务器则运行在不同基础镜像构建的docker容器当中。
25.用户通过redis客户端直接与redis服务器中的系统服务器建立连接,所述redis客户端包括命令行以及面向c、python等众多语言的api接口,对于用户客户端而言,它并不感知除了系统服务器以外其他并行服务器的存在,从而实现了与redis数据库用户层面的解耦,大大提高整个方案在实际部署上的灵活性。
26.所述步骤s1中所述输入输出代理监听所述连接端口,具体采用基于操作系统内核中的tcp抓包api实现。
27.针对连接端口的监听,在不同的系统当中,依赖不同的api接口。例如在unix系统当中依赖pcap接口,本实施例采用python实现,对应的模块名称为pypcap。本实施例将动态冗余的redis服务器部署在ubuntu系统上,输入输出代理采用python代码实现功能原型模块。需要说明的是,采用python开发便于代码实现和调试,但性能上往往不能达到要求,一般情况下在使用python完成原型模块代码开发后,还需要采用c/c 语言进行重写。
28.s2、所述输入输出代理将监听到的所述交互信息同步到所述两个以上的并行服务器当中;所述步骤s2具体包括如下步骤:s21、拟态输入输出代理中维护一个白名单,根据所述白名单提取需要进行同步的信息,所述信息具体包括以resp协议的方式进行封装的redis指令;在本实施例当中,所述白名单通过pypcap接口的参数设置来进行实现,可以对特定ip、mac等信息进行限制或者过滤,从而保证用于同步到并行服务器当中的信息来源真实
可靠。
29.上述的白名单不提供运行时更改的api,以防引入未知的安全威胁,白名单的设置在模块代码开发阶段(编译前);若需要更改白名单,则需要从源头修改代码,重新编译并且重新集成到系统当中。
30.s22、拟态输入输出代理作为客户端与所述两个以上的并行服务器建立连接;此处拟态输入输出代理作为客户端与所述两个以上的并行服务器建立连接,所采用的接口为自行实现的极简交互接口,而非采用redis本身的api,这种实现方式相对于现有的基于redis api实现的redis输入输出代理而言,更符合内生安全动态冗余架构当中对于输入输出代理的设计要求。极简接口的实现也可以尽可能降低系统引入输入输出代理后所造成的额外已知或未知的风险。
31.具体的,由于redis服务器本质上是一个tcp服务器,因而所述极简交互接口只需要利用unix环境提供的socket接口api,实现一个基础的tcp客户端即可与redis服务器建立连接。极简交互接口通过tcp客户端的消息收发方式与redis服务器进行消息交互,需要说明的是,原生的redis客户端在发送完消息后,采用阻塞的方式等待redis服务器的响应;而在本实施例的当中,极简交互接口通过select或poll等io多路复用技术,可以实现一个进程当中建立多个客户端,同时跟多个并行的redis服务器进行交互。
32.同时,采用所述的io多路复用技术,也可以将所述的监听和抓包过程集成在同一个进程当中,所述监听和抓包过程同样不会因为tcp交互的原因而发生阻塞。由此,所有的功能逻辑均可以放在一个进程当中,对比现有技术需要采用多进程并发的形式实现redis数据库的输入输出代理,本发明实施例避免了并发编程带来的额外工作量,同时也避免了并发编程引入新的安全漏洞以及系统自扰动风险。
33.s23、拟态输入输出代理通过所述的客户端,直接将所述以resp协议的方式进行封装的redis命令转发给所述两个以上的并行服务器,完成同步过程。
34.具体的,拟态输入输出代理在监听到白名单当中的源头发出的数据后,通过所述的极简交互接口,直接将resp协议进行转发,从而实现数据的同步过程。
35.在本实施例当中,对于监听到的resp协议封装的命令也进行了相应的过滤,只针对那些对数据库进行了修改的命令同步到并行服务器上,对于其他的命令则进行丢弃,例如keys命令。该功能类似于redis原生的aof文件写入过程,同样的,对于pubsub命令和script load命令是例外。pubsub命令虽然没有修改数据库,但pubsub命令向频道的所有订阅者发送消息这一行为带有副作用,所述的副作用指的是接收到消息的所有客户端的状态都会因为这个命令而改变。因此,拟态输入输出代理需要将该命令下发给并行服务器,使得并行服务器再次执行相同的pubsub命令,并产生相同的副作用。script load命令的情况与pubsub命令类似,虽然script load命令没有修改数据库,但它修改了服务器状态,因而拟态输入输出代理需要下发相同的命令给并行服务器,使得并行服务器的状态可以同步得到改变。
36.s3、所述输入输出代理检测到数据读取类指令时,同步从所述三个以上运行的redis服务器当中执行同样的读取指令,并将读取到的数据发送给裁决模块进行裁决。
37.具体的,所述裁决器既可以部署在本地、作为一个单独的进程并行运行,也可以部署在其他机器设备上,输入输出代理通过socket api或其他接口进行交互。一种比较高效
的裁决方式是将裁决器部署在fpga上,fpga与cpu之间通过网口或者pcie等接口互联,但这种方式比较依赖硬件架构。本实施例采用简单的方案,将裁决器部署在本地。
38.裁决器的具体实施方式业界有许多成熟方案,本实施例采用简单的择多裁决,具体的,当输入输出代理向所述三个以上运行的redis服务器发送的get keya的指令后,服务器1和服务器2回复valuea,但服务器3回复valueb,那么裁决认为valuea为正确值。如果三个服务器返回的值均不相同,那么返回一个裁决错误。
39.s4、所述拟态输入输出代理根据切换策略,决定是否对系统服务器进行热切换,所述热切换是将并行服务器的信息切换到系统服务器当中,所述服务器的信息包括数据信息和状态信息;所述步骤s4中所述切换策略采用信用分机制,具体的,当系统服务器信用分低于设定值时,从并行服务器中选择信用分最高的一个,将所述信用分最高的一个并行服务器中的数据和状态信息切换到系统服务器当中。
40.所述信用分机制是在初始化阶段按照各个redis服务器的异构情况设置一个初始信用分,例如服务器1初始信用分为80,服务器2初始信用分为70,服务器3初始信用分为60。然后在裁决的过程中依次更新信用分,例如上述get keya的指令执行过程,服务器3返回的数据跟服务器1以及服务器2不同,那么服务器1和服务器2加5分,服务器3减5分。
41.所述步骤s4中所述热切换基于主从数据库复制来实现,具体包括以下步骤:s41、所述拟态输入输出代理通过redis api,使得当前运行的系统服务器成为所述两个以上的并行服务器当中所述信用分最高的服务器的从服务器;s42、所述系统服务器从所述信用分最高的并行服务器当中复制数据;s43、复制完成后,所述拟态输入输出代理通过redis api,使得当前运行的系统服务器从从服务器模式切换回独立的服务器模式运行。
42.具体的,拟态输入输出代理可以通过发送slaveof命令驱动系统服务器从信用分最高的并行服务器当中复制数据,数据复制完成后,再通过slaveof no one命令,将系统服务器从从服务器模式切换回独立的服务器模式运行。
43.以上所述的一种redis数据库动态冗余部署方法,通过对redis数据库的冗余部署,增大了整个系统的广义鲁棒性,符合内生安全领域的拟态架构。同时,创新性地采用旁路监听和热切换的方式,打破了传统的动态冗余架构需要将输入输出代理嵌入到系统内部的局限性,使得针对redis数据库的异构冗余部署过程对原系统的影响接近了理论上的最小值。并且基于旁路监听和热切换的动态冗余部署,使得各个模块与原系统之间的进程实现完全解耦,既有利于开发、调试、部署和整机测试,也提高了整个系统设计和部署的灵活性,从而使得成本也更加可控。
44.本发明一种redis数据库动态冗余部署装置的实施例可以应用在任意具备数据处理能力的设备上,该任意具备数据处理能力的设备可以为诸如计算机等设备或装置。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在任意具备数据处理能力的设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图3所示,为本发明拟态redis数据库的输入输出代理装置所在任意具备数据处理能力的设备的一种硬件结构图3,除了图3所示的处理器、内存、网络接口、以及非易失性存储器之外,实施
例中装置所在的任意具备数据处理能力的设备通常根据该任意具备数据处理能力的设备的实际功能,还可以包括其他硬件,对此不再赘述。
45.上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
46.对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
47.本发明实施例还提供一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时,实现上述实施例中的一种redis数据库动态冗余部署方法。
48.所述计算机可读存储介质可以是前述任一实施例所述的任意具备数据处理能力的设备的内部存储单元,例如硬盘或内存。所述计算机可读存储介质也可以是任意具备数据处理能力的设备的外部存储设备,例如所述设备上配备的插接式硬盘、智能存储卡(smart media card,smc)、sd卡、闪存卡(flash card)等。进一步的,所述计算机可读存储介质还可以既包括任意具备数据处理能力的设备的内部存储单元也包括外部存储设备。所述计算机可读存储介质用于存储所述计算机程序以及所述任意具备数据处理能力的设备所需的其他程序和数据,还可以用于暂时地存储已经输出或者将要输出的数据。
49.以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换或改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献