市场上有超过50 种工具和解决方案可用于测试应用程序和服务的性能。现在是时候看看 Ddosify,这是一款高性能负载测试工具,它提供免费和商业功能来测试 HTTP(S)、HTTP/2 和其他协议上的 Web 应用程序和服务。在这篇博客文章中,让我们深入研究 Ddosify 工具,看看它是否能满足典型的性能工程师的需求。
在了解 Ddosify 之前,我们先来了解一下该工具的名称。Ddosify 包含Ddos
术语。DDoS 代表分布式拒绝服务。以下是拒绝服务的维基百科条目:
在计算领域,拒绝服务攻击是一种网络攻击,攻击者试图通过暂时或无限期中断连接到互联网的主机的服务,使其目标用户无法使用机器或网络资源。
攻击者瞄准一台机器并试图破坏其服务。术语“分布式”代表多个来源。攻击者不是从一个来源攻击系统,而是使用多个来源。
如果您出于良好意图尝试适应DDoSDdosify
功能,您将获得.
什么是 Ddosify?
Ddosify是一个用 Golang 编写的高性能负载测试工具。它有两种风格:开源和商业。
支持HTTP(S)、HTTP/2协议(目前);其他协议正在制定中。
JSON 支持创建场景。
支持各种工作负载模型。
入门
由于 Ddosify 是基于 Golang 的,如果您想从源代码构建,先决条件是安装最新且稳定版本的 Golang,否则您可以下载二进制文件来开始。前往 https://golang.org/dl/ 安装 Golang。
要安装 Ddosify,您可以利用 Docker 或从源代码安装它。
docker run -it --rm ddosify/ddosify
go install -v go.ddosify.com/ddosify@latest
安装成功后,您可以通过发出以下命令来验证 Ddosify。
ddosify -version
快速开始
让我们针对演示应用程序开始快速负载测试。我正在端口 8080 上本地运行示例 Jetty 应用程序。要使用 Ddosify 开始测试,您可以发出以下命令。
ddosify -t http://localhost:8080/test/hello
上述命令在 10 秒内发送 100 个请求。下面是输出。在测试过程中,Ddosify 显示运行时状态。测试完成后,它将显示结果,包括 DNS、连接、请求写入、服务器处理、响应读取时间和总时间(以秒为单位)。
要终止测试,您可以按Ctrl + C
。
场景设计
现在让我们设计一个快速场景来测试 JSON 中的演示应用程序。复制并粘贴以下 JSON 并将其另存为config.json
.
要开始测试,请发出ddosify -config .\config.json
.
{
"request_count": 20,
"load_type": "linear",
"duration": 5,
"output": "stdout",
"steps": [
{
"id": 1,
"url": "http://localhost:8080/test/session/",
"protocol": "http",
"method": "POST",
"headers": {
"ContenType": "application/xml",
"header1": "header2"
},
"payload": "Name=test&Value=test&Action=Set",
"timeout": 3,
"others": {
"keep-alive": true,
"disableCompression": false,
"h2": true,
"disable-redirect": true
}
}
]
}
上述场景在 5 秒内抛出 20 个请求(迭代)。下面是输出。
以下是在撰写本文时可用于 Ddosify 的各种标志。、
旗帜 | 描述 | 类型 | 默认 | 必需的? |
---|---|---|---|---|
-t | 目标网站网址。例子: https://ddosify.com | string | – | 是的 |
-n | 请求总数 | int | 100 | 不 |
-d | 测试持续时间(以秒为单位)。 | int | 10 | 不 |
-p | 请求的协议。支持的协议有 HTTP、HTTPS。HTTP/2 支持只能通过使用所描述的配置文件来获得。将添加更多协议。 | string | HTTPS | 不 |
-m | 请求方法。HTTP 的可用方法有 GET、POST、PUT、DELETE、UPDATE、PATCH | string | GET | 不 |
-b | 网络数据包的有效负载。又名 HTTP 主体。 | string | – | 不 |
-a | 基本身份验证。用法: -a username:password | string | – | 不 |
-h | 请求的标头。您可以提供带有多个标志的多个 -h 标头。 | string | – | 不 |
-T | 请求超时(以秒为单位)。 | int | 5 | 不 |
-P | 代理地址为主机:端口。 -P http://user:pass@proxy_host.com:port' | string | – | 不 |
-o | 测试结果输出目的地。将添加其他输出类型。 | string | stdout | 不 |
-l | 负载测试的类型。Ddosify 支持 3 种负载类型。 | string | linear | 不 |
-config | 负载测试的配置文件。 | string | – | 不 |
-version | 打印版本、git 提交、构建日期 (utc)、转到信息并退出 | – | – | 不 |
工作负载模型
目前,Ddosify 支持三种工作负载模型:线性、增量和波动。
线性有助于在一段时间内一致地注入负载。
增量注入负载逐渐增加。
波形像波峰和波谷一样注入负载。
您可以从系统发送多少个请求?
要确定系统上可以生成多少请求,完全取决于 CPU、内存和其他参数。您需要运行基准测试并总结您的发现。
我有两个内核和 16 GB RAM。Golang 基于一个由 Go 运行时管理的轻量级线程,称为 goroutine。Golang 比其他语言具有更好的并发性。您可以使用最少的资源轻松启动数百个线程。
我执行了 10000 个请求的测试。如您所见,负载与时间成正比。
当我注入 10000000 时,我观察到 ddosify.exe 的 CPU 和内存很高,并且测试需要很长时间才能完成。我必须终止 exe 文件。这不是 DDosify 问题,而是我的系统配置问题。我的配置动力不足,无法用于运行非常高的负载。
全面的
如果您想以最少的配置快速运行非常高的负载,Ddosify 可能是一个不错的选择。它仍处于非常早期的阶段,并且缺少很多功能(参数化、逻辑操作、脚本编写等等)。商业版本尚未发布。我在等候名单上。我希望 Ddosify 团队最终能够开发出能够满足典型性能工程师需求的功能。我强烈建议您尝试使用 Ddosify 来 ddosify 您的应用程序。