Skip to content

eduard0167/Load-Balancer

Repository files navigation

// Copyright 2021 Mitroi Eduard Ionut

----------------------------- Load balancer -----------------------------------

Continut:

  -main.c : main-ul programului, simuleaza partea ce tine de client (apeleaza)
  sistemul distribuit).

  -load_balancer.c - load_balancer.h : functiile care se ocupa de logica
  sistemului 

  -server.c - server.h : functiile care se ocupa de operatiile pe servere

  -Array.c - Array.h : contine functii care ajuta la implementarea unui vector
  ordonat crescator.

  -Hashtable.c Hashtable.h : implementarea dictionarului.

  -LinkedList.c - LinkedList.h : implementarea listei simplu inlatuite
  utilizate in implementarea dictionarului.

  -Utils.h : functia DIE pentru verificarea posibilelor erori din program.

  -Makefile

  -README

Implementare:

  Pentru reprezentarea sistemul distribuit am folososit doua structuri
  principale: load_balancer si server_memory.
    - Structura load balancer contine un array de servere, un hashring care
    contine etichetele replicilor ordonate crescator si numarul de elemente
    din hashring.
    - Structura server_memory contine un hashtable, structura dictionarului 
    continand toti parametrii necesari serverului. Din acest motiv, in server.c
    functiile legate de server doar apeleaza functiile implementate pentru
    dictionar.

  Pentru implementarea hashring-ului am utilizat functiile din Array. a insera
  si a elimina elemente din array, pastrand vectorul ordanat crescator, si o 
  functie de cautare binara care imi returneaza pozitia primului element mai
  mare sau egal decat un element dat.

  Functiile de retrieve si store din load_balancer.c sunt destul de simple:
  prin cautare binara gasesc prima eticheta care are hash-ul mai mare decat
  cel al cheii, dupa care sunt apelate functiile din server.c pentru a stoca /
  returna elementul dorit in functie de cheia sa (adica, sunt apelate
  functiile ht_put si ht_get pe serverul respectiv).

  Pentru a mentine sistemul distribuit uniform dupa adaugarea / eliminarea unui
  server, este realizata realocarea elementelor pentru fiecare dintre replicile
  unui server. Se utilizeaza aceeasi functie de realocarea in ambele cazuri,
  diferenta fiind la apelarea functie, pentru care se tine cont de un paramatru
  command care indica tipul operatie si alege serverul sursa si cel destinatie
  (sunt inversate la adaugare fata de eliminare).
  Ideea este urmatoarea: sunt gasite etichetele vecine unei etichete primite ca
  parametru, iar conditia generala este ca hash-ul cheii elementului din sursa 
  sa se afle intre hash-ul etichetei anteriore si hash-ul destinatie pentru a 
  realiza realocarea. Din cauza folosirii unui array care are element de la 0 
  n - 1, in situatia in care sursa este cel mai mare element sau cel mai mic,
  conditia este modificata.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors