Load Balancer Simulation
A simulation of a load balancer with dynamic server scaling in C++
Loading...
Searching...
No Matches
LoadBalancer Class Reference

Main simulation engine that manages web servers and request queue. More...

#include <LoadBalancer.h>

Public Member Functions

 LoadBalancer (int initialServers, const LoadBalancerConfig &config)
 Construct the load balancer with initial servers and config.
void run (int totalClockCycles)
 Run the simulation for the specified number of clock cycles.
void prefillQueue (int count)
 Prefill the request queue with random requests.
void generateRequest ()
 Possibly generate a new request (based on probability).
void scaleServers ()
 Add or remove servers based on queue size thresholds.
void assignRequests ()
 Assign queued requests to idle servers.
void printSummary (int initialServerCount) const
 Print simulation summary statistics.

Private Member Functions

Request createRandomRequest ()
 Create a random request with random IPs and processing time.
std::string generateRandomIP ()
 Generate a random IP address string (x.x.x.x format).
void log (const char *colorCode, const char *msg) const
 Log a message with optional color code.

Private Attributes

LoadBalancerConfig config_
std::queue< RequestrequestQueue_
std::vector< std::unique_ptr< WebServer > > servers_
int currentTime_
int minQueueThreshold_
int maxQueueThreshold_
int lastScaleTime_
int nextServerId_
std::mt19937 rng_
std::bernoulli_distribution requestDist_
std::uniform_int_distribution< int > timeDist_
std::uniform_int_distribution< int > octetDist_
std::uniform_int_distribution< int > jobTypeDist_
int totalProcessed_
int totalBlocked_
int requestsAddedToQueue_
int serversAdded_
int serversRemoved_

Detailed Description

Main simulation engine that manages web servers and request queue.

Handles request generation, assignment to servers, and dynamic scaling based on queue thresholds.

Definition at line 24 of file LoadBalancer.h.

Constructor & Destructor Documentation

◆ LoadBalancer()

LoadBalancer::LoadBalancer ( int initialServers,
const LoadBalancerConfig & config )

Construct the load balancer with initial servers and config.

Parameters
initialServersNumber of web servers to start with
configConfiguration parameters for the simulation

Definition at line 40 of file LoadBalancer.cpp.

Member Function Documentation

◆ assignRequests()

void LoadBalancer::assignRequests ( )

Assign queued requests to idle servers.

Definition at line 129 of file LoadBalancer.cpp.

Referenced by run().

◆ createRandomRequest()

Request LoadBalancer::createRandomRequest ( )
private

Create a random request with random IPs and processing time.

Returns
A new Request object

Definition at line 72 of file LoadBalancer.cpp.

Referenced by generateRequest(), and prefillQueue().

◆ generateRandomIP()

std::string LoadBalancer::generateRandomIP ( )
private

Generate a random IP address string (x.x.x.x format).

Returns
Random IP address

Definition at line 65 of file LoadBalancer.cpp.

Referenced by createRandomRequest().

◆ generateRequest()

void LoadBalancer::generateRequest ( )

Possibly generate a new request (based on probability).

Definition at line 93 of file LoadBalancer.cpp.

Referenced by run().

◆ log()

void LoadBalancer::log ( const char * colorCode,
const char * msg ) const
private

Log a message with optional color code.

Parameters
colorCodeANSI color code (or empty)
msgMessage to log

Definition at line 28 of file LoadBalancer.cpp.

Referenced by generateRequest(), prefillQueue(), run(), and scaleServers().

◆ prefillQueue()

void LoadBalancer::prefillQueue ( int count)

Prefill the request queue with random requests.

Parameters
countNumber of requests to add to the queue

Definition at line 82 of file LoadBalancer.cpp.

Referenced by main().

◆ printSummary()

void LoadBalancer::printSummary ( int initialServerCount) const

Print simulation summary statistics.

Parameters
initialServerCountStarting number of servers for comparison

Definition at line 214 of file LoadBalancer.cpp.

Referenced by main().

◆ run()

void LoadBalancer::run ( int totalClockCycles)

Run the simulation for the specified number of clock cycles.

Parameters
totalClockCyclesNumber of simulation cycles to execute

Definition at line 172 of file LoadBalancer.cpp.

Referenced by main().

◆ scaleServers()

void LoadBalancer::scaleServers ( )

Add or remove servers based on queue size thresholds.

Definition at line 139 of file LoadBalancer.cpp.

Referenced by run().

Member Data Documentation

◆ config_

LoadBalancerConfig LoadBalancer::config_
private

Simulation configuration

Definition at line 86 of file LoadBalancer.h.

Referenced by generateRequest(), LoadBalancer(), log(), printSummary(), run(), and scaleServers().

◆ currentTime_

int LoadBalancer::currentTime_
private

Current simulation clock

Definition at line 89 of file LoadBalancer.h.

Referenced by LoadBalancer(), log(), run(), and scaleServers().

◆ jobTypeDist_

std::uniform_int_distribution<int> LoadBalancer::jobTypeDist_
private

Distribution for job type

Definition at line 99 of file LoadBalancer.h.

Referenced by createRandomRequest(), and LoadBalancer().

◆ lastScaleTime_

int LoadBalancer::lastScaleTime_
private

Last clock cycle when scaling occurred

Definition at line 92 of file LoadBalancer.h.

Referenced by LoadBalancer(), and scaleServers().

◆ maxQueueThreshold_

int LoadBalancer::maxQueueThreshold_
private

Queue size to trigger server addition

Definition at line 91 of file LoadBalancer.h.

Referenced by LoadBalancer(), and scaleServers().

◆ minQueueThreshold_

int LoadBalancer::minQueueThreshold_
private

Queue size to trigger server removal

Definition at line 90 of file LoadBalancer.h.

Referenced by LoadBalancer(), and scaleServers().

◆ nextServerId_

int LoadBalancer::nextServerId_
private

ID for next server to be created

Definition at line 93 of file LoadBalancer.h.

Referenced by LoadBalancer(), and scaleServers().

◆ octetDist_

std::uniform_int_distribution<int> LoadBalancer::octetDist_
private

Distribution for IP octets

Definition at line 98 of file LoadBalancer.h.

Referenced by generateRandomIP(), and LoadBalancer().

◆ requestDist_

std::bernoulli_distribution LoadBalancer::requestDist_
private

Distribution for request generation

Definition at line 96 of file LoadBalancer.h.

Referenced by generateRequest(), and LoadBalancer().

◆ requestQueue_

std::queue<Request> LoadBalancer::requestQueue_
private

Pending requests

Definition at line 87 of file LoadBalancer.h.

Referenced by assignRequests(), generateRequest(), prefillQueue(), printSummary(), and scaleServers().

◆ requestsAddedToQueue_

int LoadBalancer::requestsAddedToQueue_
private

Total new requests added

Definition at line 103 of file LoadBalancer.h.

Referenced by generateRequest(), LoadBalancer(), and printSummary().

◆ rng_

std::mt19937 LoadBalancer::rng_
private

Random number generator

Definition at line 95 of file LoadBalancer.h.

Referenced by createRandomRequest(), generateRandomIP(), generateRequest(), and LoadBalancer().

◆ servers_

std::vector<std::unique_ptr<WebServer> > LoadBalancer::servers_
private

Web server pool

Definition at line 88 of file LoadBalancer.h.

Referenced by assignRequests(), LoadBalancer(), printSummary(), run(), and scaleServers().

◆ serversAdded_

int LoadBalancer::serversAdded_
private

Total servers added during simulation

Definition at line 104 of file LoadBalancer.h.

Referenced by LoadBalancer(), printSummary(), run(), and scaleServers().

◆ serversRemoved_

int LoadBalancer::serversRemoved_
private

Total servers removed during simulation

Definition at line 105 of file LoadBalancer.h.

Referenced by LoadBalancer(), printSummary(), run(), and scaleServers().

◆ timeDist_

std::uniform_int_distribution<int> LoadBalancer::timeDist_
private

Distribution for processing time

Definition at line 97 of file LoadBalancer.h.

Referenced by createRandomRequest(), and LoadBalancer().

◆ totalBlocked_

int LoadBalancer::totalBlocked_
private

Total requests blocked (bad octet)

Definition at line 102 of file LoadBalancer.h.

Referenced by generateRequest(), LoadBalancer(), and printSummary().

◆ totalProcessed_

int LoadBalancer::totalProcessed_
private

Total requests completed

Definition at line 101 of file LoadBalancer.h.

Referenced by LoadBalancer(), printSummary(), and run().


The documentation for this class was generated from the following files: