Skip to content

pranav-ambig/YADLTS

Repository files navigation

MIT License Contributors Forks Stargazers Issues

Distributed Load Testing System

Overview

Welcome to the Distributed Load Testing System! This project aims to provide a scalable, high-throughput, and concurrent load testing solution for web servers WITH POKEMONS!. The system is designed to coordinate multiple driver nodes using Kafka as a communication service. It supports two types of load tests: Tsunami testing with configurable delays between requests and Avalanche testing with immediate request dispatch.

Built With

Apache Kafka React JavaScript Flask Python Ubuntu

Table of Contents

Architecture

The system consists of an Orchestrator Node, Driver Nodes, a Kafka broker for communication, and a Target HTTP Server for testing. The communication between nodes is facilitated through Kafka topics. The Orchestrator Node exposes a REST API for test control, metrics reporting, and monitoring.

Architecture Diagram

Installation

Warning

This application involves high utilization of resources and is recommended to run on WSL (Windows Subsystem for Linux).

  1. Clone the repository:

    git clone https://github.com/pranav-ambig/YADLTS.git
  2. Navigate:

    cd YADLTS
  3. RUN:

    docker build -t yadlts .
    docker run -it yadlts
    cd Frontend
    npm install
    npm run dev

Note

You need to have docker installed.

Features

Driver IDs:

Charizard  |  Blastoise  |  Venusaur  |  Pikachu  |  Snivy  |  Mewtwo  |  Tentacruel  |  Zapdos

Kafka Topics:

  • register
{
  "node_id": '<POKEMON NAME>',
  "node_IP": '<NODE IP ADDRESS (with port) HERE>',
  "message_type": 'DRIVER_NODE_REGISTER',
}
  • test_config
    {
        "test_id": '<RANDOMLY GENERATED UNQUE TEST ID>',
        "test_type": '<AVALANCHE|TSUNAMI>',
        "test_message_delay": '<0 | CUSTOM_DELAY (only applicable in place of Tsunami testing)>',
        "message_count_per_driver": '<A NUMBER>'
    }
  • trigger
    {
        "test_id": '<RANDOMLY GENERATED UNQUE TEST ID>',
        "trigger": "YES"
    }
  • metrics
    {
        "node_id": '<POKEMON NAME>',
        "test_id": '<RANDOMLY GENERATED UNQUE TEST ID>',
        "metrics": {
            "Mean": '<Mean of Latency>',
            "Median": '<Median of Latency>',
            "Mode": '<Mode of Latency>',
            "Min": '<Minimum Latency>',
            "Max": '<Maximum Latency>',
            "latency": '<Latency>',
            "Requests": '<Number of requests sent>'
        }
    }
  • heartbeat
  {
        "node_id": '<POKEMON NAME>',
        "heartbeat": "<YES/NO>"
  }

Screenshots

Image 1 Image 2

Contributing

We welcome contributions! Feel free to open issues for bug reports or feature requests. Pull requests are encouraged If you find this repository useful, kindly consider giving it a star ⭐️

License

This project is licensed under the MIT License