一种分布式系统的测试方法和装置与流程

文档序号:25586237发布日期:2021-06-22 17:01阅读:98来源:国知局
一种分布式系统的测试方法和装置与流程

本公开涉及计算机技术领域,尤其涉及系统测试、混沌工程技术领域,具体涉及一种分布式系统的测试方法和装置。



背景技术:

混沌工程的初衷是通过实验性的方法,让人们建立关于复杂分布式系统能够在生产中抵御事件的能力的信息。混沌工程用来暴露生产系统中那些未知的、脆弱的环节。

在混沌测试中,为了验证系统的稳定性,通常会在生产环境中随机注入故障变量,来探寻故障对系统可能造成的未知和不可见的影响。但是混沌测试的影响范围如果没有得到合理控制,容易造成意料之外的大规模故障。



技术实现要素:

本公开提供了一种分布式系统的测试方法和装置。

根据本公开的一方面,提供了一种分布式系统的测试方法,包括:

在分布式系统的多个层中的每个层中,设置主集群以及与主集群相隔离的实验集群;

根据预设的引流策略,从业务数据流中提取实验数据流;

通过将所提取的实验数据流引入各个层的实验集群,来对分布式系统进行混沌测试。

根据本公开的另一方面,提供了一种分布式系统的测试装置,包括:

设置模块,用于在分布式系统的多个层中的每个层中,设置主集群以及与主集群相隔离的实验集群;

引流模块,用于根据预设的引流策略,从业务数据流中提取实验数据流;以及

测试模块,用于通过将所提取的实验数据流引入各个层的实验集群,来对分布式系统进行混沌测试

根据本公开的另一方面,提供了一种电子设备,包括:

至少一个处理器;以及

与所述至少一个处理器通信连接的存储器;其中,

所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行任一上述方法。

根据本公开的另一方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行上述方法。

根据本公开的另一方面,提供了一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现上述方法。

应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。

附图说明

附图用于更好地理解本方案,不构成对本公开的限定。其中:

图1是示出了在线影子环境实验中实现的在线集群和实验集群的示例的图;

图2是根据本公开实施例的分布式系统的测试方法的流程图;

图3是根据本公开另一实施例的分布式系统的测试方法的流程图;

图4是示出了根据本公开实施例的分布式系统的测试方法所实现的主集群和实验集群的示例的图;

图5是根据本公开实施例的分布式系统的测试装置的示意图;

图6示出了可以用来实施本公开实施例的示例电子设备600的示意性框图。

具体实施方式

以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。

在混沌测试中控制实验影响范围的技术包括无差别生产环境实验和在线影子环境实验。

在无差别生产环境实验中,全数据流的生产环境包括数据流入口层、应用层、数据层,在这个环境内可以通过指定idc机房、系统运行实例、api、符合某些特征的用户等手段,执行特定故障注入实验。无差别生产环境实验:在生产环境内进行无差别的随机实验时,可以通过指定用户、uri等来控制实验影响面。但是对单个用户、uri请求在全数据流环境内的实验,任意随机的实验都有可能会导致蝴蝶效应,引发未知不可控的大面积故障。

在线影子环境实验中,如图1所示,搭建一套和生产环境(图1右侧所示的在线集群108)全流程一致的影子系统(图1左侧所示的实验集群108’),将在线集群108的经由网关101进入的入口数据流拷贝一份,并将拷贝得到的入口数据流引流到影子系统内,作为实验集群108’的经由网关101’进入的入口数据流,在实验集群108’这个全隔离环境内执行故障注入实验。如图1所示,实验集群108’包括与在线集群108的应用服务102、负载均衡器103、数据库(mysql104、redis105)、基础服务106、外部服务107完全相同的应用服务102’、负载均衡器103’、数据库(mysql104’、redis105’)、基础服务106’、外部服务107’,并与在线集群108相隔离。

然而,在线影子环境实验中,若在影子环境内通过数据流录制拷贝重放,或者在线倒流方式实验,因为需要依赖的内外部环境极多(含部门内、公司内、公司外等),很难搭建全流程实验环境,环境搭建成本也很高,模仿(mock)成本也较高,并且在非真实环境内做实验,能反馈出的未知问题比较有限。在非生产环境里实验,也与混沌工程中“在真实环境中实验”发现未知问题的原则不相符合。

本公开实现了一种分布式系统的测试方法和装置,对分布式系统的包括应用层和数据层在内的所有层均做了隔离集群,从而在请求的全流程内实现了实验集群。这样,能够有效控制实验的影响范围,还能够在真实环境中实现,实验成本低,并且控制灵活。

图2是根据本公开实施例的分布式系统的测试方法的流程图。下面参考图2对根据本公开实施例的分布式系统的测试方法200进行说明。

在步骤s210,在分布式系统的多个层中的每个层中,设置主集群以及与主集群相隔离的实验集群。

在步骤s220,根据预设的引流策略,从业务数据流中提取实验数据流。

在步骤s230,通过将所提取的实验数据流引入各个层的实验集群,来对分布式系统进行混沌测试。

图3是根据本公开另一实施例的分布式系统的测试方法的流程图。下面参考图3对根据本公开另一实施例的分布式系统的测试方法300进行说明。

在步骤s310,通过对分布式系统的数据层中的数据库集群进行分片拆分,得到数据层的主集群以及与所述主集群相隔离的实验集群。

在步骤s320,通过对分布式系统的应用层中的应用服务器集群进行分片拆分,得到应用层的主集群以及与所述主集群相隔离的实验集群。其中,步骤s310与步骤s320的执行顺序可以是任意的。即,步骤s310既可以在步骤s320之前执行,也可以在步骤s320之后执行,还可以与步骤s320同时执行,本公开对此不作特别限定。

在步骤s330,利用网关设备将从业务数据流中提取的实验数据流引入应用层的实验集群。可以基于用户标识(uid,useridentification)和应用编程接口(api,applicationprogramminginterface)中的至少之一来提取实验数据流。例如,可以通过对业务数据流中的uid进行取模运算来确定目标用户标识,并从业务数据流中提取与目标用户标识相关的数据流作为实验数据流。在一些实施例中,可以从多个api中确定目标api,并从业务数据流中提取与目标api相关的数据流作为实验数据流。在一个实施例中,可以在实验数据流中注入故障变量。

在步骤s340,通过应用层的实验集群对引入的实验数据流进行处理,并将处理后的实验数据流引入数据层的实验集群。当实验数据流中注入了故障变量时,通过观测实验集群对故障变量的处理和应对方式,可以测试实验集群的稳定性等性能。

在步骤s350,在混沌测试完成后,将每个层中的实验集群与主集群合并。

图4是示出了根据本公开实施例的分布式系统的测试方法所实现的主集群和实验集群的示例的图。以下参考图4对根据本公开实施例的分布式系统的测试方法所实现的主集群和实验集群进行举例说明。然而,图4所示的主集群和实验集群仅为示例,并不旨在限定本公开。

如图4所示,分布式系统包括应用层410和数据层420。应用层410例如包括应用服务器和负载均衡器。数据层420例如包括mysql、redis等数据库以及数据库与应用层之间的中间件proxy(未示出)。mysql数据库是一种关系型数据库。redis数据库是一种基于内存的key-value(键-值)缓存数据库,这里与mysql数据库配合使用以减少mysql数据库的数据访问压力并提高访问速度。数据流从例如网关401进入该分布式系统,依次经过应用层410、数据层420进行处理。例如,数据流可以包括多个http请求,http请求由应用层410服务,应用层410需要调用数据层420来完成对http请求的服务,并将服务结果返回给请求方。其中,应用层410和数据层420仅为示例的层,应用层410和数据层420中包括的组件、数据流中包括的http请求也仅为示例,这些示例并不旨在限制本公开。

如图4右侧所示,在分布式系统的多个层中的每个层中设置主集群。如图4左侧所示,在分布式系统的多个层中的每个层中设置与主集群相隔离的实验集群。这样,在请求的全流程内实现了实验集群408’,从而将有可能引发的故障的影响范围限制在实验集群中,避免在主集群408中引发不可控的大面积故障,提高了整个分布式系统的稳定性和可靠性。

在数据层420中设置主集群以及与主集群相隔离的实验集群包括:通过对数据层420中的数据库集群进行分片拆分,得到数据层的主集群以及与所述主集群相隔离的实验集群。例如,如图4所示,对mysql数据库集群进行分片拆分,以形成彼此独立的mysql主分片404和mysql实验分片404’。类似地,对redis缓存数据库集群进行分片拆分,以形成彼此独立的redis主分片405和redis实验分片405’。mysql主分片404和redis主分片405被设置为主集群,mysql实验分片404’和redis实验分片405’被设置为实验集群。由于mysql实验分片404’和redis实验分片405’与mysql主分片404和redis主分片405彼此独立且隔离,因此能够可靠地避免在主集群的数据层中引发不可控的大面积故障。

在应用层410中设置主集群以及与主集群相隔离的实验集群包括:通过对应用层中的应用服务器集群进行分片拆分,得到应用服务器主集群402以及与所述主集群相隔离的实验集群(应用服务器实验集群402’)。负载均衡器403是应用服务器主集群402的负载均衡器,而负载均衡器403’是应用服务器实验集群402’的负载均衡器。由于应用服务器实验集群402’和应用服务器主集群402彼此独立且隔离,因此能够可靠地避免在主集群的应用层中引发不可控的大面积故障。应用层的服务都设计成无状态服务,以便容易对其进行拆分,并提高集群的可伸缩性、可扩展性。内部关联模块均实现应用层实验集群,承接从数据流入口处调度进来的实验数据流。如图4左侧所示,实验集群中的应用服务器实验集群402’和负载均衡器403’承接了从网关401调度而来的实验数据流。无状态服务(statelessservice)是指对单次请求的处理不依赖于其他请求,也就是说,处理一次请求所需的全部信息要么都包含在这个请求里,要么可以从外部(例如数据库)获取到,而服务器自身不存储任何信息。无状态服务的优势在于可以很方便地水平伸缩,提高服务的可伸缩性、可扩展性。

可选地,对于集群的拆分,可以在进行反脆弱实验前拆分得到主集群和实验集群,在反脆弱实验结束后将实验集群的数据合并(merge)回主集群。通过按需拆分调度出来实验,实验结束后合并回去,从而达到最灵活的实验调度控制。

除了在请求的全流程内实现了与主集群相隔离的实验集群以外,还进行用户级或api级的实验粒度控制,可以进一步控制影响范围,将在生产环境内实验的影响范围控制到最小粒度。

参见图4,在网关401处,设定了独立的引流策略,从全部数据流中抽取实验数据流。其中一个引流策略例如按照uid取模方式进行引流。具体地,例如,每个单个数据流具有一个uid。uid的取值范围为1-100。可以将每个uid针对10取模,余为1的uid被提取为实验数据流,引导到图4左侧的实验集群中。这相当于将全部数据流的十分之一提取为实验数据流。

作为引流策略的替代方案,还可以按照api为单位进行引流。具体地,例如,从多个api中确定目标api,并且将关于目标api的数据流提取为实验数据流。

通过设置合适的引流策略,可以有针对性地、灵活地控制实验数据流,并可以将实验的影响范围控制到最小粒度。

利用网关401将实验数据流引入应用层的实验集群后,通过应用层的实验集群对引入的实验数据流进行处理,并将处理后的实验数据流引入数据层的实验集群。在此过程中,通过在网关401处设置引流策略,使实验数据流请求落到实验集群范围之内。在实验集群内部,通过配置路由,使从入口调度进来的用户及请求数据流封闭地贯穿通过整个实验集群内部的所有层,从而将有可能引发的故障的影响范围限制在实验集群中,提高了系统的稳定性和可靠性。

此外,如图4所示,根据本公开的技术方案,实验集群408’可以与主集群408共享相同的基础服务406和外部服务407等组件,因此无需搭建全流程实验环境,大幅降低了实验环境搭建成本。基础服务406例如可以是分布式系统底层的协调服务、安全服务、资源管理和调度服务等,外部服务407例如可以是与分布式系统连接并交互协作的外部服务器和客户端支持等。同时,由于实验集群408’和主集群408是拆分得到的,因此能够在真实环境内进行实验,能够充分反馈出未知的问题。

本公开的技术方案中,所涉及的用户个人信息的获取、存储和应用等均符合相关法律法规的规定,且不违背公序良俗。

根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。

图5是根据本公开实施例的分布式系统的测试装置的示意图。下面参考图5对根据本公开实施例的分布式系统的测试装置500进行说明。测试装置500包括设置模块510、引流模块520和测试模块530。

设置模块510被配置为在分布式系统的多个层中的每个层中,设置主集群以及与主集群相隔离的实验集群。

引流模块520被配置为根据预设的引流策略,从业务数据流中提取实验数据流。

测试模块530被配置为通过将所提取的实验数据流引入各个层的实验集群,来对分布式系统进行混沌测试。

图6示出了可以用来实施本公开的实施例的示例电子设备600的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。

如图6所示,设备600包括计算单元601,其可以根据存储在只读存储器(rom)602中的计算机程序或者从存储单元608加载到随机访问存储器(ram)603中的计算机程序,来执行各种适当的动作和处理。在ram603中,还可存储设备600操作所需的各种程序和数据。计算单元601、rom602以及ram603通过总线604彼此相连。输入/输出(i/o)接口605也连接至总线604。

设备600中的多个部件连接至i/o接口605,包括:输入单元606,例如键盘、鼠标等;输出单元607,例如各种类型的显示器、扬声器等;存储单元608,例如磁盘、光盘等;以及通信单元609,例如网卡、调制解调器、无线通信收发机等。通信单元609允许设备400通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。

计算单元601可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元601的一些示例包括但不限于中央处理单元(cpu)、图形处理单元(gpu)、各种专用的人工智能(ai)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(dsp)、以及任何适当的处理器、控制器、微控制器等。计算单元601执行上文所描述的各个方法和处理,例如由上述路侧计算设备、交通提示设备的处理器或远处处理器执行的方法和处理。例如,在一些实施例中,这些方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元608。在一些实施例中,计算机程序的部分或者全部可以经由rom602和/或通信单元609而被载入和/或安装到设备600上。当计算机程序加载到ram603并由计算单元601执行时,可以执行上文描述的分布式系统的测试方法的一个或多个步骤。备选地,在其他实施例中,计算单元601可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行上述方法。设备600例如可以是分布式系统的控制中心,或者是位于分布式系统内部或外部的任意设备。设备600不限于上述示例,只要能够实现上述测试方法即可。

本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、芯片上系统的系统(soc)、负载可编程逻辑设备(cpld)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。

用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。

在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。

为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,crt(阴极射线管)或者lcd(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。

可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(lan)、广域网(wan)和互联网。

计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,也可以为分布式系统的服务器,或者是结合了区块链的服务器。

应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。

上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1