数据库集群的压力测试方法和装置
技术领域
本发明属于测试技术领域,特别是涉及一种数据库集群的压力测试方法、一种数据库集群的压力测试装置、一种终端设备及一种计算机可读存储介质。
背景技术
为了保证业务系统的性能及可用性,通常需要对该业务系统进行压力测试,以验证业务系统在高负载下是否仍然能够良好的运行。
通常,针对业务系统进行的压力测试主要是对数据库或服务器来进行的。以用于文件存储的数据库为例,随着用户量的增多,针对数据库集群的并发量也越来越高,给数据库的正常运行造成了极大的压力,也给数据库的压力测试提出了更高的要求。
发明内容
有鉴于此,本发明实施例提供了一种数据库集群的压力测试方法和装置,以解决现有技术中的测试方法无法满足数据库集群的压力测试要求的问题。
本发明实施例的第一方面提供了一种数据库集群的压力测试方法,包括:
接收针对数据库集群的业务处理请求,所述业务处理请求包括读数据请求和写数据请求;
针对所述读数据请求,调用所述数据库集群的读数据接口读取预设数据表中的数据;以及,
针对所述写数据请求,获取待写入数据,并调用所述数据库集群的写数据接口将所述待写入数据写入所述预设数据表中;其中,读数据和写数据并行执行,单位时间内所述读数据的次数与所述写数据的次数之间的比值不小于2:1;
采集在执行所述读数据和所述写数据过程中所述数据库集群的性能数据。
可选地,所述针对所述读数据请求,调用所述数据库集群的读数据接口读取预设数据表中的数据的步骤包括:
确定当前测试的第一并发数,所述第一并发数超过预设数值;
基于所述第一并发数,调用读数据接口读取预设数据表中的数据,并行执行所述读数据和所述写数据的持续时间不少于第一时长。
可选地,还包括:
确定当前测试的第二并发数,所述第二并发数小于所述第一并发数;
基于所述第二并发数,并行执行所述读数据和所述写数据不少于第二时长;
采集所述数据库集群在所述第二时长的测试时段内的性能数据。
可选地,还包括:
统计当前资源占用率超过预设阈值的目标服务器节点;
在停止所述目标服务器节点的运行后,采集所述数据库集群当前的性能数据。
可选地,还包括:
重启所述目标服务器节点;
采集重启所述目标服务器节点后所述数据库集群当前的性能数据。
可选地,所述性能数据包括所述数据库集群的错误率、每秒传输的事务处理个数TPS、CPU使用率和内存使用率。
可选地,所述数据库集群为基于分布式文件存储的数据库集群MongoDB。
本发明实施例的第二方面提供了一种数据库集群的压力测试装置,包括:
接收模块,用于接收针对数据库集群的业务处理请求,所述业务处理请求包括读数据请求和写数据请求;
读数据模块,用于针对所述读数据请求,调用所述数据库集群的读数据接口读取预设数据表中的数据;以及,
写数据模块,用于针对所述写数据请求,获取待写入数据,并调用所述数据库集群的写数据接口将所述待写入数据写入所述预设数据表中;其中,读数据和写数据并行执行,单位时间内所述读数据的次数与所述写数据的次数之间的比值不小于2:1;
采集模块,用于采集在执行所述读数据和所述写数据过程中所述数据库集群的性能数据。
可选地,所述读数据模块包括:
第一并发数确定子模块,用于确定当前测试的第一并发数,所述第一并发数超过预设数值;
读数据子模块,用于基于所述第一并发数,调用读数据接口读取预设数据表中的数据,并行执行所述读数据和所述写数据的持续时间不少于第一时长。
可选地,所述装置还包括:
第二并发数确定模块,用于确定当前测试的第二并发数,所述第二并发数小于所述第一并发数;
第二执行模块,用于基于所述第二并发数,并行执行所述读数据和所述写数据不少于第二时长;
第二采集模块,用于采集所述数据库集群在所述第二时长的测试时段内的性能数据。
可选地,所述装置还包括:
统计模块,用于统计当前资源占用率超过预设阈值的目标服务器节点;
第三采集模块,用于在停止所述目标服务器节点的运行后,采集所述数据库集群当前的性能数据。
可选地,所述装置还包括:
重启模块,用于重启所述目标服务器节点;
第四采集模块,用于采集重启所述目标服务器节点后所述数据库集群当前的性能数据。
可选地,所述性能数据包括所述数据库集群的错误率、每秒传输的事务处理个数TPS、CPU使用率和内存使用率。
可选地,所述数据库集群为基于分布式文件存储的数据库集群MongoDB。
本发明实施例的第三方面提供了一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述数据库集群的压力测试方法的步骤。
本发明实施例的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述数据库集群的压力测试方法的步骤。
与现有技术相比,本发明实施例包括以下优点:
本发明实施例,在接收到针对数据库集群的读数据请求和写数据请求后,可以针对读数据请求,调用数据库集群的读数据接口读取预设数据表中的数据,针对写数据请求,获取待写入数据并调用数据库集群的写数据接口将上述待写入数据写入预设数据表中,通过采集在执行上述读数据和写数据过程中数据库集群的性能数据,可以验证数据库集群稳定运行的能力。本实施例通过测试在高负载下数据库集群同时读写数据的情况,可以对数据库集群的各项性能做出真实且准确的模拟测试,大大提高了数据库集群在线上的稳定运行能力。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一个实施例的一种数据库集群的压力测试方法的步骤流程示意图;
图2是本发明一个实施例的一种数据库集群的压力测试装置的示意图;
图3是本发明一个实施例的一种终端设备的示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本发明实施例。然而,本领域技术人员应当清楚,在没有这些具体细节的其他实施例中也可以实现本发明。在其他情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。
下面通过具体实施例来说明本发明的技术方案。
参照图1,示出了本发明一个实施例的一种数据库集群的压力测试方法的步骤流程示意图,具体可以包括如下步骤:
S101、接收针对数据库集群的业务处理请求,所述业务处理请求包括读数据请求和写数据请求;
需要说明的是,本方法的执行主体可以是进行压力测试的终端设备,如各种类型的测试设备。通过使用测试设备可以对数据库集群进行相应的压力测试。
在本发明实施例中,上述数据库集群可以是基于分布式文件存储的数据库集群MongoDB。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,支持的数据结构非常松散,可以存储比较复杂的数据类型。MongoDB最大的特点是它支持的查询语言非常强大,其语法类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
在本发明实施例中,针对MongoDB集群的业务处理请求可以是指针对MongoDB集群的压力测试请求,该请求中可以包括读数据请求和写数据请求。
S102、针对所述读数据请求,调用所述数据库集群的读数据接口读取预设数据表中的数据;
在本发明实施例中,针对读数据请求,可以调用MongoDB集群的读数据接口,通过该接口读取数据表中的数据。
在具体实现中,可以首先确定当前测试的第一并发数,上述第一并发数可以是超过预设数据的高并发数(High Concurrency)。
然后,基于上述第一并发数,调用读数据接口读取预设数据表中的数据,以执行读数据测试。
S103、针对所述写数据请求,获取待写入数据,并调用所述数据库集群的写数据接口将所述待写入数据写入所述预设数据表中;
在执行读数据测试的同时,针对写数据请求,可以同时执行写数据测试。
在具体实现中,可以首先准备一定数量的基础数据。例如,可以准备千万条基础数据,在高并发数的测试环境下,通过调用MongoDB集群的写数据接口,将上述基础数据写入预设数据表中。
需要说明的是,上述读数据和写数据的测试应当是并行执行的,以测试在高负载下进行同时读写时的数据库性能。并行执行读数据和写数据的持续时间应当不少于第一时长。例如,不少于30分钟。
在本发明实施例中,为了保证测试效果,在并行执行读数据和写数据测试的过程中,单位时间内读数据的次数与写数据的次数之间的比值可以不小于2:1。
作为本发明的一种示例,还以对数据库集群的稳定性进行测试。
在本发明实施例中,在进行稳定性测试前,可以首先确定当前测试的第二并发数。
通常,业务系统在稳定运行时,其并发数会明显小于高负载下的并发数。因此,上述第二并发数应当小于第一并发数。第二并发数的具体数值可以根据实际业务情况确定。
然后,可以基于第二并发数的测试环境,并行执行读数据和写数据不少于第二时长。例如,可以持续执行读写测试不少于12小时。
需要说明的是,在执行稳定性测试时,可以选择网络情况较为稳定的服务器运行测试脚本,以避免网络因素对测试结果的影响。
通过采集上述数据库集群在第二时长的测试时段内的性能数据,可以验证数据库集群的稳定性。
作为本发明的另一种示例,还以对数据库集群进行破坏性测试。
在具体实现中,可以首先在高负载环境下同时进行读数据测试和写数据测试一段时间,例如,可以是5分钟。
然后,统计当前资源占用率超过预设阈值的目标服务器节点,也就是识别出当前资源占用率较高的MongoDB节点,并停止该节点的运行。
在停止上述目标服务器节点的运行后,可以采集数据库集群当前的性能数据,以验证MongoDB集群是否会主动分配其他节点执行当前的测试任务。
通常,在停止一个节点的运行后,若读数据接口或写数据接口出现报错情形,则说明MongoDB集群分配节点存在问题;若停止一个节点的运行后,MongoDB集群仍能正常运行,则表示在缺少一个节点时,MongoDB集群仍然可以支撑高并发的数据请求,说明业务系统性能较佳。
在本发明实施例中,在停止一个节点的运行并采集相应性能数据后,可以再次重启被停止的目标服务器节点,并通过采集重启上述目标服务器节点后数据库集群当前的性能数据,继续对数据库性能进行验证。
S104、采集在执行所述读数据和所述写数据过程中所述数据库集群的性能数据。
在本发明实施例中,在执行压力测试过程中所需要采集的性能数据可以包括数据库集群的错误率、每秒传输的事务处理个数TPS、CPU使用率和内存使用率,通过对上述性能数据的分析,可以验证数据库集群稳定运行的能力。
在本发明实施例中,在接收到针对数据库集群的读数据请求和写数据请求后,可以针对读数据请求,调用数据库集群的读数据接口读取预设数据表中的数据,针对写数据请求,获取待写入数据并调用数据库集群的写数据接口将上述待写入数据写入预设数据表中,通过采集在执行上述读数据和写数据过程中数据库集群的性能数据,可以验证数据库集群稳定运行的能力。本实施例通过测试在高负载下数据库集群同时读写数据的情况,可以对数据库集群的各项性能做出真实且准确的模拟测试,大大提高了数据库集群在线上的稳定运行能力。
需要说明的是,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
参照图2,示出了本发明一个实施例的一种数据库集群的压力测试装置的示意图,具体可以包括如下模块:
接收模块201,用于接收针对数据库集群的业务处理请求,所述业务处理请求包括读数据请求和写数据请求;
读数据模块202,用于针对所述读数据请求,调用所述数据库集群的读数据接口读取预设数据表中的数据;以及,
写数据模块203,用于针对所述写数据请求,获取待写入数据,并调用所述数据库集群的写数据接口将所述待写入数据写入所述预设数据表中;其中,读数据和写数据并行执行,单位时间内所述读数据的次数与所述写数据的次数之间的比值不小于2:1;
采集模块204,用于采集在执行所述读数据和所述写数据过程中所述数据库集群的性能数据。
在本发明实施例中,所述读数据模块202具体可以包括如下子模块:
第一并发数确定子模块,用于确定当前测试的第一并发数,所述第一并发数超过预设数值;
读数据子模块,用于基于所述第一并发数,调用读数据接口读取预设数据表中的数据,并行执行所述读数据和所述写数据的持续时间不少于第一时长。
在本发明实施例中,所述装置还可以包括如下模块:
第二并发数确定模块,用于确定当前测试的第二并发数,所述第二并发数小于所述第一并发数;
第二执行模块,用于基于所述第二并发数,并行执行所述读数据和所述写数据不少于第二时长;
第二采集模块,用于采集所述数据库集群在所述第二时长的测试时段内的性能数据。
在本发明实施例中,所述装置还可以包括如下模块:
统计模块,用于统计当前资源占用率超过预设阈值的目标服务器节点;
第三采集模块,用于在停止所述目标服务器节点的运行后,采集所述数据库集群当前的性能数据。
在本发明实施例中,所述装置还可以包括如下模块:
重启模块,用于重启所述目标服务器节点;
第四采集模块,用于采集重启所述目标服务器节点后所述数据库集群当前的性能数据。
在本发明实施例中,所述性能数据可以包括所述数据库集群的错误率、每秒传输的事务处理个数TPS、CPU使用率和内存使用率。
在本发明实施例中,所述数据库集群可以为基于分布式文件存储的数据库集群MongoDB。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述得比较简单,相关之处参见方法实施例部分的说明即可。
参照图3,示出了本发明一个实施例的一种终端设备的示意图。如图3所示,本实施例的终端设备300包括:处理器310、存储器320以及存储在所述存储器320中并可在所述处理器310上运行的计算机程序321。所述处理器310执行所述计算机程序321时实现上述数据库集群的压力测试方法各个实施例中的步骤,例如图1所示的步骤S101至S104。或者,所述处理器310执行所述计算机程序321时实现上述各装置实施例中各模块/单元的功能,例如图2所示模块201至204的功能。
示例性的,所述计算机程序321可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器320中,并由所述处理器310执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段可以用于描述所述计算机程序321在所述终端设备300中的执行过程。例如,所述计算机程序321可以被分割成接收模块、读数据模块、写数据模块和采集模块,各模块具体功能如下:
接收模块,用于接收针对数据库集群的业务处理请求,所述业务处理请求包括读数据请求和写数据请求;
读数据模块,用于针对所述读数据请求,调用所述数据库集群的读数据接口读取预设数据表中的数据;以及,
写数据模块,用于针对所述写数据请求,获取待写入数据,并调用所述数据库集群的写数据接口将所述待写入数据写入所述预设数据表中;其中,读数据和写数据并行执行,单位时间内所述读数据的次数与所述写数据的次数之间的比值不小于2:1;
采集模块,用于采集在执行所述读数据和所述写数据过程中所述数据库集群的性能数据。
所述终端设备300可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述终端设备300可包括,但不仅限于,处理器310、存储器320。本领域技术人员可以理解,图3仅仅是终端设备300的一种示例,并不构成对终端设备300的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述终端设备300还可以包括输入输出设备、网络接入设备、总线等。
所述处理器310可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述存储器320可以是所述终端设备300的内部存储单元,例如终端设备300的硬盘或内存。所述存储器320也可以是所述终端设备300的外部存储设备,例如所述终端设备300上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(SecureDigital,SD)卡,闪存卡(Flash Card)等等。进一步地,所述存储器320还可以既包括所述终端设备300的内部存储单元也包括外部存储设备。所述存储器320用于存储所述计算机程序321以及所述终端设备300所需的其他程序和数据。所述存储器320还可以用于暂时地存储已经输出或者将要输出的数据。
本领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明。实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置/终端设备的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其他实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
在本发明所提供的实施例中,应该理解到,所揭露的装置/终端设备和方法,可以通过其他的方式实现。例如,以上所描述的装置/终端设备实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一方面,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其他的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件完成,所述的计算机程序可存储于计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读存储介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读存储介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读存储介质不包括电载波信号和电信信号。
以上所述实施例仅用以说明本发明的技术方案,而非对其限制。尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。