Load Balancer Simulation
A simulation of a load balancer with dynamic server scaling in C++
Loading...
Searching...
No Matches
LoadBalancer.h
Go to the documentation of this file.
1
5
6#ifndef LOAD_BALANCER_H
7#define LOAD_BALANCER_H
8
9#include "Request.h"
10#include "WebServer.h"
11#include "Config.h"
12#include <queue>
13#include <vector>
14#include <memory>
15#include <random>
16
25public:
31 LoadBalancer(int initialServers, const LoadBalancerConfig& config);
32
37 void run(int totalClockCycles);
38
43 void prefillQueue(int count);
44
48 void generateRequest();
49
53 void scaleServers();
54
58 void assignRequests();
59
64 void printSummary(int initialServerCount) const;
65
66private:
72
77 std::string generateRandomIP();
78
84 void log(const char* colorCode, const char* msg) const;
85
87 std::queue<Request> requestQueue_;
88 std::vector<std::unique_ptr<WebServer>> servers_;
94
95 std::mt19937 rng_;
96 std::bernoulli_distribution requestDist_;
97 std::uniform_int_distribution<int> timeDist_;
98 std::uniform_int_distribution<int> octetDist_;
99 std::uniform_int_distribution<int> jobTypeDist_;
100
106};
107
108#endif
Defines the LoadBalancerConfig structure for simulation parameters.
Defines the Request structure for load balancer simulation.
Defines the WebServer class for processing requests.
void generateRequest()
Possibly generate a new request (based on probability).
void scaleServers()
Add or remove servers based on queue size thresholds.
int minQueueThreshold_
std::uniform_int_distribution< int > timeDist_
int maxQueueThreshold_
std::string generateRandomIP()
Generate a random IP address string (x.x.x.x format).
LoadBalancerConfig config_
std::vector< std::unique_ptr< WebServer > > servers_
void assignRequests()
Assign queued requests to idle servers.
void log(const char *colorCode, const char *msg) const
Log a message with optional color code.
std::uniform_int_distribution< int > octetDist_
std::mt19937 rng_
void run(int totalClockCycles)
Run the simulation for the specified number of clock cycles.
LoadBalancer(int initialServers, const LoadBalancerConfig &config)
Construct the load balancer with initial servers and config.
void prefillQueue(int count)
Prefill the request queue with random requests.
std::uniform_int_distribution< int > jobTypeDist_
std::bernoulli_distribution requestDist_
void printSummary(int initialServerCount) const
Print simulation summary statistics.
std::queue< Request > requestQueue_
Request createRandomRequest()
Create a random request with random IPs and processing time.
int requestsAddedToQueue_
Configuration parameters for the load balancer simulation.
Definition Config.h:16
Represents a single request/job in the load balancer simulation.
Definition Request.h:15