Ddosify : High-performance load testing tool

There are over 50+ tools and solutions available in the market for performance testing your application and services. Now it is time to check out Ddosify, high-performance load testing tool which offers free and commercial features to test web applications and services over HTTP(S), HTTP/2, and other protocols are on their way. In this blog article, let us deep-dive into Ddosify tool and see whether it satisfies a typical performance engineer or not.

Before we see Ddosify, let us try to understand the name of the tool. Ddosify contains Ddos term. DDoS stands for Distributed Denial of Services. Below is the Wikipedia entry for Denial of Service:

In computing, a denial-of-service attack is a cyber-attack in which the perpetrator seeks to make a machine or network resource unavailable to its intended users by temporarily or indefinitely disrupting services of a host connected to the Internet.

An attacker targets a machine and tries to disrupt its services. The term distributed stands for multiple sources. Instead of attacking a system from one source, attacker uses multiple sources.

If you try to fit the DDoS capabilities for good intent, you will get Ddosify.

What is Ddosify?

Ddosify is a high-performance load testing tool written in Golang. It comes in two flavors: open-source and commercial.

It supports HTTP(S), HTTP/2 protocols (as of now); other protocols are on the way.

JSON support for creating scenarios.

Supports various workload models.

Getting Started

As Ddosify is Golang based, the prerequisite is to install the latest and stable version of Golang if you want to build from the source, else you can download the binaries to get started. Head to https://golang.org/dl/ to install the Golang.

To install Ddosify, you can leverage Docker or install it from source.

docker run -it --rm ddosify/ddosify
go install -v go.ddosify.com/[email protected]

After successful installation, you can verify Ddosify by issuing the below command.

ddosify -version

Quick Start

Let us start a quick load testing, targeting the demo app. I am running a sample Jetty app locally on the port 8080. To begin the testing using Ddosify, you can issue the below command.

ddosify -t http://localhost:8080/test/hello

The above command sends 100 requests in 10 seconds. Below is the output. During the test, Ddosify displays the status runtime. Once the test is done, it will display the results with DNS, Connection, Request Write, Server Processing, Response Read time and Total time in seconds.

To terminate the test, you can press Ctrl + C.

Ddosify : High-performance load testing tool
Ddosify : High-performance load testing tool

Scenario Design

Now let us design a quick scenario to test the demo app in JSON. Copy and paste the below JSON and save it as config.json.

To start the test, issue 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
      }
    }    
  ]
}

The above scenario throws 20 requests (iterates) over the period of 5 seconds. Below is the output.

Ddosify : High-performance load testing tool
Ddosify : High-performance load testing tool

Below are the various flags available for Ddosify at this time of writing.

FlagDescriptionTypeDefaultRequired?
-tTarget website URL. Example: https://ddosify.comstringYes
-nTotal request countint100No
-dTest duration in seconds.int10No
-pProtocol of the request. Supported protocols are HTTP, HTTPS. HTTP/2 support is only available by using a config file as described. More protocols will be added.stringHTTPSNo
-mRequest method. Available methods for HTTP(s) are GET, POST, PUT, DELETE, UPDATE, PATCHstringGETNo
-bThe payload of the network packet. AKA body for the HTTP.stringNo
-aBasic authentication. Usage: -a username:passwordstringNo
-hHeaders of the request. You can provide multiple headers with multiple -h flag.stringNo
-TTimeout of the request in seconds.int5No
-PProxy address as host:port. -P http://user:[email protected]_host.com:port'stringNo
-oTest result output destination. Other output types will be added.stringstdoutNo
-lType of the load test. Ddosify supports 3 load types.stringlinearNo
-configConfig File of the load test.stringNo
-versionPrints version, git commit, built date (utc), go information and quitNo
Ddosify Flags

Workload Models

At this moment, Ddosify supports three workload models: Linear, Incremental, and Waved.

Linear helps to inject the load consistently over the period of time.

Incremental injects the load gradually increasing.

The wave pattern injects the load like peaks and valleys.

How many requests you can send from your system?

To determine, how many requests you can generate on the system, purely depends on the CPU, memory, and other parameters. You need to run benchmark tests and conclude your findings.

I have two cores with 16 GB RAM. Golang is based on a lightweight thread managed by Go runtime called goroutines. Golang has better concurrency than other languages. You can easily spin up hundreds of threads using minimal resources.

I executed a test with 10000 requests. As you see, the load is proportional to the time.

High Load Test
High Load Test

When I injected with 10000000, I observed high CPU and memory on ddosify.exe and the test took a long time to complete. I have to terminate the exe file. It is not DDosify issue, it is my system configuration. I have an under-powered config which cannot be useful for running very high load.

Overall

Ddosify might be a good fit if you want to run a very high load quickly with minimal configuration. It is still in the very early stages, and a lot of features are missing (parameterization, logical actions, scripting to name a few). The commercial version is yet to be released.; I am on the waiting list. I hope Ddosify team will develop the features which will satisfy typical performance engineers eventually. I urge you to try Ddosify to ddosify your app.

Ddosify : High-performance load testing tool

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Join the fastest growing Performance Engineers club at ClubhouseSHOW ME HOW
+ +
Share via
Copy link