基于Kubernetes的分布式压力测试方案

压力测试是用来检测系统承载能力的有效手段。在系统规模较小的时候,在一台空闲的服务器上使用[ab],[wrk],[siege]等工具发起一定量的并发请求即可得到一个初步的测试结果。但在系统复杂度逐步提高,特别是引入了负载均衡,微服务等架构后,单机的压力测试方案不再可用,企业需要搭建分布式测试集群或者付费使用外部供应商提供的压力测试服务。

不管是采取自主搭建或是采用外购的手段,都会面临系统使用率不高以及成本的问题。基于Kubernetes的动态资源调度功能,以及Kubernetes集群的动态伸缩特性,我们可以充分利用集群内的闲置计算资源,在需要进行压力测试时启动测试节点,在测试结束后释放资源给其他业务,甚至通过集群扩容和缩容临时为压力测试提供更多的计算资源。

支持分布式部署的压力测试工具有多款,今天我们将介绍在Kubernetes集群中使用Tsung进行压力测试的方法。

Tsung

[Tsung]是一款使用[Erlang]开发的分布式压力测试系统,它支持HTTP,Jabber,MySQL等多种协议,可以用于不同场景的压力测试。与传统的针对单一测试目标重复请求的压测系统不同,Tsung更侧重于模拟真实使用场景。测试人员指定新用户到访频率,并设定一系列的模拟操作请求。所有的Slave节点将在Master节点的统一调度下,按照到访频率创建虚拟用户,并发送操作请求。
所有请求的耗时以及错误信息将传回Master节点用于统计和报表。

选择Tsung主要有三方面的考虑:

  • 性能优越。Erlang语言天生就是为高并发网络系统设计的。合理配置的Tsung集群可以实现100W以上的并发流量。
  • 描述式的配置方法。不论简单还是复杂,Tsung均统一使用XML文件描述整个测试步骤以及各种参数。这样可以在集群架构保持不变时完成各种测试。
  • 模拟真实用户的测试理念。在真实场景中,用户会访问系统的各项功能。只有支持模拟真实用户的压力测试系统才能比较准确的反应系统各个部分在压力下的状态,找到瓶颈环节。

由于Tsung采取的工作模式是在配置中注明Slave地址,然后由Master连上Slave完成测试,传统的部署方法是启动多台物理机或者虚拟机,分别配置它们。在这种工作模式下,会产生大量的运维工作,同时这些计算资源在不进行测试时处于闲置状态,降低了硬件使用率。

在Kubernetes中使用容器运行Tsung

利用Kubernetes强大的调度能力,我们可以将Tsung运行在容器当中,动态的启动和删除。当需要提高测试规模时,我们仅需要使用[Archon]等已有的工具对集群进行扩容,就可以很方便的一键扩容Slave的数量,几乎没有带来任何的运维负担。

以下是具体的操作流程:

创建Namespace

$ kubectl create namespace tsung

使用StatefulSet部署Tsung Slave

这里不能使用Deployment,只有使用StatefulSet才能在为每一个Pod分配独立的内部域名,供Master连接。

将以下文件保存为tsung-slave-svc.yaml

apiVersion: v1
kind: Service
metadata:labels:run: tsung-slavename: tsung-slave
spec:clusterIP: Noneselector:run: tsung-slaveports:- port: 22type: ClusterIP

将以下文件保存为tsung-slave.yaml

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:name: tsung-slave
spec:serviceName: "tsung-slave"replicas: 1template:metadata:labels:run: tsung-slavespec:containers:- name: tsungimage: ddragosd/tsung-docker:1.6.0env:- name: SLAVEvalue: "true"

在Kubernetes中创建相应的资源

$ kubectl create -f tsung-slave-svc.yaml --namespace tsung
$ kubectl create -f tsung-slave.yaml --namespace tsung

这里我们设置了StatefulSetserviceName字段,这样启动的Pod在集群内部就可以通过tsung-slave-0.tsung-slave.tsung.svc.cluster.local
这个域名访问到。

使用StatefulSet部署Tsung Master

与Slave类似,Master节点也要求可以在集群内部通过域名访问。所以我们依然需要使用StatefulSet来运行。

将以下文件保存为tsung-config.yaml

apiVersion: v1
kind: ConfigMap
metadata:name: tsung-config
data:config.xml: |<?xml version="1.0" encoding="utf-8"?><!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd" []><tsung loglevel="warning"><clients><client host="tsung-slave-0.tsung-slave.tsung.svc.cluster.local" /></clients><servers><server host="target" port="8000" type="tcp"/></servers><load><arrivalphase phase="1" duration="1" unit="minute"><users arrivalrate="100" unit="second"/></arrivalphase></load><sessions><session name="es_load" weight="1" type="ts_http"><for from="1" to="10" incr="1" var="counter"><request> <http url="/" method="GET" version="1.1"></http> </request></for></session></sessions></tsung>

将以下文件保存为tsung-master-svc.yaml

apiVersion: v1
kind: Service
metadata:labels:run: tsung-mastername: tsung-master
spec:clusterIP: Noneselector:run: tsung-masterports:- port: 8091sessionAffinity: Nonetype: ClusterIP

将以下文件保存为tsung-master.yaml

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:name: tsung-master
spec:serviceName: "tsung-master"replicas: 1template:metadata:labels:run: tsung-masterspec:containers:- name: tsungimage: ddragosd/tsung-docker:1.6.0env:- name: ERL_SSH_PORTvalue: "22"args:- -k- -f- /tsung/config.xml- -F- startvolumeMounts:- mountPath: /tsungname: config-volumevolumes:- configMap:name: tsung-configname: config-volume

在Kubernetes中创建相应的资源

$ kubectl create -f tsung-config.yaml --namespace tsung
$ kubectl create -f tsung-master-svc.yaml --namespace tsung
$ kubectl create -f tsung-master.yaml --namespace tsung

当Tsung Master的容器被启动后,它会自动开始运行压力测试。在上面的列子中,Tsung将向http://target:8000发起为期1分钟的压力测试,在测试期间,每秒钟产生100个模拟用户,每个用户访问10次目标地址。

我们将Tsung的配置文件用ConfigMap注入到了Master容器当中,这样用户仅需要修改tsung-config.yaml的内容,就可以方便的定义符合自己要求的测试。在实际使用过程中,用户可以自主调整测试持续时间,虚拟用户产生速度,目标地址等参数。用户还可以通过修改tsung-slave.yamlreplicas的数值,并将更多的Slave地址加入到tsung-config.yaml当中,来获得更多的测试资源,进一步增加负载量。

在Master的运行参数中,我们使用的-k参数将使得Master在测试完成后仍处于运行状态,这样用户可以通过8091端口访问到测试结果。

$ kubectl port-forward tsung-master-0 -n tsung 8091:8091

之后在本地通过浏览器访问http://localhost:8091即可打开Tsung内置的报表界面。如下图所示:

tsung_report

另外-F参数让Master使用FQDN地址访问Slave节点,这项参数非常关键,缺少它将导致Master无法正常连接上Slave。

资源回收

测试结束后,用户可以使用报表界面查看和保存结果。当所有结果被保存下来之后,可以直接删除Namespace完成资源回收。

$ kubectl delete namespace tsung

这样所有的Tsung相关配置和容器均会被删除。当下次需要测试时,可以从一个全新的状态开始新一次测试。

总结

本文主要介绍了在Kubernetes中部署Tsung这款分布式压力测试系统的方法。其中使用StatefulSet配合-F参数的方法,使得Master和Slave可以顺利的使用域名找到对方,成功的解决了在容器中运行Tsung会遇到的访问问题。

原本需要专业的运维工程师投入不少时间才能搭建起来的Tsung测试集群,在Kubernetes中几乎可以毫不费力的启动起来,完成测试。这种使用调度器充分利用集群空闲资源,使用后及时释放供其他系统使用的方法,也充分体现了Kubernetes的优越性。

在下一篇分享中,我们将使用本文所描述的测试系统,对主流的Python WSGI服务器进行压力测试,用以对比各个服务器的性能指标。希望通过这种实战演示的方式,帮助大家深入了解Tsung以及Kubernetes。敬请期待。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/541099.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

The output path is not specified for module XXX

新建项目启动时候&#xff1a;The output path is not specified for module XXX 没有为模块XXX指定输出路径。 解决方案 第一步 第二步 第三步

erwin模型导入mysql_使用erwin进行mysql建模

1,定义数据字典&#xff0c;把需要用到的数据类型创建好2&#xff0c;在物理模式下&#xff0c;设置数据字典&#xff0c;修改comment为%AttName这样会默认使用逻辑模式下&#xff0c;实体属性的名称作为字段的注释3&#xff0c;物理模式下选择database->pre & post scr…

Linux网络那点事

跨平台系列汇总&#xff1a;http://www.cnblogs.com/dunitian/p/4822808.html#linux 之前的之前说过网络自连接的配置&#xff08;CentOS服务器网络配置&#xff1a;http://www.cnblogs.com/dunitian/p/4975830.html&#xff09;&#xff0c;这次和这个类似 这种方法适用于Cent…

机器学习中的马尔可夫随机场模型

马尔可夫随机场 (Markovs Random Fields) Markov random model is a model which use an undirected graph. Undirected graphical models edge represents the potential between two variables, syntactically, Factorization distribution probabilities between variable. …

python爬虫反爬 css 知乎 专栏_反反爬虫系列(四)

过完年&#xff0c;好了&#xff0c;咱们接着更新反反爬虫系列至于之前有朋友表示出一下1688呀&#xff0c;x宝的反反爬虫说实在的&#xff0c;阿里系的反爬虫很厉害&#xff0c;我自愧不能搞定。比如x宝的登录&#xff0c;用了selenium chrome的朋友都会遇到滑条拖动验证失败…

javaweb中mysql数据库的回滚操作代码

2019独角兽企业重金招聘Python工程师标准>>> 在mysql中创建用户账户数据库&#xff08;注意&#xff0c;count不能为负数&#xff0c;要设置无符号型&#xff09; 添加数据 下面我们得到connection对象开始进行事务提交和回滚的操作 package com.lyb.test; import s…

[性能测试] LoadRunner结果分析 – TPS

本文转载自&#xff1a;http://www.tuicool.com/articles/6z6vuy针对吞吐率和 TPS 的关系&#xff0c;这个在结果分析中如何使用&#xff0c;就个人经验和朋友讨论后&#xff0c;提出如下建议指导&#xff0c;欢迎同僚指正。相关定义响应时间 网络响应时间 应用程序响应时间响…

密码学电子书_密码学中的电子密码书(ECB)

密码学电子书This Electronic Code Book (ECB) is cryptography as a mode of operation for a block cipher, with the characters the main things that every feasible block of plaintext or an original text has a corresponding characteristic of ciphertext value and…

tsql是mysql中的吗_Mysql中的sql是如何执行的

MySQL中的SQL是如何执行的MySQL是典型的C/S架构,也就是Client/Server架构,服务器端程序使用的mysqld.整体的MySQL流程如下图所示:MySQL是有三层组成:连接层: 负责客户端与服务器端建立连接,客户端发送SQL至服务端;SQL层: 对SQL语句进行查询处理;存储引擎层: 与数据库文件打交道…

软件质量特性测试

针对软件质量特性进行测试&#xff0c;可以避免重大漏测&#xff0c;一般人我不告诉他。《软件工程—产品质量》&#xff08;GB/T 16260-2006&#xff09;中规定对软件的每个质量特性与子特性都有定义&#xff1a;一、功能性&#xff1a;是指当软件在指定条件下使用&#xff0c…

amie 规则挖掘_AMIE的完整形式是什么?

amie 规则挖掘AMIE&#xff1a;工程师协会的准会员 (AMIE: Associate Member of the Institution of Engineers) AMIE is an abbreviation of Associate Member of the Institution of Engineers. The Institution of Engineers India Limited (IEIL) provides this profession…

Palo Alto Networks漏洞防护扩展至云端

中国北京&#xff0c;2016年4月12日 –下一代安全企业Palo Alto Networks?(纽交所代码&#xff1a;PANW)近日宣布进一步增强其下一代安全平台&#xff0c;扩展漏洞防护能力&#xff0c;以满足那些依赖云环境和SaaS应用的业务对安全的需求。 企业机构需要变得更加灵活和有竞争力…

java 嵌套调用_Java嵌套类的使用

嵌套类是指被定义在另一个类内部的类&#xff0c;它为外部类提供服务。嵌套类分四种&#xff1a;静态成员类、非静态成员类、匿名类和局部类。一、静态成员类与非静态成员类的区别&#xff1f;在什么情况下可以用静态成员类&#xff1f;我们知道在类的设计中&#xff0c;为了避…

车联网领域,传统TSP企业做错了什么 ?

当下&#xff0c;车联网的定义更加丰富和宽泛&#xff0c;除了传统意义上的Telematics服务&#xff0c;数字服务、移动出行服务、电商平台等将被融入到车联网概念中&#xff0c;与用车相关的维修保养、洗车、代驾等第三方服务&#xff0c;也将成为整车厂整合的重点被纳入到车联…

Shell脚本/bin/bash^M: bad interpreter错误解决方法

2019独角兽企业重金招聘Python工程师标准>>> 在windows下保存了一个脚本文件&#xff0c;用ssh上传到centos&#xff0c;添加权限执行nginx提示没有那个文件或目录。 shell脚本放到/etc/init.d/目录下&#xff0c;再执行/etc/init.d/nginx&#xff0c;提示多了这句/…

Facebook也大干新闻聚合 “新闻快读”向所有媒体开放

去年五月&#xff0c;Facebook推出了不离开本站直接阅读新闻的聚合服务“新闻快读”&#xff08;Instant Articles&#xff09;&#xff0c;用户载入文章的速度大增&#xff0c;不过当时只面向一些特定合作的新闻机构。日前&#xff0c;这一聚合服务全面开始接纳所有的新闻媒体…

苹果再次拒绝协助美国政府解锁纽约毒品案中的iPhone

继美国联邦调查局(FBI)成功解锁圣贝纳迪诺市恐袭案枪手 Syed Farook所使用的iPhone 5c后&#xff0c;美国司法部已撤回对苹果公司采取的法律行动。然而近日美国司法部宣布&#xff0c;将继续要求苹果公司协助解锁一部在纽约毒品调查案中查获的iPhone 5s手机。不过苹果今天向美国…

java结构设计_Java基本的程序设计结构(一)

前言&#xff1a;虽然说学过设计模式&#xff0c;J2EE&#xff0c;这个学期才开始学Java&#xff0c;呵呵&#xff0c;有点颠倒了&#xff0c;但是还是要从基本的抓起。hoho&#xff5e;&#xff5e;(一)一个简单的java应用程序Package edu.ynu.java.lession1/*The simplest Ja…

中国制造2025变革,背后的大数据来龙去脉

大数据的成长路径一定是个长期成长过程&#xff0c;实用分析工具与先进分析理念&#xff0c;真正释放数字化分析的力量&#xff0c;由人类轨迹产生的数据&#xff0c;与机器自动产生的数据得出洞见&#xff0c;从管理决策推导运营方案&#xff0c;最终实现数据价值提升。无论是…

java 文件下载 jsp文件_jsp文件 Java实现文件上传与下载

通过前台选择文件&#xff0c;然后将资源上传到(即新建一个文件)到发布的资源文件下面&#xff0c;下载就是url 到发布的资源文件&#xff0c;触发即可自动下载。服务器已经封装了如何下载的底层实现。(此处用的是tomcat)JSP上传文件方法&#xff1a;关于在HTTP request 中通过…